business express Codeblock-Onlinehilfe

Kontakt zum Support | www.dontenwill.de


Codeblock Syntax

Variablen-Typen:

Diagramm:

Beschreibung:

C | Character/String
D | Date
L | Logical/Boolean
N | Numeric
U | Kann verschiedene werte annehmen (Default)
R | Referenzvariable
DT | DateTime
DR | Duration

Variablendeklaration:

Diagramm:

Restriktionen:

- Eine Variablendeklaration darf pro Programm und Funktion nur ein Mal am Anfang definiert werden.

- Wird eine Zuweisung direkt bei der Deklaration getroffen muss der Typ angegeben werden. Siehe Beispiel a).

Beispiele:

a)

| m_cString:C:="Text", m_nZahl:N:=10 |

b) Sonderfall Datum

| m_dDatum:D:=Date() |

c)

| m_dDatum, m_cText, m_nNummer |

Arraydeklaration:

Diagramm:

Beispiel:

a)

| m_aAr |

m_aAr := {"1", "2", "3"},

WriteLn(m_aAr[1])

Ergebnis der Ausgabe: “1“

b)

| m_aAr |

m_aAr := {{1, 2}, {3, 4}},

WriteLn(m_aAr[2, 1]),

Ergebnis der Ausgabe: 3

Anweisungen:

Diagramme:

Restriktionen:

- Sonderanweisungen sind nur innerhalb bestimmter Anweisungen möglich:

- EXIT nur in einer Funktion

- BREAK nur in einer Schleife

- Ein Block besteht aus 1 bis n Anweisungen und endet ohne Komma. Mehrere
Anweisungen werden durch Komma getrennt.

Zuweisung:

Diagramm:

Beispiele:

a)

| m_nResultat:N:=0 |

m_nResultat := 10

Wert von m_nResultat = 10

b)

| m_nResultat:N:= 0 |

function Addition(add1, add2)

   result := add1 + add2

end

m_nResultat := Addition(10,5)

Ergebnis: m_nResultat = Rückgabewert der Funktion Addition (hier: 15)

Rekursive Zuweisung:

Restriktionen:

- Es können ganze Ausdrücke zugewiesen werden, sofern die rechte Seite einen eindeutigen Wert ergibt.

Beispiele:

a)

| m_nTest |

m_nTest := 10,

m_nTest := (m_nTest += (m_nTest + 1)),

WriteLn(Str(m_nTest))

Ergebnis: Ausgabe des Strings „21“

Funktionsdefinition:

Diagramm:

Beispiele:

a)

| nResultat:N:=0 |

function Testfunktion()

   result := 10

end

nResultat := Testfunktion()

Ergebnis: nResultat = 10

b)

| nResultat:N:=0 |

function Testfunktion(param1, param2)

   | nErgebnis |

   nErgebnis := param1 + param2,

   result := nErgebnis

end

nResultat := Testfunktion(5, 5)

Ergebnis: nResultat = 10

c)

| nResultat:N:=0 |

function Testfunktion(param1, param2)

   function Multiplikation(p1, p2)

      result := p1 * p2

   end,

   nResult := Multiplikation(param1, param2)

end

nResultat := Testfunktion(5, 5)

Ergebnis: nResultat = 25

d)

| nResultat:N:=0 |

function Testfunktion_A() ... end,

function Testfunktion_B() ... end,

function Testfunktion_A()

   result := Testfunktion_B(),

end

function Testfunktion_B()

   result := 10,

end

nResultat := Testfunktion_A()

Ergebnis: nResultat = 10

e)

| nResultat:N:=0 |

function Testfunktion(param1:=10)

result := param1,

end

nResultat := Testfunktion()

Funktionsrückgabewert:

Restriktionen:

- Der Rückgabewert einer Funktion wird in der Spezialvariable „result“ gespeichert, welche
immer automatisch vorhanden ist und nicht extra deklariert werden muss.

Beispiele:

a)

function Testfunktion()

   result := 10

end,

WriteLn(Str(Testfunktion()))

Ergebnis: Ausgabe des Strings „10“

Sonderfall Call by Reference für Übergabeparameter:

Restriktionen:

- Parametertyp R markiert einen Übergabeparameter für referenzierte Funktionsaufrufe

Beispiele:

a)

| nTest |

function Test(nCount:R)

   WriteLn(str(nCount)),

   nCount++

end,

nTest := 10,

test(nTest),

WriteLn(str(nTest))

Ergebnis: Ausgabe der Strings „10“ und „11“

Sonderfall Exit mit Zuweisung des Results:

Restriktionen:

- Exit mit Parameterangabe bewirkt eine implizite Zuweisung des Parameters an das Funktionsergebnis Result.

Beispiel:

a)
function ExitResult()

   Exit(10),

   WriteLn('Dieser Text wird nie geschrieben'),

end,

ExitResult()

Ergebnis: 10

Funktionsaufruf:

Diagramm:

Beispiele:

a)

| m_nResultat:N:=0 |

function Testfunktion()

   result := 10

end,

m_nResultat := Testfunktion()

Ergebnis: m_nResultat = 10

b)

| m_nResultat:N:=0 |

function Sum(nP1, nP2)

   result := nP1 + nP2

end,

m_nResultat := Sum(10, 15)

Ergebnis: m_nResultat = 25

Einfache Arithmetik:

Diagramm:

Restriktionen:

- Nur mit numerischen Werten und Variablen

- Ausnahme: beim "+" Operator können auch Strings verwendet werden.

- Innerhalb einer Operation müssen alle Typen gleich sein.

Beispiele:

a)

| m_nResultat:N:=0 |

m_nResultat := 10 + 10

Ergebnis: m_nResultat = 20

b)

| m_nResultat:N:=0 |

m_nResultat := 2 ^ 5

Ergebnis: m_nResultat = 32

c)

| m_cString, m_nZahl |

m_cString := "Die Zahl: ",

m_nZahl   := 10,

m_cString = m_cString + m_str(m_nZahl),

Ergebnis: m_cString = "Die Zahl: 10"

Automatische Arithmetik:

Diagramm:

Restriktionen:

- Nur mit numerischen Werten und Variablen

- Ausnahme: beim "+=" Operator können auch Strings verwendet werden.

- Bei einer Operation müssen alle Typen gleich sein.

Beispiele:

a)

| m_nResultat:N:=5 |

m_nResultat += 1

Ergebnis: m_nResultat = 6

b)

| m_nResultat:N:=0 |

m_nResultat++

Ergebnis: m_nResultat = 1

Bedingungen und Vergleiche:

Allgemein:

Diagramm:

Restriktionen:

- Vergleiche werden innerhalb Bedingungen und logischen Zuweisungen verwendet

- Operator „$“ kann nur mit „String“ Werten und Variablen verwendet werden

if-Anweisungen:

Diagramm:

Beispiele:

a)

| m_nResultat:N:=0 |

if (10 >= 5) and (m_nResultat = 0) then

   m_nResultat := 10,

else

   m_nResultat := 5

endif

Ergebnis: m_nResultat = 10

b)

| m_cTest |

m_cTest := "bc",

if m_cTest $ "abcdefg" then

   WriteLn("true")

else

   WriteLn("false")

endif

Ergebnis: Ausgabe des Strings „true“, da „bc“ in „abcdefg“ enthalten ist.

c)

| m_bTrue, m_bFalse, m_bRes |

m_bTrue  := true,

m_bFalse := false,

m_bRes   := m_bTrue and m_bFalse,

if m_bRes then

   WriteLn("Wahr"),

else

   WriteLn("Falsch"),

endif

Ergebnis: Ausgabe des Strings „Falsch“

case-Anweisungen:

Diagramm:

Restriktionen:

- Bei Vergleichen in der of Anweisung wird statt einer Variable nach dem case der
boolsche Wert true gesetzt.

Beispiele:

a)

| m_nCount |

m_nCount := 1,

case m_nCount

   of 0 ::   WriteLn("A"),

   of 1 ::   WriteLn("B"),

   otherwise WriteLn("C"),

endcase

Ergebnis: Ausgabe des Strings „B“

b)

| m_nCount |

m_nCount := 1,

case m_nCount

   of {0, 1} :: WriteLn("A"),

   of {2, 3} :: WriteLn("B"),

   otherwise    WriteLn("C"),

endcase

Ergebnis: Ausgabe des Strings „A“

c)

| m_nCount |

m_nCount := 10,

case true

   of m_nCount < 0 :: WriteLn("A"),

   of m_nCount < 5 :: WriteLn("B"),

   otherwise          WriteLn("C"),

endcase

Ergebnis: Ausgabe des Strings „C“

for-Schleife:

Diagramm:

Restriktionen:

- Berechnung der Schleifenwiederholungen erfolgt einmal zu Beginn

Beispiele:

a)

| m_nCount:N:=0 |

for m_nCount := 0 to 10 do

   WriteLn(m_nCount),

next

Ergebnis: Ausgabe der Zahlen 0 bis 10

b)

| m_nCount:N:=0 |

for m_nCount := 10 downto 0 do

   WriteLn(m_nCount),

next

Ergebnis: Ausgabe der Zahlen 10 bis 0

foreach-Schleife:

Diagramm:

Restriktionen:

- Berechnung der Schleifenwiederholungen erfolgt einmal zu Beginn

Beispiele:

a)

| m_nRec, m_aArr |

m_aArr := {1, 2, 3, 4, 5},

foreach m_nRec in m_aArr do

   WriteLn(Str(m_nRec)),

end

Ergebnis: Ausgabe der Zahlen 1 bis 5

while-Schleife:

Diagramm:

Restriktionen:

- Berechnung der Schleifenwiederholung erfolgt je Durchlauf

Beispiele:

a)

| m_nCount:N:=0 |

while m_nCount <= 10 do

   WriteLn(m_nCount),

   m_nCount++,

end

Ergebnis: Ausgabe der Zahlen 0 bis 10

repeat-Schleife:

Diagramm:

Restriktionen:

- Berechnung der Schleifenwiederholung erfolgt je Durchlauf

Beispiele:

a)

| m_nCount:N:=0 |

repeat

   writeln(m_nCount),

   m_nCount++,

until m_nCount > 10 end

Ergebnis: Ausgabe der Zahlen 0 bis 10

Loop-Schleife:

Diagramm:

Informationen:

Dieser Schleifen-Typ ersetzt Konstruktionen wie z.B.: while True do ...
Loop wird immer mit End abgeschlossen.
Die Schleife kann nur in Verbindung mit Break oder Exit (innerhalb von Funktionen) verlassen werden.

Beispiel:

| i |
i := 1,
loop // Schleifenbeginn
   i++,
   if i = 10 then
      WriteLn(i),
      Break
   endif
end // Schleifenende

Include von Programmdateien:

Diagramm:

Restriktionen:

- Die zu „includierende“ Programmdatei muss freigegeben sein! („Version freigeben“)

Beispiele:

a)

Programmdateipfad: Includeprogramm

Dateiinhalt:

function Ausgabe(cStr)

   writeln(cStr)

end

b)

//#P Includeprogramm

Ausgabe("Hallo Welt"),

Ergebnis: Ausgabe des Strings „Hallo Welt“

Exception-Handling / Schutzblöcke:

Diagramm:

Beispiele:

a)

| m_nCount:N:=10 |

startseq

   case m_nCount

      of 0 ::   WriteLn("A"),

      of 1 ::   WriteLn("B"),

      otherwise WriteLn("C"),

   endcase

onerror

   WriteLn("Fehler")

stopseq

b)

| m_nCount:N:=0 |

startseq

   while m_nCount < 10 do

      WriteLn(nCount),

   end

always

   WriteLn("Ende der Sequenz")

stopseq

Kommentare:

Beschreibung:

- Kommentare sorgen für einen verständlicheren Code, indem sie es ermöglichen, zusätzliche Beschreibungen einzuführen, die beim Ausführen des Codes jedoch ignoriert werden.

Beispiele:

Einzeilige Kommentare:

// Diese Zeile wird nicht ausgeführt.

WriteLn('Hello World'),

Mehrzeilige Kommentare:

a)

/*

Diese Zeile wird nicht ausgeführt.

Auch diese Zeile wird nicht ausgeführt.
*/

WriteLn('Hello World'),

b)

Writeln('Hello ' + /* Dieser Bereich wird nicht ausgeführt / komplett ignoriert */ 'World'),


Codeblock Source Style Guide

Strukturierung eines Codeblock-Programms (siehe Beispiel):

Jedes Codeblock-Programm sollte wie folgt strukturiert werden:

Beschreibung

Variablen

Konstanten

Funktionen

Eventhandler

Actionhandler

Oberflächen-Funktionen

Hauptprogramm

Dies hilft bei der Erstellung von übersichtlichem Code und optimiert hierbei den Workflow.

Tipp: Ab be 6.0 kann mit dem Tastenkürzel: Strg + J ein "template for a structured program with GUI" aufgerufen werden.

Kommentare und Code-Trennung:

Allgemein:

Im Allgemeinen sollte jeder Code/Codeabschnitt der nicht trivial, also nicht sofort durchschaubar ist,

mit kurzen klar verständlichen Kommentaren erklärt werden.

Dies hat neben einer besseren Strukturierung den Zweck, dass spätere Änderungen am Code schneller

durchgeführt werden können, da erheblich weniger Zeit benötigt wird um sich in den Code einzuarbeiten.

Kommentare:

Neue Codebereiche werden mit einem Bereichskopf voneinander getrennt der, bis zur

Markierung des rechten Seitenrandes im Editor reicht (80 Zeichen).

Bsp.:

//##############################################################################

//##############################################################################

//•Konstanten

//##############################################################################

//##############################################################################

¶

cMeineVariable := 1,

¶

Neue Funktionen werden mit einem Funktionskopf voneinander getrennt, der ebenfalls bis zur

Markierung des rechten Seitenrandes im Editor reicht.

Dieser Sollte beinhalten:

Kurzbeschreibung. (Mindestens ein vollständiger Satz. "Was macht diese Funktion?")

Rückgabe. ("Was gibt diese Funktion zurück?")

@Result: Typ - Beschreibung.

@Result: null

Transaktionshandling. ("Benötigt es Externes handling oder kann es dies selbst?")

@Transhandling: Extern

@Transhandling: Intern

@Transhandling: null

Bsp.:

//******************************************************************************

//•MeineFunktion fügt die Beiden Parameter zu einem String zusammen und

//•gibt diesen zurück.

//•@Result: Character - Zusammengesetzter Text aus nZahl und cText.

//•@Transhandling: null

//******************************************************************************

function MeineFunktion(nZahl, cText)

•••result := (str(nZahl)+ ' ' + cText),

end,

¶

Kommentare im Code die mehrere Zeilen betreffen sollten bündig mit dem darunterliegenden Code abschließen.

Bsp.:

//•Mein Kommentar

while not Bedingung do

•••//•Anweisungen

end,

Kommentare im Code die eine Zeile betreffen sollten hinter dem Code stehen.

Bsp.:

cMeineVariable := 1, //•Diese Variable = 1

Funktionslänge:

Eine Funktion sollte nie länger als 50 Zeilen sein!
Nur in absoluten ausnahmen mehr.

Einrückungen:

Einrückung immer drei Leerzeichen.

Bsp.:

function BeispielFunktion()

•••startseq,

   •••while Bedingung do

      •••if Bedingung then

         •••// Anweisungen...

         else

         •••// Anweisungen...

      •••endif,

   •••end,

•••stopseq

end,

Allgemeine Namensgebung:

Namen für:

Programme

Funktionen

Variablen

sollten wenn möglich einen sprechenden Namen erhalten.

Hierbei ist darauf zu achten, dass der Anfang jedes Wortes/Abkürzung (bei Variablen nach dem Typenprefix)

groß geschrieben wird.

Bsp.:

MeinNeuesProgramm

function MeineNeueFunktion()

m_cMeineNeueVariable,

Variablen:

Prefixe:

Programmvariablen erhalten zusätzlich zu dem TypenPrefix das Prefix: m_

Bsp.: m_cMeineVariable

TypenPrefixe:

numeric = n

Bsp.: nMeineZahl

character = c

Bsp.: cMeinText

boolean = b

Bsp.: bMeinBoolean

datum = d

Bsp.: dMeinDatum

objekt = o

Bsp.: oMeinObjekt

Ausnahmen:

Variablen für For-Schleifen etc. erhalten kein Prefix.

Bsp.:

| i, j, k, l, m, n |

for i := 0 to m_nKonstanterWert do

•••// Anweisungen...

end,

Abstände und Trennung:

Variablen werden immer mit mit einem "," und einem darauf folgenden Leerzeichen voneinander getrennt.

Bsp.:

| nMeineZahl,•cMeinText |

function MeineFunktion(cParameter1,•nParameter2) ...

Zuweisungen:

Eine Variablenzuweisung ist immer durch Leerzeichen von dem Operanden und dem Wert zu Trennen.

Bsp.:

cMeineVariable•:=•1,

Mehrere Variablenzuweisungen nacheinander sollten wie folgt strukturiert werden:

cMeinText •••:=•"text",

oMeinBoolean•:=•true,

nMeineZahl ••:=•1,

Die Operanden (z. B. :=, +=... ) werden hierbei dem längsten Ausdruck angepasst.

Events und Actions:

Wenn Code in einer Event- oder Action-Funktion länger als ein paar Zeilen ist sollte eine neue Funktion erstellt werden, die die Logik beinhaltet. Das Event oder die Action soll dann nur noch diese Funktion aufrufen.

Bsp.:

//******************************************************************************|

// Logik die durch Aktion angestoßen wird

// @Result: null

// @Transhandling: null

//******************************************************************************|

function MeineLogik()

   // nicht trivialer längerer Code

end,

//******************************************************************************|

// Meine Aktion beim Klicken auf den Button

// @Result: null

// @Transhandling: null

//******************************************************************************|

function A_MeineActionExecute(Sender)

   MeineLogik(),

end,


Codeblock GUI Style Guide

Allgemein:

Controls sollten immer mit der Abkürzung des jeweiligen Control-Typen beginnen.

Label | lbl_
Checkbox | chk_
Panel | pnl_
Dialoge | dlg_
ToolButtons | tb_
ToolBar | tbar_
DataSource | ds_
Grid | grd_
Button | btn_
Edit | edt_
Datum/Zeit | dtp_
ComboBox | cmb_
TCodeblockPanel | cbpnl_
TBeInfoPanel | bipnl_

Standardsettings für Dialoge, Fenster etc.

o       Schriftart Segoe UI

o       Schriftgröße 10

o       Schrift-style in Controls fett

Grundgerüst:

o       TBeInfoPanel für Headlines verwenden.

o       Wenn möglich AlignWithMargins verwenden, damit Zwischenräume gleichmäßig sind.

o       BevelOuter nur dort wo auch benötigt lassen, ansonsten BevelOuter = false (bvNone),

o       Buttons, Edits, Combos usw. sollten immer 25 pixel hoch sein.

o       Verschiedene Bereiche auf der Maske sollten sinnvoll mit Splittern getrennt sein.
Dies setzt voraus, dass Alignments richtig verwendet werden.


Funktionen

Siehe auch:

Allgemeine Funktionen

Array-Funktionen

be Funktionen

beas Funktionen

Datei- und Festplattenverwaltung

Datum und Zeit

Kommunikation

Logische Funktionen

Mathematische Funktionen

Objekte, Fenster, Steuerelemente

Programmierung

Reports und Druck

Scanner-Steuerung

Tabellen und Datenbanken

Text-Funktionen

Typenumwandlung


BeasIsCurrentState()

BeasIsCurrentState() – Prüfen des Status des beas

Beschreibung

Mit dieser Funktion kann der aktuelle Status des beas geprüft werden.

Diese Funktion steht nur für den beas zur Verfügung.

Die Konstante BeasCurrentState liefert den Wert des aktuellen Status des beas.

Parameter

aBeasState:N

Konstante zur Prüfung des aktuellen Status.

Gültige Konstanten sind:

BeasStateInvalid,

BeasStateEnd,

BeasStateStart,

BeasStateError,

BeasStateStopped,

BeasStateInitializing,

BeasStateStartingAsService,

BeasStateStartingAsWindowsApp,

BeasStateStarted,

BeasStateStopping

Rückgabewert

Logisch / Boolean - Status des beas entspricht dem übergebenen Wert

Beispiel

// prüfe, ob sich der beas im Status 'gestartet' befindet

// wenn nicht, gib den Wert des aktuellen Status des beas aus

if BeasIsCurrentState(BeasStateStarted) then

  WriteLn('beas ist gestartet'),

else

  WriteLn(Str(BeasCurrentState)),

endif,


BeAutoCloseMessage()

BeAutoCloseMessage()

Beschreibung

Die Funktion zeigt einen Dialog an, welcher sich nach einer bestimmten Zeit - sofern durch Parameter gesetzt - automatisch wieder schließt.

Parameter

cInfoText:C

Text, der auf dem Dialog angezeigt wird

cSaveID:C

Durch Angabe der cSaveID werden getroffenen Einstellungen für den nächsten Aufruf gespeichert. (siehe nForceAutoCloseAfterSeconds)

nForceAutoCloseAfterSeconds:N

Die Zeit in Sekunden, nach deren Ablauf der Dialog geschlossen wird.

Wird dieser Parameter nicht angegeben ist es möglich einzustellen, ob der Dialog automatisch geschlossen werden soll und wenn dies der Fall ist, nach wie vielen Sekunden dies geschieht.

nDialogMode:N

Der Modus in dem der Dialog geöffnet werden soll.

mtInformation | Anzeige eines Info-Texts (Default)
mtConfirmation | Bestätigungsdialog mit Ja/Nein-Auswahl

Rückgabewert

logisch - True für "Ok" oder "Ja"

Beispiel

BeAutoCloseMessage('Dummytext', , 5), // 5 Sekunden bis der Dialog geschlossen wird

Siehe auch:

MessageDlg()

BEMessageDlgEx()


Beep()

Beep() – Signalton

Beschreibung

Die Funktion gibt einen Signalton aus.

Parameter

keine Parameter erwartet

Rückgabewert

keiner

Beispiel

Beep()

Kontakt zum Support | www.dontenwill.de


BeGetFingerprint()

BeGetFingerprint() – Liefert Umgebungs- und Exception-Informationen

Beschreibung

Bei einer Exception wird ein "Fingerabdruck" vom jetzigen Stand des Systems als String zurück gegeben. Dies ist das gleiche Format wie es im Error-Log gespeichert wird.

Parameter

ExceptionObject:Obj | Das ErrorObject das bei einer Exception erhalten wird

Rückgabewert

Alphanumerisch - Ein mehrzeiliger String mit allgemeine Umgebungs- und Exception-Informationen von dem aktuellen Stand der Exe.

Beispiel

| oObject, cFingerprint |

startseq

  oObject.Property := '123',

onerror

  cFingerprint := BeGetFingerprint(GetErrorObj()),

  //cFingerprint := BeGetFingerprint(nil),

  //cFingerprint := BeGetFingerprint(),

  //BeLogError(cFingerprint),

  WriteLn(cFingerprint),

stopseq


BeSetLanguage()

BeSetLanguage() – Sprache einstellen

Beschreibung

Die Funktion stellt die Sprache auf den gegebenen Wert ein.

Hinweis

Die Konstante mBeSprache liefert den Index der aktuellen aktiven Sprache.

Die Konstante mBeAlleSprachen liefert ein Array zurück in welchem alle verfügbaren Sprachen sowie deren Sprachen-Index enthalten sind.

Array-Format: [[SprachenIndex1, SprachenName1], [SprachenIndex2, SprachenName2], ...]

Parameter

nIndex:N

Konstanten/Werte der Sprachen

Französisch | bctlFrench (1)
Niederländisch | bctlNetherlands (3)
Deutsch | bctlGerman (4)
Italienisch | bctlItalian (5)
Englisch | bctlEnglish (6)
Polnisch | bctlPolish (60)
Tschechisch | bctlCzech (61)
Rumänisch | bctlRomanian (66)
Slowenisch | bctlSlovenian (67)

Rückgabewert

Numerisch - der neue Sprachindex

Beispiel

| aLangIndex |

aLangIndex := mBeAlleSprachen[1,1],

if mBeSprache <> aLangIndex then

   if BeSetLanguage(aLangIndex) = aLangIndex then

      Meld("Sprache wurde erfolgreich umgestellt!"),

   endif,

endif,


beSkinColor()

beSkinColor()

Beschreibung

Die Funktion gibt je nach gewählter Basisfarbe (und Farbstufe) den entsprechenden Farbwert zurück.

Die Farben wurden vom Clarity Design System übernommen.

Parameter

nColor:N | Basisfarbe clarRed = Red clarPink = Pink clarPurple = Purple clarUltramarine = Ultramarine clarBlue = Blue clarCyan = Cyan clarTeal = Teal clarGreen = Green clarYellow = Yellow clarOrange = Orange clarRedOrange = Red-Orange clarWarmGrey = Warm-Grey clarNeutralGrey = Neutral-Grey clarCoolGrey = Cool-Grey
nAccent:N | Optional: Farbstufe clarAccent0 clarAccent1 clarAccent2 clarAccent3 clarAccent4 clarAccent5 clarAccent6 clarAccent7 clarAccent8 clarAccent9

Rückgabewert

Numerisch

Beispiel

| oForm, oPanelBasicColor, aPanelAccentColor |

oForm := CreateObject('TFormEx', 'TFormEx'),

oForm.Height := 300,

oForm.Width  := 300,

oPanelBasicColor := CreateObject('TBePanel', 'pnl_Basic', oForm, oForm),

aPanelAccentColor := CreateObject('TBePanel', 'pnl_Accent', oForm, oForm),

oPanelBasicColor.Align := alLeft,

oPanelBasicColor.Width := 150,

aPanelAccentColor.Align := alClient,

oPanelBasicColor.Color := beskinColor(clarBlue),

aPanelAccentColor.Color := beskinColor(clarBlue, clarAccent6),

oPanelBasicColor.Font.Color := beskinFontColor(clarBlue),

aPanelAccentColor.Font.Color := beskinFontColor(clarBlue, clarAccent6),

ShowModal(oForm),

Siehe auch:

beSkinFontColor()


beSkinFontColor()

beSkinFontColor()

Beschreibung

Die Funktion gibt je nach gewählter Basisfarbe (und Farbstufe) den entsprechenden Font-Farbe zurück.

Der Rückgabewert können die Farben weiß oder schwarz sein.

Die Farben wurden mit dem Algorithmus von Clarity Design System ermittelt.

Parameter

nColor:N | Basisfarbe clarRed = Red clarPink = Pink clarPurple = Purple clarUltramarine = Ultramarine clarBlue = Blue clarCyan = Cyan clarTeal = Teal clarGreen = Green clarYellow = Yellow clarOrange = Orange clarRedOrange = Red-Orange clarWarmGrey = Warm-Grey clarNeutralGrey = Neutral-Grey clarCoolGrey = Cool-Grey
nAccent:N | Optional: Farbstufe clarAccent0 clarAccent1 clarAccent2 clarAccent3 clarAccent4 clarAccent5 clarAccent6 clarAccent7 clarAccent8 clarAccent9

Rückgabewert

Numerisch

Beispiel

| oForm, oPanelBasicColor, aPanelAccentColor |

oForm := CreateObject('TFormEx', 'TFormEx'),

oForm.Height := 300,

oForm.Width  := 300,

oPanelBasicColor := CreateObject('TBePanel', 'pnl_Basic', oForm, oForm),

aPanelAccentColor := CreateObject('TBePanel', 'pnl_Accent', oForm, oForm),

oPanelBasicColor.Align := alLeft,

oPanelBasicColor.Width := 150,

aPanelAccentColor.Align := alClient,

oPanelBasicColor.Color := beskinColor(clarBlue),

aPanelAccentColor.Color := beskinColor(clarBlue, clarAccent6),

oPanelBasicColor.Font.Color := beskinFontColor(clarBlue),

aPanelAccentColor.Font.Color := beskinFontColor(clarBlue, clarAccent6),

ShowModal(oForm),

Siehe auch:

beSkinColor()


BIC_Chk()

BIC_Chk() – Syntaxüberprüfung für einen Bank Identifier Code (BIC)

Beschreibung

Die Funktion überprüft, ob der übergebene BIC dem allgemeinen Aufbau bzw. der Syntax eines gültigen BIC entspricht. Trifft dies zu, wird True zurückgegeben.

Wichtig: Es erfolgt keinerlei Prüfung, ob der BIC tatsächlich im BIC-Verzeichnis der SWIFT existiert.

Allgemeine Information zum Bank Identifier Code (BIC)

Beim BIC handelt es sich um eine von der SWIFT (Society for Worldwide Interbank Financial Telecommunication) festgelegte international gültige Bankleitzahl. Da der BIC von der SWIFT vergeben wird, bezeichnet man ihn oftmals auch als SWIFT-Code. Zusammen mit der IBAN als international einheitlicher Kontonummer bildet er die Daten, die zur Identifizierung eines Kontos im Rahmen von SEPA und der seit 2008 gültigen Euro-Überweisung benötigt werden, um sowohl im nationalen als auch im internationalen Zahlungsverkehr einen Empfänger einwandfrei zu identifizieren.

Der BIC besteht aus acht oder elf alphanumerischen Zeichen und ist wie folgt untergliedert:

- 4-stelliger Bankcode +

- 2-stelliger Ländercode +

- 2-stellige Codierung des Ortes +

- 3-stellige Kennzeichnung der Filiale (optional)

Beispiel für einen gültigen Code mit Filial-Kennzeichnung:

- GENODEM1GLS

Buchstaben im BIC werden immer groß geschrieben.

Parameter

BIC:C

Bank Identifier Code

Rückgabewert

Logisch

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Beispiel für die Verwendung der Funktion BIC_Chk() zur

//               BIC-Prüfung

//##############################################################################

//##############################################################################

|

   cValidBIC, cInvalidBIC

|

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Beispielfunktion

//******************************************************************************

function BICTest(cBIC)

   if BIC_Chk(cBIC) then

      MessageDlg('Bank Identifier Code' + CRLF +

                 '"' + cBIC + '"' + CRLF +

                 'ist gültig!', mtInformation, mbOK),

   else

      MessageDlg('Bank Identifier Code' + CRLF +

                 '"' + cBIC + '"' + CRLF +

                 ' ist ungültig!', mtError, mbOK),

   endif,

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

// Beispiel für einen gültigen BIC

cValidBIC   := 'GENODEM1GLS',

// Beispiel für einen ungültigen BIC

cInvalidBIC := 'GENODE*1',

//******************************************************************************

// Ausführung der Beispielfunktion

//******************************************************************************

BICTest(cValidBIC),

BICTest(cInvalidBIC),

Siehe auch:

IBAN_Chk()


ClearClipBoard()

ClearClipBoard() – Zwischenablage löschen

Beschreibung

Die Funktion löscht den in der Zwischenablage gespeicherten Text.

Parameter

keine Parameter erwartet

Rückgabewert

keiner

Beispiel

ClearClipBoard()

Siehe auch:

CopyToClipBoard()

PasteFromClipboard()


CopyRTFToClipboard()

CopyRTFToClipboard() – RTF-Text in Zwischenablage kopieren

Beschreibung

Kopiert den übergebenen RTF-Text sowohl in formatierter Form für RTF-Editoren als auch als reinen Text in die Zwischenablage. Wenn dieser in einen RTF-fähigen Editor eingefügt wird, so wird der eingefügte Text formatiert dargestellt. Sonst wird der Text ohne jegliche Formatierung eingesetzt.

Verwendet man die Kombination CopyToClipboard( RTFToText() ), übergibt der Funktion also Reintext, wird der Text ohne Formatierung in die Zwischenablage gespeichert.

Parameter

aText:C

Text, der im RTF-Format in der Zwischenablage gespeichert wird

Rückgabewert

keiner

Beispiel

// nach dem Ausführen dieses Beispiels in einem RichEdit einfügen (Strg+V)

CopyRtfToClipboard('{\rtf1\ansi\ansicpg0\uc0\deff0\deflang0\deflangfe0' +

                   '{\fonttbl{\f0\fnil Arial;}{\f1\fnil\fcharset0 Arial;}}' +

                   '{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0' +

                   '\green255\blue255;\red0\green255\blue0;\red255\green0' +

                   '\blue255;\red255\green0\blue0;\red255\green255\blue0;' +

                   '\red255\green255\blue255;\red0\green0\blue128;\red0' +

                   '\green128\blue128;\red0\green128\blue0;\red128\green0' +

                   '\blue128;\red128\green0\blue0;\red128\green128\blue0;' +

                   '\red128\green128\blue128;\red192\green192\blue192;}' +

                   '\pard\fi-1440\li1440\ql\ri0\sb0\sa0\itap0 \plain \f1\fs20' +

                   '\cf11 Dies\plain \f1\fs20\cf6  ist\plain \f1\fs20  \plain ' +

                   '\f1\fs20\cf2 ein\par \plain \f1\b\fs20 formatierter \plain ' +

                   '\f1\b\i\fs20 RTF\plain \f1\fs20 -Text\plain \f1\b\fs20 !\par}')

Siehe auch:

CopyToClipBoard()


CopyToClipBoard()

CopyToClipBoard() – Text in Zwischenablage kopieren

Beschreibung

Die Funktion kopiert einen Text in die Zwischenablage. Der Text kann anschließend in einen beliebigen Editor eingefügt werden.

Parameter

aText:C

Beliebige Zeichenkette

Rückgabewert

keiner

Beispiel

| aText, oDAB000:DB := 'waDAB000, 1' |

aText := AllTrim(oDAB000:NAME1) + ", " + AllTrim(oDAB000:NAME2) + crlf +

         AllTrim(oDAB000:PLZORT) + crlf + AllTrim(oDAB000:STRASSE),

CopyToClipboard(aText)

Siehe auch:

ClearClipBoard()

PasteFromClipboard()


CypherGetHash()

CypherGetHash() – Hash-Wert aus String ermitteln

Beschreibung

Die Funktion bildet aus dem übergebenen String einen Hash-Wert. Dieser Hash-Wert kann zur Überprüfung der Echtheit des Strings verwendet werden, z.B. zum Abgleich vor und nach einer Übertragung.

Hinweis

Die Funktion ist veraltet. Verwenden Sie stattdessen CalcHashString().

Parameter

cText:C

Beliebige Zeichenkette

Rückgabewert

Alphanumerisch - Gebildeter Hash-Wert

Beispiel

CypherGetHash('Dontenwill AG')

// Ergebnis: '7C2257007ED903D6EA619E6F09456CA8D2D336A842C59063250B33C0701D5F81'

Siehe auch:

CalcHashString()


DamerauLevenshteinDistance()

DamerauLevenshteinDistance() – Zur Duplikaterkennung

Beschreibung

Die Damerau-Levenshtein-Distanz beschreibt den "Abstand" zwischen zwei Strings. Sie gibt den Wert an, um den ein String von einem anderen abweicht.

Beispielsweise ist die Levenshtein-Distanz zwischen "Tier" zu "Tor" 2. Eine mögliche Folge von Operationen ist:

1. Tier

2. Toer (Ersetze i durch o)

3. Tor (Lösche e)

Die Erweiterung von Damerau ermöglicht es darüber hinaus die Vertauschung von zwei Zeichen zu erkennen:

Teir => Tier wäre nach Levenshtein eine Distanz von 2, nach Damerau von 1.

Parameter

aString1:C | 1. Vergleichsstring
aString2:C | 2. Vergleichsstring

Rückgabewert

Numerisch

Beispiel

//******************************************************************************

// Funktion ermittelt Dubletten nach dem Damerau-Levenshtein-Distanz-Verfahren

// siehe hierzu auch: http://de.wikipedia.org/wiki/Levenshtein-Distanz

//******************************************************************************

function IsDuplicateText(cString1, cString2, nAcceptableDistance, bCharOnly,

                         bIgnoreSurplusWords)

|aArr1, aArr2, aBuf, i, k, nCurrentDistance, nMaxDistance|

   // Konvertiert bestimmte Zeichen in ein anderes (hier Leerzeichen)

   function ConvertIgnoreCharsToDelimiter(cStr, cDelimiter, cIgnoreChars)

   |i, k|

      Result := '',

      for i:= 1 to Len(cStr) do

         Result += iif(SubStr(cStr, i, 1) $ cIgnoreChars, cDelimiter, SubStr(cStr, i, 1)),

      next,

   end,

   // Macht aus einem durch cDelimiter getrennten String ein Array

   function Explode(cStrToExp, cDelimiter)

   |i, cToken|

     Result := {},

     // Sonderfall: Ignorierte Zeichen durch Leerzeichen ersetzen

     if bCharOnly then

        cStrToExp := ConvertIgnoreCharsToDelimiter(cStrToExp, cDelimiter, '<>|^°²³()[]{}!§$%/\=?,.;:-_+*~#@€"' + Chr(39)),

     endif,

     for i:=1 to TokenCount(cStrToExp, cDelimiter) do

        cToken := Token(cStrToExp, cDelimiter, i),

        if Trim(cToken) <> '' then

           AAdd(Result, cToken),

        endif,

     end,

   end,

   aArr1 := Explode(cString1, ' '),

   aArr2 := Explode(cString2, ' '),

   // aArr1 sollte in jedem Fall das längere Array sein

   if ALen(aArr1) < ALen(aArr2) then

      aBuf  := aArr1,

      aArr1 := aArr2,

      aArr2 := aBuf,

   endif,

   // aArr1 passende Werte von aArr2 zuordnen

   aBuf := {},

   for i:=1 to ALen(aArr1) do

      if Len(aArr1[i]) > nAcceptableDistance then

         for k:=ALen(aArr2) downto 1 do

            nCurrentDistance := DamerauLevenshteinDistance(aArr1[i], aArr2[k]),

            if nCurrentDistance <= nAcceptableDistance then

               AAdd(aBuf, {aArr1[i], aArr2[k]}),

               ADelete(aArr2, k),

               break,

            endif,

            if not bIgnoreSurplusWords and k = 1 then

               AAdd(aBuf, {aArr1[i], ''}),

            endif,

         next,

      endif,

   next,

   if not bIgnoreSurplusWords then

      for k:=1 to ALen(aArr2) do

         if Len(aArr2[k]) > nAcceptableDistance then

            AAdd(aBuf, {aArr2[k], ''}),

         endif,

      next,

   endif,

   nMaxDistance := -1,

   for i:=1 to ALen(aBuf) do

      WriteLn(aBuf[i,1], aBuf[i,2]),

      nMaxDistance := Max(nMaxDistance, DamerauLevenshteinDistance(aBuf[i,1], aBuf[i,2])),

   next,

   Result := nMaxDistance <= nAcceptableDistance,

end,

IsDuplicateText('Dontenwill AG - Software

Siehe auch:

SoundEx()


Empty()

Empty() – Ausdruck auf "Leer" prüfen

Beschreibung

Die Funktion prüft, ob ein Ausdruck von beliebigem Datentyp (z.B. Zeichenkette, Datum, numerischer Wert) leer ist.

Parameter

aVar:U

Beliebiger Datentyp

Rückgabewert

Logisch / Boolean - Ausdruck leer

Beispiel

Empty("Dontenwill    ")   // Ergebnis: .F.

Empty("              ")   // Ergebnis: .T.

Empty(0)                  // Ergebnis: .T.


EmptyValue()

EmptyValue() – Leeren Wert erzeugen

Beschreibung

Die Funktion hebt für ein Feld oder eine Variable von beliebigem Datentyp (z.B. Zeichenkette, Datum, numerischer Wert) die Wertzuweisung auf.

Parameter

keine Parameter erwartet

Rückgabewert

Undefined - Nullwert

Beispiel

| nValue |

nValue := 5,

WriteLn(nValue),          // Ergebnis: nValue = '5'

nValue := EmptyValue(),

WriteLn(nValue)           // Ergebnis: nValue = ''


ExportExcelFile()

ExportExcelFile() – Datenexport in ein Excel-File

Beschreibung
Die Funktion exportiert Daten aus einer Tabelle in eine .xls Excel-Datei.

Parameter

cFile:C | Datei, in welche die Datensätze exportiert werden
oSource:O | Tabelle oder Grid Objekt, aus welcher die Datensätze exportiert werden
lAddTitle:L | Fügt über die Datensätze eine Zeile mit den Spaltennamen ein; default = false
lShowMsg:L | Info-Fenster werden angezeigt z.B. bei Beenden, Fehlern ...; default = false
lShowStatus:L | Status-Fenster wird angezeigt; default = false

Rückgabewert

Numerisch - Anzahl der exportierten Datensätze

Hinweis

Wird eine Tabelle exportiert, so wird diese 1zu1 exportiert, d.h. es erfolgen keine Anpassungen wie z.b. beim Export eines Browsers.

Daher gilt zu beachten:

- Tabelle darf keine Blob-Felder besitzen

- Feld-Typen sind für die Formatierung der Spalten verantwortlich

- ist die Tabelle nicht konform kann dies zu einem Fehler beim Export führen

Beispiel

| oDab100:DB := 'waDAB100' |

if ExportExcelFile('C:\Dab100.xls', oDab100) < 1 then

   Meld('Fehler beim Exportieren'),

endif,


FakeCall()

FakeCall() – Anrufsimulierung

Bescheibung

Die Funktion dient der Simulierung eines externen Anrufs.

Parameter

cNummer:C

Zu simulierende Nummer; default = Leerstring, Abfragedialog wird angezeigt.

Rückgabewert

Keiner

Beispiel

FakeCall('00892311480')


FormAsExportText()

FormAsExportText() – Konvertierung eines F12-Formulars nach JSON

Beschreibung

Konvertiert ein F12-Formular vom internen Array/Binär Format nach JSON.

Parameter

uValue:U

F12 Formular im Array/Binär Format

z.b. direkter Wert aus DabFIL:WIN_DATA oder StrToArr(DabFIL:WIN_DATA)

Rückgabewert

Alphanumerisch

Beispiel

|cProgIntern, cProgExport, cProgImport, aArr|

function SaveToFile(cValue, cFile)

   |oFile|

   oFile := FOpen(cFile, FO_CREATE),

   FWrite(oFile, cValue),

   FClose(oFile),

end,

function GetProg(cID)

   |oDabFIL|

   oDabFIL := BeOpen(waDabFIL),

   if oDabFIL.CbFindKey({520, cID}) then

      Result := oDabFIL:WIN_DATA,

   endif,

   BeClose(oDabFIL),

end,

function ExportForm(cID)

   Result := FormAsExportText(GetProg(cID)),

end,

cProgIntern := GetProg('@TEST'),

cProgExport := FormAsExportText(cProgIntern), // Internes F12-Formular Format als JSON

cProgImport := FormToImportText(cProgExport), // F12-Formular als JSON zurück ins interne Format

SaveToFile(cProgIntern, 'c:\temp\Form_AsBin.txt'),  // internes Format speichern als Datei

SaveToFile(cProgExport, 'c:\temp\Form_AsJSON.txt'), // JSON Format speichern als Datei

SaveToFile(cProgImport, 'c:\temp\Form_AsBinReconvert.txt'), // JSON Format zurück konvertiert ins interne Format als Datei

// internes Format ohne Header-Informationen

aArr := StrToArr(cProgIntern),

SaveToFile(aArr[3], 'c:\temp\Form_AsBin_OnlyForm.txt'),

aArr := FormToImportText(cProgExport, true),

SaveToFile(aArr[3], 'c:\temp\Form_AsBinReconvert_OnlyForm.txt'),

Siehe auch:

FormToImportText()


FormToImportText()

FormToImportText() – Konvertierung eines F12-Formular von JSON nach binär

Beschreibung

Konvertiert ein F12-Formular im JSON-Format zurück ins interne Array/Binär Format.

Parameter

cValue:C | F12 Formular als JSON-Text
lAsArray:L | Rückgabe im Array-Format, ansonsten als ArrToStr() String; Default = False

Rückgabewert

Alphanumerisch oder Array

Beispiel

// siehe FormAsExportText()

Siehe auch:

FormAsExportText()


GetBeDesignColor()

GetBeDesignColor()

Beschreibung

Die Funktion gibt je nach gewählter Basisfarbe (und Abstufungslevel) den entsprechenden Farbwert zurück.

Dabei harmonieren alle in der Funktion verfügbaren Farben miteinander.

Parameter

nBaseColor:N | Basisfarbe dcbWhite = Weiß dcbBlack = Schwarz dcbBrown = Braun dcbDarkBlue = Dunkelblau dcbLightBlue = Hellblau dcbRed = Rot dcbGreen = Grün dcbPurple = Lila dcbCyan = Türkis dcbOrange = Orange dcbYellow = Gelb
nGradation:N | Abstufung dcgBase = Grundfarbe (= Default) dcgLevel1 dcgLevel2 dcgLevel3 dcgLevel4 dcgLevel5

Rückgabewert

Farbwert von nBaseColor bzw. dessen Abstufung wenn nGradation angegeben ist.

Beispiel

| oForm, aPanels, oPanel, i, n, tm |

// Formular initialisieren

oForm := createObject('TFormEx'),

oForm.origCapt := 'GetBeDesignColor()-Test',

oForm.width    := 896,

oForm.height   := 118,

// Panels initialisieren

aPanels := {},

i       := 1,

while i <= 11 do

    redim(aPanels, aLen(aPanels) + 1),

    aPanels[i] := createObject('TPanel',,oForm, oForm),

    oPanel := aPanels[i],

    oPanel.bevelOuter := bvNone,

    oPanel.caption    := '',

    oPanel.width      := 80,

    oPanel.height     := 80,

    oPanel.left       := oPanel.width * (i - 1),

    i++,

end,

i := 1,

while i <= 11 do

    oPanel := aPanels[i],

    oPanel.color := getBeDesignColor(i - 1, dcgLevel2),

    i++,

end,

// Formular anzeigen

showModal(oForm),

Siehe auch:

beSkinColor()


GetErrorStack()

GetErrorStack() – Fehlerstapel

Beschreibung

Im Falle einer Exception liefert diese Funktion ein Array mit den Namen der aufgerufenen Funktionen, innerhalb derer

der Fehler aufgetreten ist.

Hinweis

Die Verwendung von GetErrorStack() ist nur zwischen OnError und StopSeq sinnvoll.

Parameter

aGetDetails:L

Bietet die Möglichkeit zwischen 2 Ausgabeformaten zu unterscheiden.

False:

Im Fehlerfall wird ein einfaches Array der Funktionsnamen erzeugt, deren Aufruf zur
Exception geführt hat.

True:

Jedes Element des Arrays enthält wiederum ein Array mit weiteren Details zum Fehler.

Folgende Informationen werden übergeben:

Result[n, 1] : Name der Funktion

Result[n, 2] : Zeile, in der der Fehler aufgetreten ist ( nur im Debug-Modus )

Result[n, 3] : Name der Exception-Klasse

Result[n, 4] : Fehlertext

Result[n, 5] : Adresse des Exception-Objekts

Result[n, 6] : ggf. Programmname, in dem die Funktion liegt

Rückgabewert

Array

Beispiel

Function MyFunc()

  Function MyInnerFunc()

    writeln('"' + PadR(PadL(4711 / 0, 10), 20) + '"') // division by zero

  end,

  MyInnerFunc()

end,

StartSeq

  MyFunc()

OnError

  WriteLn(GetErrorStack())

StopSeq,

WriteLn(GetErrorStack())

Siehe auch:

GetErrorCode()

GetErrorLine()

GetErrorObj()

GetErrorText()


GetFeatureToggleInfos()

GetFeatureToggleInfos() – Status-Informationen zu allen FeatureToggles ermitteln

Beschreibung

Mit dieser Funktion kann für alle FeatureToggles zur Laufzeit ermittelt werden, ob der Status aktiv oder inaktiv ist.

Parameter

lOneLine:L

True - die Ausgabe der FeatureToggles erfolgt ";" getrennt

False (default) - die Ausgabe der FeatureToggles erfolgt mit einem Zeilenumbruch

Rückgabewert

Alphanumerisch

Beispiel

GetFeatureToggleInfos(False)

Siehe auch:

IsFeatureToggleActive()


GetLogLevel()

GetLogLevel() – Aktuelles Log-Level

Beschreibung

Ermittelt das aktuell eingestellte Log-Level.

Rückgabewert

Numerisch - entsprechend des Log-Levels siehe Log()

Beispiel

function GetLogLevelDesc()

  case GetLogLevel()

    of llALL     :: Result := 'ALL',

    of llTRACE   :: Result := 'TRACE',

    of llDEBUG   :: Result := 'DEBUG',

    of llINFO    :: Result := 'INFO',

    of llWARNING :: Result := 'WARNING',

    of llERROR   :: Result := 'ERROR',

    of llFATAL   :: Result := 'FATAL',

    of llOFF     :: Result := 'OFF',

  endcase,

end,

Meld('Log-Level steht auf ' + GetLogLevelDesc()),

Siehe auch:

Log()

SetLogLevel()


GetTableFieldInfo()

GetTableFieldInfo() – Informationen über das Feld einer Tabelle ermitteln

Beschreibung

Die Funktion ermittelt zu einem Feld das TBeFieldInfo Objekt, darin befinden sich verschiedene Informationen über das gesuchte Feld.

Parameter

nWorkArea:N | WorkArea der Tabelle
cFieldName:C | Name des Feldes

Rückgabewert

Objekt (TBeFieldInfo)

Beispiel

| oDab010ArtNrInfo |

oDab010ArtNrInfo := GetTableFieldInfo(waDab010, 'ArtNr'),

WriteLn(oDab010ArtNrInfo.FieldName),

WriteLn(oDab010ArtNrInfo.DisplayName),


GetTableInfo()

GetTableInfo() – Information über Tabelle ermitteln

Beschreibung

Die Funktion gibt ein TBeTableInfo Objekt zur angegebenen Tabelle zurück. Das Objekt enthält verschiedene Informationen über die ausgewählte Tabelle.

Parameter

nWorkArea:N

WorkArea der Tabelle

Rückgabewert

Objekt - Vom Typ TBeTableInfo, enthält Informationen zur Tabelle

Beispiel

GetTableInfo(waDAB000)   // Ergebnis: [TBeTableInfo {$14BE91C}]

                         // Hinweis:  Tabelleninformationen zur DAB000 (Kundenstamm)


HasAttachment()

ToDo: Mit MemoBo Umstellung über MemoBo-Objekt abgedeckt -> Doku löschen

HasAttachment() – Prüft ein Blob-Feld auf eine Datei-Liste

Beschreibung

Mit dieser Funktion kann ein binäres BLOB-Feld auf gültige Attachments/Datei-Liste geprüft werden.

Hinweis

Der Feldname (cField) muss auf ein binäres Blob-Feld verweisen.

Der Blob-Inhalt muss Zip-komprimiert vorliegen.

Parameter

oTable:O | Tabellen-Objekt
cField:C | Blob-Feldname
bSkipLinks:L | Links ignorieren
bSkipEmbedded:L | Eingebettete Dateien (von Mails) ignorieren

Rückgabewert

Logisch

Beispiel

| oDAB065:DB:='waDAB065, DAB06B'|

DbLocate('Memo_ID', 17466, , oDAB065),                     // Datensatz aktivieren

WriteLn(HasAttachment(oDab065, 'DATA', True, True)),       // Auf Attachments im Feld DATA prüfen

                                                           // (Links und eingebettete Dateien ignorieren)


ImportExcelFile()

ImportExcelFile() – Datenimport aus einem Excel-File

Beschreibung

Die Funktion ImportExcelFile() importiert Daten aus einer .xls Excel-Datei in eine Tabelle.

Hinweis

Falls nEndRow kleiner nStartRow ist werden ALLE Zeilen importiert!

lCopyFieldNames:

- kann nur verwendet werden wenn es sich bei dem Tabellen-Objekt oTable um eine TMemCalcTable handelt

- es werden alle Felder aus der oTable entfernt, bevor diese automatisch erzeugt werden

- alle Felder werden als Memo Felder erzeugt

Parameter

oTable:O

Tabellen-Objekt, in welches die Daten importiert werden

cSource:C

.xls Excel-Datei, aus der die Daten importiert werden

nFieldNameRow:N

Zeile in welcher sich die Feldnamen befinden; default = 0

nStartRow:N

Gibt an, ab welcher Zeile die Daten importiert werden; default = 1

nEndRow:N

Gibt an, bis zu welcher Zeile die Daten importiert werden; default = 0

lShowMsg:L

Info-Fenster werden angezeigt z.B. bei Beenden oder Fehlern; default = false

lShowStatus:L

Status-Fenster wird angezeigt; default = false

nMode:N

Import Modus; default = 0

0 Datensätze werden ans Ende hinzugefügt

1 übereinstimmende Datensätze updaten (cKeys erforderlich)

2 übereinstimmende Datensätze updaten und nicht vorhandene ans Ende hinzufügen (cKeys erforderlich)

3 übereinstimmende Datensätze löschen (cKeys erforderlich)

4 alle Datensätze aus der "oTable" werden gelöscht. Anschließend wird die "oTable" mit den Import-Daten gefüllt

cKeys:C

Feldnamen durch ; getrennt. Diese Felder werden für die Prüfung auf Übereinstimmung verwendet; default = Leerstring

lCopyFieldNames

Erzeugt alle Felder automatisch anhand der "nFieldNameRow" Zeile der .xls Excel-Datei; default = true

Rückgabewert

Array - { Anzahl an neu hinzugefügten Datensätzen,

Anzahl der Datensätze in der "cSource" Datei,

Anzahl der gelöschten Datensätze,

Anzahl der aufgetretenen Fehler,

Anzahl an erfolgreich importierten Datensätze,

Anzahl der upgedateten Datensätze }

Beispiel

| oTable |

oTable := CreateObject('TMemCalcTable'),

ImportExcelFile(oTable, 'c:\test.xls', 1, 2, , , , , , true),

Browse(, oTable)


InputBox()

InputBox() – Eingabefenster

Beschreibung
Die Funktion öffnet ein Eingabefenster zur Eingabe eines Textes, mit Bestätigungs- und Abbruchsbutton.

Parameter

cCaption:C | Fenster-Beschriftung
cDescription:C | Beschreibung der Eingabeaufforderung
cDefault:C | Vorgabewert für die Eingabe
lIsPasswordEdit:L | PasswordEdit verwenden (blendet das Text aus und hat einen Knopf, welches ihn einblendet)
lWithCancelState:L | True - Ergebnis enthält auch die Aussage, ob der Dialog Bestätigt oder Abgebrochen wurde

Rückgabewert

Alphanumerisch - Bei Bestätigung eingegebener Text, bei Abbruch der Standard-String

oder wenn lWithCancelState = True ist die Rückgabe ein Array - {Eingegebener Text, False} = Dialog wurde mit OK bestätigt oder {Eingegebener Text, True} = Dialog wurde abgebrochen

Beispiel

| cName |

cName := InputBox('Bitte Firmenname eingeben:', 'Firma:', 'Dontenwill AG')


IsFeatureToggleActive()

IsFeatureToggleActive() – Prüfen ob ein bestimmter FeatureToggle aktiv ist

Beschreibung

Die Funktion prüft, ob der übergebene FeatureToggle aktiv ist oder nicht. Für alle FeatureToggles, die geprüft werden können, gibt es im Codeblock eine entsprechende Konstante.

Bisher gibt es folgende FeatureToggle-Konstanten:

featNewEmailSendSettings

featDispoHintRecords

featDispoPlanHorizonDay

featFinancialAccountingBO

Parameter

nFeature:N

FeatureToggle-Konstante

Rückgabewert

Logisch - übergebener FeatureToggle ist aktiv

Beispiel

| aFeatureToggleTypes, aFeatureToggleNames, i |

aFeatureToggleTypes := {featNewEmailSendSettings, featDispoHintRecords,

                        featDispoPlanHorizonDay, featFinancialAccountingBO},

aFeatureToggleNames := {'Neue E-Mail Einstellungen', 'Disposition Info-Records',

                        'Tagesgenaue Planung', 'FiBu-Business-Objekt'},

// Für jeden FeatureToggle prüfen ob er aktiv ist oder nicht

for i := 1 to ALen(aFeatureToggleTypes) do

   WriteLn('Das FeatureToggle "' + aFeatureToggleNames[i] + '" ist ' +

           IIf(IsFeatureToggleActive(aFeatureToggleTypes[i]), '', 'nicht ') + 'aktiv'),

next,

Siehe auch:

GetFeatureToggleInfos()


JN()

JN() – Abfragefenster Ja/Nein

Beschreibung

Die Funktion öffnet ein Bestätigungsfenster und gibt den Wert “Ja“ oder “Nein“ zurück.

Hinweis: die Funktion JN wird ggf. über eine Message-Hook abgefangen (s. auch BeMsgObjHook), der Default-Rückgabewert ist false.

Parameter

cQuestion:C | Frage
lDefault:U | Bestimmt den standardmäßig fokussierten Button; default = false = Nein-Button

Rückgabewert

Logisch / Boolean - Bestätigung erhalten

Beispiel

JN("Eingabe abbrechen?", false)

Siehe auch:

AssignGlobalEvent()


LocalPhoneInfo()

LocalPhoneInfo() – Meldung

Beschreibung

Die Funktion liefert Informationen zur Telefonie zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Array - { CountryCode,

CityCode,

LongDistanceAccesscode,

LocalAccessCode }

Beispiel

LocalPhoneInfo()

Kontakt zum Support | www.dontenwill.de


Log()

Log() – Log Eintrag erstellen

Beschreibung

Mit dieser Funktionen kann ein Logging im Codeblock umgesetzt werden.

Hierbei wird ein Eintrag in die allgemeine be Log-Tabelle DabLOG erstellt.

Parameter

uLogMessage:U | Inhalt des Log-Eintrags
nLogLevel:N | Log-Level: Wann entsteht der Log-Eintrag; Reihenfolge des Log-Levels (be startet mit Log-Level llWarning, dieses kann aber per Startparameter /LOGLEVEL geändert werden); 1 - llALL; 2 - llTRACE; 3 - llDEBUG; 4 - llINFO; 5 - llWARNING; 6 - llERROR; 7 - llFATAL; 8 - llOFF

Rückgabewert

True/False

Beispiel

Log('Dies ist ein Test-Log', llDebug)

Siehe auch:

GetLogLevel()

SetLogLevel()


Meld()

Meld() – Meldung

Beschreibung

Ausgabe eines Meldefensters, das mit “OK“ bestätigt werden muss. Der Rückgabewert ist immer True.

Hinweis: die Funktion Meld wird ggf. über eine Message-Hook abgefangen (s. auch BeMsgObjHook).

Parameter

cMessage:C

Nachrichtentext

Rückgabewert

Logisch / Boolean

Beispiel

Meld('Sie arbeiten mit Business Express.')

Siehe auch:

ShowMessage()

AssignGlobalEvent()

JN()


MessageDlg()

MessageDlg() – Meldungsdialog

Beschreibung

Die Funktion ermöglicht die Dialogabfrage einer Meldung und gibt je nach gewähltem Button den entsprechenden Wert zurück.

Hinweis: die Funktion MessageDlg wird ggf. über eine Message-Hook abgefangen (s. auch BeMsgObjHook).

Parameter

cMessage:C | Meldungstext
nDlgType:N | Dialogtyp ( default = mtInformation ) mtWarning 'Warnung' mtError 'Fehler' mtInformation 'Information' mtConfirmation 'Bestätigung'
nButtons:N | Buttons: ( default = mbOK ); Mögliche Werte: (es sind verschiedene Kombinationen möglich, einfach mit '+' addieren) mbOK 'OK' mbCancel 'Abbrechen' mbAbort 'Abbrechen' mbRetry 'Wiederholen' mbIgnore 'Ignorieren' mbYes 'Ja' mbNo 'Nein' mbAll 'Alle' mbNoToAll 'Alle Nein mbYesToAll 'Alle Ja'
nHelpCtx:N | Help-Kontext

Rückgabewert

Numerisch - je nach gewähltem Button:

1 - mrOK

2 - mrCancel

3 - mrAbort

4 - mrRetry

5 - mrIgnore

6 - mrYes

7 - mrNo

8 - mrAll

9 - mrNoToAll

10 - mrYesToAll

Beispiel

if MessageDlg('Verarbeitung wirklich abbrechen ?', mtWarning, mbYes + mbNo) = mrYes then

   writeln('Ja')

else

   writeln('Nein')

endif

Siehe auch:

AssignGlobalEvent()


MPicture()

MPicture() – Numerische Eingabemaske

Beschreibung

Die Funktion erzeugt eine numerische Eingabemaske.

Parameter

nLen:N | Länge der Zeichenkette
nDec:N | Anzahl der Nachkommastellen

Rückgabewert

Alphanumerisch - numerische Eingabemaske

Beispiel

MPicture(10,2)   // Ergebnis: #######.##

MPicture(3,0)    // Ergebnis: ###


Nil()

Nil() – Leeres Objekt

Beschreibung

Die Funktion erzeugt ein leeres Objekt.

Parameter

keine Parameter erwartet

Rückgabewert

Objekt - Leeres Objekt

Beispiel

| oObject |

oObject := Nil()


Null()

Null() – Leerer Wert

Beschreibung

Die Funktion gibt einen Null-Wert zurück. Da der Null-Wert vom Typ Variant ist, kann er jedem Datentyp zugewiesen werden.

Parameter

keine Parameter erwartet

Rückgabewert

Variant - Null-Wert

Beispiel

| uVar |

uVar := Null()


PasswordDlg()

PasswordDlg() – Passwort-Dialog

Beschreibung

Dialogfenster zur Eingabe und Prüfung eines Passwortes.

Parameter

cPassword:C | Passwort, welches abgefragt wird
cCaption:C | Titel des Dialogfensters; default = Leerstring
cCheckOnceID:C | ID, anhand derer geprüft wird, ob das Passwort bereits abgefragt wurde; default = Leerstring

Rückgabewert

Numerisch

0 – eingegebener String stimmt mit dem Passwort überein

1 – keine Übereinstimmung nach 3 Versuchen - Zugriff auf Funktion verweigert

2 – keine Übereinstimmung - Abbruch nach 1. oder 2. Versuch

Beispiel

PasswordDlg('Dontenwill', 'Bitte Passwort eingeben')

// Hinweis: Zwischen Groß- und Kleinschreibung wird nicht unterschieden


PasteFromClipboard()

PasteFromClipBoard() – Text aus Zwischenablage holen

Beschreibung

Holt den Text aus der Zwischenablage.

Parameter

keine Parameter erwartet

Rückgabewert

String

Beispiel

| aText |

aText := PasteFromClipboard()

Siehe auch:

ClearClipBoard()

CopyToClipBoard()


PlayWaveSound()

PlayWaveSound() – Abspielen einer Wave-Datei

Beschreibung

Mit dieser Funktion kann eine beliebige Wave-Datei abgespielt werden.

Hierbei ist zu beachten, dass das Abspielen nicht abgebrochen werden kann und der Programmfluss für die Spieldauer

der Wave-Datei unterbrochen wird.

Diese Funktion kann nur für Dateien mit der Endung ".wav" verwendet werden.

Existiert eine Datei nicht an dem angegebenen Ort, wird eine Exception ausgelöst.

Ist die angegebene Datei keine ".wav" so wird ebenfalls eine Exception ausgelöst.

Parameter

aFilePath:C

Vollständiger Pfad zur Datei

z.B. C:\Temp\Test.wav

Rückgabewert

Keiner

Beispiel

| cExistingPath, cNonExistingPath, cWrongFilePath |

cExistingPath    := 'C:\TEMP\TestSoundFile.wav',

cNonExistingPath := 'C:\TEMP\NotExisting.wav',

cWrongFilePath   := 'C:\TEMP\WrongFileFormat.txt',

// Abspielen einer existierenden Datei

// (Hierzu ggf. das Beispiel anpassen und auf eine existierenden Datei verweisen.)

startseq

   PlayWaveSound(cExistingPath),

onerror

   MessageDlg('Fehler beim abspielen der Datei' + crlf + GetErrorText()),

stopseq,

// Abspielen einer nicht existierenden Datei

startseq

   PlayWaveSound(cNonExistingPath),

onerror

   // Gibt eine Fehlermeldung und muss daher behandelt werden

   MessageDlg('Fehler beim Abspielen der Datei' + crlf + GetErrorText()),

stopseq,

// Abspielen einer Datei mit dem Falschen Datei-Format

// (Hierzu z. B. versuchen eine Textdatei (*.txt) abzuspielen)

startseq

   PlayWaveSound(cWrongFilePath),

onerror

   // Gibt eine Fehlermeldung und muss daher behandelt werden

   MessageDlg('Fehler beim Abspielen der Datei' + crlf + GetErrorText()),

stopseq,


ProgArea()

ProgArea() – CB-Umgebung

Beschreibung

Die Funktion gibt die Umgebung zurück, in der der CodeBlock ausgeführt wird.

Parameter

oTable:O

Bezugstabelle; default = nil

Rückgabewert

Numerisch

0 - Undefined

1 - Auftragsbearbeitung

2 - Printmanager

3 - Statistik

Beispiel

ProgArea()

Kontakt zum Support | www.dontenwill.de


RGB()

RGB() – Farbwert

Beschreibung

Die Funktion gibt den numerischen Farbwert, der sich aus den Grundfarben (Rot, Grün, Blau) ermittelt, zurück, und kann anschließend z.B. einer Hintergrundfarbe für ein Feld zugewiesen werden.

Parameter

aRedValue:N | Farbanteil Rot
aGreenValue:N | Farbanteil Blau
aBlueValue:N | Farbanteil Grün

Rückgabewert

Numerisch - Farbe

Beispiel

RGB(170, 170, 255)   // Ergebnis: 16755370 (entspricht einem Blauton)


SelectEmailDest()

SelectEmailDest() – EMail-Kopf

Beschreibung

Die Funktion öffnet ein Fenster zur Auswahl der Empfänger. Dort werden alle verfügbaren Email Adressen der eingegebenen KdNrBesuNr und aller User angezeigt. Die gültigen Email Adressen können einfach per Klick hinzugefügt werden und Individualadressen können auch eingegeben werden. Nach Abschluß der Auswahl erzeugt die Funktion die entsprechende Zeichenkette des Emailempfängerkopfes für die zuvor getroffene Auswahl.

Parameter

KdNrBesuNr:C | Kunden- / Lieferantennummer oder sonstige Nummer im Format einer Dab065:KDNRBESUNR (8-St. Kdnr. + 1-St. Typ [1 = Kd., 2 = Lief., 3 = Vertr.])
Vorgabe:C | Vorgabe-Emailadresse(n) (";"-getrennt, jeweils "to:", "cc:" oder "bcc:" vorangestellt)

Rückgabewert

Alphanumerisch - EMail-Kopf

Beispiel

SelectEmailDest('10001', 'info@dontenwill.de')

Siehe auch:

SelectFaxDest()


SelectFaxDest()

SelectFaxDest() – Fax-Kopf

Beschreibung

Die Funktion öffnet ein Fenster zur Angabe von Empfängerdaten. Die Felder werden mit der eingegebenen KdNrBesuNr vorgefüllt. Die Daten können per Hand noch geändert werden. Nach Abschluss der Auswahl erzeugt die Funktion die entsprechende Zeichenkette des Faxempfängerkopfes für die zuvor getroffene Auswahl.

Parameter

KdNrBesuNr:C | Kunden- / Lieferantennummer oder sonstige Nummer
Vorgabe:C | Beliebige Fax-Nummer (dient als Vorgabe)

Rückgabewert

Alphanumerisch - Fax-Kopf

Beispiel

SelectFaxDest('10001',)

Siehe auch:

SelectEmailDest()


SetCursor()

SetCursor() – Cursor Form

Beschreibung

Die Funktion erlaubt die Änderung des Maus-Cursors und gibt gleichzeitig den Wert des alten Cursors zurück.

Parameter

aCursor:N

Numerischer Wert, der das Aussehen des Cursors bestimmt.

Mögliche Werte sind:

crDefault - normaler Cursor

crNone - kein Cursor

crArrow - Pfeil

crCross - Präzisionsauswahl

crIBeam - Textauswahl

crSizeNESW - Diagonale Größenänderung von Links-Unten nach Rechts-Oben

crSizeNS - Vertikale Größenänderung

crSizeNWSE - Diagonale Größenänderung von Rechts-Oben nach Links-Unten

crSizeWE - Horizontale Größenänderung

crUpArrow - Alternative Auswahl

crHourGlass - Sanduhr / Ausgelastet

crDrag - Verschiebenpfeil

crNoDrop - "Nicht Möglich" Pfeil

crHSplit - Horizontaler Aufteilenspfeil

crVSplit - Vertikaler Aufteilenpfeil

crMultiDrag - Mehrfach-Verschiebenpfeil

crSQLWait - SQL Sanduhr

crNo - Nicht verfügbar

crAppStart - Hintergrundaktivität

crHelp - Hilfeauswahl

crHandPoint - Hand / Verknüpfungsauswahl

crSizeAll - Verschieben

Rückgabewert

Numerisch - Wert des alten Cursors

Beispiel

SetCursor(crHourGlass)


SetLogLevel()

SetLogLevel() – Log-Level setzen

Beschreibung

Mit dieser Funktion kann das aktuell konfigurierte Log-Level geändert werden.

Parameter

nLogLevel:N

Log-Level siehe Funktion Log()

Rückgabewert

Numerisch - entsprechend des Log-Levels (siehe Log()), welches nun gesetzt ist.

Beispiel

if SetLogLevel(llINFO) = llINFO then

  Meld('Log-Level wurde auf INFO umgestellt.'),

endif,

Siehe auch:

Log()

GetLogLevel()


ShowDocument()

ShowDocument() – Anzeige eines Beleges

Beschreibung

Funktion zum modalen Anzeigen eines Beleges aus dem Archiv.

Parameter

aDocType:N

valD700_DocTypeANGE = 10 = Angebot

valD700_DocTypeAUFB = 20 = Auftragsbestätigung

valD700_DocTypePRRE = 30 = Proforma-Rechnung

valD700_DocTypeKOMM = 40 = Kommissionierschein

valD700_DocTypePACK = 50 = Packliste

valD700_DocTypeLIEF = 60 = Lieferschein

valD700_DocTypeVALI = 70 = Vorab-Lieferschein

valD700_DocTypeSALI = 80 = Sammel-Lieferschein

valD700_DocTypeVMLI = 90 = Vermiet-Lieferschein

valD700_DocTypeVMRU = 100 = Vermietungs-Rückgabeschein

valD700_DocTypeVSPA = 120 = Versandpapiere

valD700_DocTypeFRBR = 130 = Frachtbriefe

valD700_DocTypePAAK = 140 = Paketaufkleber

valD700_DocTypeVSAZ = 150 = Versandanzeige

valD700_DocTypeRECH = 160 = Rechnung

valD700_DocTypeTLRE = 170 = Teilrechnung

valD700_DocTypeABRE = 180 = Abschlags-Rechnung

valD700_DocTypeSARE = 190 = Sammel-Rechnung

valD700_DocTypeVMZW = 200 = Miet-Zwischenrechnung

valD700_DocTypeMAHN = 210 = Mahnung

valD700_DocTypeMARE = 211 = Mahnung auf Rechnungskopie

valD700_DocTypePRAN = 220 = Preisanfrage

valD700_DocTypeBEST = 230 = Bestellung

valD700_DocTypeABEI = 240 = Abruf-Einteilung

valD700_DocTypeBEMA = 250 = Bestell-Mahnung

valD700_DocTypeFEAU = 260 = Fertigungs-Auftrag

valD700_DocTypeSRFO = 400 = WE Formular

valD700_DocTypeSRET = 410 = WE Etikett

valD700_DocTypeQSFO = 420 = QS Formular

valD700_DocTypeKBET = 430 = Kommissionierbox-Etikett

valD700_DocTypeSRAR = 440 = Archivmuster-Etikett

valD700_DocTypeARET = 450 = Artikel-Etikett

valD700_DocTypePRPL = 460 = Produktions-Pickliste

valD700_DocTypeSHNO = 480 = Shippment Notes

valD700_DocTypeAEIS = 490 = Ausfuhrerklärung

valD700_DocTypeISIV = 500 = Intrastat-Versendung

valD700_DocTypeISIE = 510 = Intrastat-Einfuhr

valD700_DocTypeBVUS = 520 = Barverkauf Umsatzstatistik

valD700_DocTypeBVJS = 530 = Barverkauf Journal-Tages-summen

valD700_DocTypeBVBD = 540 = Barverkauf Belegdruck

valD700_DocTypeAUFS = 550 = Service-Auftragsbestätigung

valD700_DocTypeBSTO = 560 = Bestell-Storno

valD700_DocTypeMEFX = 570 = Memo-Fax

valD700_DocTypeMEML = 575 = Memo-Brief

valD700_DocTypeMEEM = 576 = Memo-EMail

valD700_DocTypeMEAM = 577 = Manuell archiviertes Memo

valD700_DocTypeEGRN = 580 = Eingangs-Rechnung

valD700_DocTypeEGLA = 585 = Eingangs-Lieferanten-AB

valD700_DocTypeEGLS = 590 = Eingangs-Lieferschein

valD700_DocTypeEGAU = 600 = Eingangs-Kundenauftrag

valD700_DocTypeEGAK = 610 = Eingangs-AKA-Quittung

aPersNo:N

Pers.Nr.

aDocList:C

Beleg-Nr[ <;> Pers-Nr.] [ <CRLF> Beleg-Nr[ <;> Pers-Nr.][ [ <CRLF> Belegnr. .. usw.] ] ]

aCaption:C

Bezeichnung des Beleges;

default = Leerstring

aIsRecNo:L

Record-Nr. anstatt Personalnummer verwenden um Beleg zu ermitteln;

default = false

aOpenEmpty:L

Viewer-Dialog auch anzeigen, wenn der Beleg nicht existert (sinnvoll bei Belegen, die durch Einscannen entstehen wie z.B. AKA-Quittung, Eingangslieferschein, Eingangsrechnung)

default = false

aActiveDoc:N

Laufende Nummer des Beleges, sofern mehrere Versionen existieren (wie z.B. bei Angeboten, Memo-E-Mails etc.).

default = 0

aModal:L

Soll das Fenster mit den Dokument als eine Tabkarte oder als Modal- Fenster angezeigt werden.
default = True

Rückgabewert

keiner

Beispiel

ShowDocument(20, 0, '100001', ' Beispiel')


ShowMessage()

ShowMessage() – Meldungsausgabe

Beschreibung

Die Funktion dient der Ausgabe eines Meldungstextes.

Hinweis: die Funktion ShowMessage wird ggf. über eine Message-Hook abgefangen (s. auch BeMsgObjHook).

Parameter

aMessage:C

Meldungtext

Rückgabewert

keiner

Beispiel

ShowMessage('Sie arbeiten mit Business Express.')

Siehe auch:

Meld()

AssignGlobalEvent()


ShowWordCommander2()

ShowWordCommander2() - WordCommander

Beschreibung
Die Funktion öffnet den WordCommander mit individuell befüllten Datensätzen. Wenn mehrere Gruppen (Datensätze als Array) übergeben werden, muss die Anzahl je Gruppe identisch sein.

Parameter

aTables:A

Gruppen inkl. Datensätze (Array of Datasets)

Rückgabewert

keiner

Beispiel

| aTables, aName, aVorname, aField |

// Erste Gruppe anlegen

aVorname := CreateObject('TMemCalcTable', 'Vorname'),

AddMemField(aVorname, 'Firstname', 'C', 10, 0),

// Gruppennamen definieren

aVorname.AliasName := 'Vorname',

aVorname.Active    := true,

// Wird kein DisplayLabel gesetzt, wird der Feldname verwendet!

aField              := DBField('Firstname', aVorname),

aField.DisplayLabel := 'Vorname',

DBAppend(aVorname),

aVorname:Firstname  := 'Dieter',

DBAppend(aVorname),

aVorname:Firstname  := 'Heinrich',

DBAppend(aVorname),

aVorname:Firstname  := 'Olav',

DBPost(aVorname),

// Zweite Gruppe anlegen

aName := CreateObject('TMemCalcTable', 'Name'),

AddMemField(aName, 'Lastname', 'C', 10, 0),

// Gruppennamen definieren

aName.AliasName := 'Name',

aName.Active    := true,

// Wird kein DisplayLabel gesetzt, wird der Feldname verwendet!

aField              := DBField('Lastname', aName),

aField.DisplayLabel := 'Nachname',

DBAppend(aName),

aName:Lastname := 'Pumps',

DBAppend(aName),

aName:Lastname := 'Diener',

DBAppend(aName),

aName:Lastname := 'Schmitt',

DBPost(aName),

// Reihenfolge der Gruppen

aTables := {aVorname, aName},

ShowWordCommander2(aTables)


SoundEx()

SoundEx() – SoundEx-Code

Beschreibung

Die Funktion dient dem Erzeugen von deutschem Soundex-Code. (Soundex ist ein phonetischer Algorithmus zur Indizierung von Wörtern und Phrasen nach ihrem Klang. Gleichklingende Wörter sollen dabei zu einer identischen Zeichenfolge kodiert werden.)

Parameter

cText:C | Text
nMaxLen:N | Maximal Länge; default = 10

Rückgabewert

Alphanumerisch - SoundEx-Code

Beispiel

SoundEx('Dontenwill AG')   // Ergebnis: 'DMDML'

Siehe auch:

DamerauLevenshteinDistance()


StatusError()

StatusError() – Fehlermeldung ausgeben

Beschreibung

Die Funktion ermittelt ein Text-Element analog zu GetLangText(). Die Meldung wird als Fehlermeldungsfenster angezeigt.

Parameter

aError:U

Fehler-Text oder globale Text-ID

Rückgabewert

keiner

Beispiel

StatusError('Fehler beim Öffnen der Datei'),

StatusError(6),

Siehe auch:

GetLangText()

GetLangTextEx()


Swap()

Swap() – Variablen Austausch

Beschreibung

Die Funktion vertauscht die Werte zweier übergebenen Variablen.

Parameter

aVar1:R | referenzierte erste Variable
aVar2:R | referenzierte zweite Variable

Rückgabewert

keiner

Beispiel

| aChr, bChr |

aChr := 'ABCDE',

bChr := '1234',

Swap(aChr, bChr)   // Ergebnis: aChr = "1234", bChr = "ABCDE"


VB()

VB() – Masken Filter

Beschreibung

Die Funktion prüft, ob ein erster Wert zwischen den zwei folgenden Werten liegt. (Sie können z.B. mit diesen Prüfungen verhindern, dass bei von-bis Selektionen der zweite Parameter kleiner ist als der erste Parameter).

Die Funktion hat eine ähnliche Bedeutung wie VBFILT(), kann aber nur in dialogorientierten Masken verwendet werden (z.B. in Variantenfenstern oder bei der Definition von Aufbereitungsparametern im Statistikmodul).

Parameter

uValue:U | Abzufragende Variable
uMinValue:U | Untergrenze
uMaxValue:U | Obergrenze

Rückgabewert

Logisch / Boolean - Wert zwischen Min. und Max.

Beispiel

| nA, nB, nC |

nA := 10,

nB := 1,

nC := 100,

VB(nA, nB, nC)   // Ergebnis: .T.

Siehe auch:

VBFilt()


VBFilt()

VBFilt() – VB Filter

Beschreibung

Die Funktion prüft, ob ein erster Wert zwischen den zwei folgenden Werten liegt.

Parameter

uValue:U | Variable 1 – Abzufragende Variable
uMinValue:U | Variable 2 – Untergrenze
uMaxValue:U | Variable 3 – Obergrenze

Rückgabewert

Logisch / Boolean - Wert zwischen Min. und Max.

Beispiel

| aDatum |

aDatum := Date() + 1,

VBFilt(aDatum, Date(), EoQ(Date()))   // Ergebnis: .T.

Siehe auch:

VB()


WinUserName()

WinUserName() – Windowsbenutzername

Beschreibung

Die Funktion liefert den Namen des aktuellen Windowsbenutzeraccounts.

Parameter

keine Parameter erwartet

Rückgabewert

Alphanumerisch - Windowsbenutzeraccount

Beispiel

WinUserName()   // Ergebnis: z.B. 'Administrator'


XPicture()

XPicture() – Eingabemaske mit Nachkommstellen

Beschreibung

Die Funktion erzeugt eine numerische Eingabemaske, wobei alle Nachkommastellen und die erste Vorkommastelle Pflichteingaben sind.

Parameter

nLen:N | Länge der Zeichenkette
nDec:N | Anzahl der Nachkommastellen; default: 2

Rückgabewert

Alphanumerisch - numerische Eingabemaske

Beispiel

XPicture(10, 3)   // Ergebnis: '#####9.999'


Array-Funktionen

Siehe auch:

AAdd()

ADelete()

AFill()

AInsert()

ALen()

ArrToStr()

Dim()

ReDim()

StrToArr()


AAdd()

AAdd() – Element zu Array hinzufügen

Beschreibung

Die Funktion fügt ein Element am Ende des Arrays hinzu und übergibt ihm einen Wert.

Parameter

aArray:R | Referenziertes Array, in dem ein Element hinzugefügt werden soll
aValue:U | Wert, den das Element erhalten soll; default = null()

Rückgabewert

Numerisch - neue Länge des Arrays

Beispiel

| aArr |

aArr := {0, 1, 2, 3, 4},

AAdd(aArr, 17)             // Ergebnis: '6'

Siehe auch:

ADelete()

AFill()

AInsert()

ArrToStr()

Dim()

ReDim()

StrToArr()


ADelete()

ADelete() – Element aus Array löschen

Beschreibung

Die Funktion löscht ein Element aus einem Array.

Parameter

aArray:R | Referenziertes Array, in dem ein Element gelöscht werden soll
aIndex:N | Index des Array-Elements

Rückgabewert

keiner

Beispiel

| aArr |

aArr := {0, 1, 2, 3, 4},

ADelete(aArr, 5),

WriteLn(aArr)              // Ergebnis: '{0; 1; 2; 3}'

Siehe auch:

AAdd()

AFill()

AInsert()

ArrToStr()

Dim()

ReDim()

StrToArr()


AFill()

AFill() – Array mit Werten füllen

Beschreibung

Die Funktion füllt ein Array mit einem Wert.

Parameter

aArray:R | Referenziertes, zu füllendes Array
aValue:U | Wert

Rückgabewert

keiner

Beispiel

| aArr |

aArr := Dim(2),

AFill(aArr, 'Test'),

WriteLn(ArrToStr(aArr))   // Ergebnis: '{"Test","Test"}'

Siehe auch:

AAdd()

ADelete()

AInsert()

ALen()

ArrToStr()

Dim()

ReDim()

StrToArr()


AInsert()

AInsert() – Element in Array einfügen

Beschreibung

Die Funktion fügt ein Element im Array ein und übergibt ihm optional einen Wert.

Parameter

aArray:R | Referenziertes Array, in dem ein Element eingefügt werden soll
aIndex:N | Index des einzufügenden Elements
aValue:U | Wert, den das Element erhalten soll; default = null()

Rückgabewert

keiner

Beispiel

| aArr |

aArr := Dim(3),

AFill(aArr, 'A'),

AInsert(aArr, 2, 'B'),

ArrToStr(aArr)           // Ergebnis: {"A","B","A","A"}

Siehe auch:

AAdd()

ADelete()

AFill()

ALen()

ArrToStr()

Dim()

ReDim()


ALen()

ALen() – Anzahl der Array Elemente

Beschreibung

Die Funktion liefert die Anzahl der Arrayelemente zurück.

Parameter

aArray:A

Array

Rückgabewert

Numerisch

Beispiel

| aArray |

aArray := Dim(39),

ALen(aArray)         // Ergebnis: '39'


ArrToStr()

ArrToStr() – Array in String umwandeln

Beschreibung

Die Funktion gibt ein Array als kompletten String zurück, das Array selbst bleibt dabei unverändert.

Parameter

aArray:A

Umzuwandelndes Array

Rückgabewert

Alphanumerisch - Array als String

Beispiel

| aArr, a, b |

a    := 'Text 1',

b    := 'Text 2',

aArr := {a, b},

ArrToStr(aArr)    // Ergebnis: {“Text 1“,“Text 2“}

Siehe auch:

AAdd()

ADelete()

AFill()

AInsert()

ALen()

Dim()

ReDim()

StrToArr()


Dim()

Dim() – Array erzeugen

Beschreibung

Die Funktion erzeugt ein leeres Array mit der angegebenen Anzahl von Elementen.

Parameter

aElementCount:N

Numerischer Wert für die Größe des Arrays

Rückgabewert

Array - Neues Array

Beispiel

| aArr |

aArr := Dim(2)   // Ergebnis: '<Array> = [<Null>, <Null>]'

Siehe auch:

AAdd()

ADelete()

AFill()

AInsert()

ALen()

ArrToStr()

ReDim()

StrToArr()


ReDim()

ReDim() – Länge eines Arrays ändern

Beschreibung

Die Funktion ändert die Anzahl der Elemente eines bestehenden Arrays. Dabei werden bei einer Vergrößerung neue Elemente leer erzeugt und bei einer Verkleinerung bestehende Elemente ohne Berücksichtigung des Inhalts gelöscht.

Parameter

aArray:R | Refenziertes Array, das geändert werden soll
aNewCount:N | Neue Anzahl der Elemente

Rückgabewert

Array - neu strukturiertes Array

Beispiel

| aArr |

aArr := Dim(2),

ReDim(aArr, 4),    // aArr wird um zwei leere Elemente vergrößert

WriteLn(aArr),     // Ergebnis: '{<NIL>; <NIL>; <NIL>; <NIL>}'

ReDim(aArr, 3),    // aArr wird auf 3 Elemente verkleinert, alte Inhalte gehen verloren

WriteLn(aArr)      // Ergebnis: '{<NIL>; <NIL>; <NIL>}'

Siehe auch:

AAdd()

ADelete()

AFill()

AInsert()

ALen()

ArrToStr()

Dim()

StrToArr()


StrToArr()

StrToArr() – String in Array umwandeln

Beschreibung

Die Funktion erzeugt ein Array aus einem String.

Parameter

aText:C

Umzuwandelnder String

Rückgabewert

Array

Beispiel

| aArr, cString |

cString := '{0, 1, 2, 3, 4}',

aArr    := StrToArr(cString),

WriteLn(aArr[3])

// Ergebnis: '2'

Siehe auch:

AAdd()

ADelete()

AFill()

AInsert()

ALen()

ArrToStr()

Dim()

ReDim()


AfAAbgang()

AfAAbgang() – Summe der Wertminderungen (FiBu)

Beschreibung

Funktion summiert alle Buchungen, die die AH-Kosten eines Anlagegutes vermindern

Hinweis

Funktion ist nur im Rahmen der FiBu einsetzbar.

Parameter

oDfInv:O | Tabellenobjekt Inventarverwaltung (DFINV)
nVorJahr:N | 0 = aktuelles Geschäftsjahr (default); 1..n = Vorjahr 1 bis n
nVonPer:N | Periode des GJ, ab der die Summe gebildet werden soll (default 1)
nBisPer:N | Periode des GJ, bis zu der die Summe gebildet werden soll (default fbMaxPer)
oDfAfA:O | Tabellenobjekt Abschreibungen (DFAFA)

Rückgabewert

Numerisch

Beispiel

| oDfInv, cInvNr, nAbgang |

cInvNr:= '0000480-00012',

oDfInv:= BeOpen(waDAB075, 'ID'),

If !Empty(oDfInv) then

   StartSeq

      If DbSeek(cInvNr, oDfInv) then

         nAbgang:= AfAAbgang(oDfInv),

         WriteLn('Teilabgang von ' + cInvNr + ' ist ' +

                  FormatFloat('#,##0.00', nAbgang)),

      EndIf

   Always

     BeClose(oDfInv)

   StopSeq

EndIf

Siehe auch:

AfAGJahrTab()

AfAPlan()

AfAEroeffBil()

AfAZugang()

AfABuchWert()

AfAAHKosten()

AfAInGJGebucht()

AfABewegTab()


AfAAHKosten()

AfAAHKosten() – Anschaffungs- und Herstellungskosten (FiBu)

Beschreibung

Funktion berechnet die Anschaffungs- und Herstellungskosten eines Anlagegutes.

Zuschreibungen und Wertminderungen werden berücksichtigt.

Hinweis

Funktion ist nur im Rahmen der FiBu einsetzbar.

Parameter

oDfInv:O | Tabellenobjekt Inventarverwaltung (DFINV)
dBisDat:D | Datum, bis zu dem die Buchungen berücksichtigt werden sollen (default: alle Buchungen)

Rückgabewert

Numerisch

Beispiel

| oDfInv, cInvNr, nAHKosten |

cInvNr:= '0000480-00012',

oDfInv:= BeOpen(waDAB075, 'ID'),

If !Empty(oDfInv) then

   StartSeq

      If DbSeek(cInvNr, oDfInv) then

         nAHKosten:= AfAAHKosten(oDfInv),

         WriteLn('Anschaffungs- / Herstellungs-Kosten von ' + cInvNr + ': ' +

                  FormatFloat('#,##0.00', nAHKosten)),

      EndIf

   Always

     BeClose(oDfInv)

   StopSeq

EndIf

Siehe auch:

AfAGJahrTab()

AfAPlan()

AfAEroeffBil()

AfAZugang()

AfAAbgang()

AfABuchWert()

AfAInGJGebucht()

AfABewegTab()


AfABewegTab()

AfABewegTab() – Array mit Anlagebewegungen (FiBu)

Beschreibung

Funktion liefert für ein Anlagegut ein Array mit allen Buchungen aus der Tabelle DF110

Hinweis

Funktion ist nur im Rahmen der FiBu einsetzbar.

Buchungsarten im Arrayelement 4 sind:

N Neuzugang

Z Ergänzung / Wertzugang

V Vollabgang

T Teilabgang

A Normal-AfA

P außerplanmässige AfA

S sonstige Afa

Parameter

oDfInv:O | Tabellenobjekt Inventarverwaltung (DFINV)
oDf110:O | Tabellenobjekt Sachkonten-Buchungen (DF110)

Rückgabewert

Array (Aufbau s. Beispiel)

Beispiel

| oDfInv, cInvNr, aBewegTab, i |

cInvNr:= '0000480-00012',

oDfInv:= BeOpen(waDAB075, 'ID'),

If !Empty(oDfInv) then

   StartSeq

      If DbSeek(cInvNr, oDfInv) then

         aBewegTab:= AfABewegTab(oDfInv),

         For i:= 1 to ALen(aBewegTab) do

             WriteLn(Str(i, 2) + ' Buchungsdatum: '     + DateTimeToStr(aBewegTab[i, 1])           + CrLf +

                               '   Vorjahr: '           + Str(aBewegTab[i, 2])                     + CrLf +

                               '   Periode: '           + Str(aBewegTab[i, 3])                     + CrLf +

                               '   Buchungsart: '       + aBewegTab[i, 4]                          + CrLf +

                               '   Soll: '              + FormatFloat('#,##0.00', aBewegTab[i, 5]) + CrLf +

                               '   Haben: '             + FormatFloat('#,##0.00', aBewegTab[i, 6]) + CrLf +

                               '   Buchungstext: '      + aBewegTab[i, 7]                          + CrLf +

                               '   Kostenstelle: '      + Str(aBewegTab[i, 8])                     + CrLf +

                               '   Gegenkonto: '        + Str(aBewegTab[i, 9])                     + CrLf +

                               '   Gegenkostenstelle: ' + Str(aBewegTab[i, 10])),

         Next

      EndIf

   Always

     BeClose(oDfInv)

   StopSeq

EndIf

Siehe auch:

AfAGJahrTab()

AfAPlan()

AfAEroeffBil()

AfAZugang()

AfAAbgang()

AfABuchWert()

AfAAHKosten()

AfAInGJGebucht()


AfABuchWert()

AfABuchWert() – Aktueller Buchwert (FiBu)

Beschreibung

Funktion berechnet den aktuellen Buchwert eines Anlagegutes

Hinweis

Sollte der Abschreibungsbeginn im nächsten Geschäftsjahr liegen, liefert die Funktion Null zurück. Desweiteren gibt die Funktion Null zurück, wenn ein Abgang (unabhängig von der Periode) stattgefunden hat.

Funktion ist nur im Rahmen der FiBu einsetzbar.

Parameter

oDfInv:O | Tabellenobjekt Inventarverwaltung (DFINV)
lBisMaxPer:L | True = Buchungen in Überhangperioden werden berücksichtigt; False = nur Buchungen bis zur maximalen Anzahl der Perioden im GJ werden berücksichtigt (default)
oDfAfA:O | Tabellenobjekt Abschreibungen (DFAFA)
lIgnoreAbgang:L | True = Das Abgangs-Datum des Inventars wird nicht berücksichtigt; False = Das Abgangs-Datum des Inventars wird berücksichtigt (default); Dieser Parameter ist unabhängig vom Parameter lBisMaxPer:L

Rückgabewert

Numerisch

Beispiel

| oDfInv, cInvNr, nBuchwert |

cInvNr:= '0000480-00012',

oDfInv:= BeOpen(waDAB075, 'ID'),

If !Empty(oDfInv) then

   StartSeq

      If DbSeek(cInvNr, oDfInv) then

         nBuchwert:= AfABuchwert(oDfInv),

         WriteLn('Buchwert von ' + cInvNr + ' ist ' +

                  FormatFloat('#,##0.00', nBuchwert)),

      EndIf

   Always

     BeClose(oDfInv)

   StopSeq

EndIf

Siehe auch:

AfAGJahrTab()

AfAPlan()

AfAEroeffBil()

AfAZugang()

AfAAbgang()

AfAAHKosten()

AfAInGJGebucht()

AfABewegTab()


AfAEroeffBil()

AfAEroeffBil() – Eröffnungsbilanzwert (FiBu)

Beschreibung

Funktion berechnet den Eröffnungsbilanzwert eines Anlagegutes

Hinweis

Funktion ist nur im Rahmen der FiBu einsetzbar.

Parameter

oDfInv:O | Tabellenobjekt Inventarverwaltung (DFINV)
nVorJahr:N | 0 = aktuelles Geschäftsjahr (default); 1..n = Vorjahr 1 bis n
oDfAfA:O | Tabellenobjekt Abschreibungen (DFAFA)

Rückgabewert

Numerisch

Beispiel

| oDfInv, cInvNr, nEBWert |

cInvNr:= '0000480-00012',

oDfInv:= BeOpen(waDAB075, 'ID'),

If !Empty(oDfInv) then

   StartSeq

      If DbSeek(cInvNr, oDfInv) then

         nEBWert:= AfAEroeffBil(oDfInv),

         WriteLn('Eröffnungsbilanzwert von ' + cInvNr + ' ist ' +

                  FormatFloat('#,##0.00', nEBWert)),

      EndIf

   Always

     BeClose(oDfInv)

   StopSeq

EndIf

Siehe auch:

AfAGJahrTab()

AfAPlan()

AfAZugang()

AfAAbgang()

AfABuchWert()

AfAAHKosten()

AfAInGJGebucht()

AfABewegTab()


AfAGJahrTab()

AfAGJahrTab() – Tabelle der Geschäftsjahre (FiBu)

Beschreibung

Die Funktion liefert eine Tabelle der Geschäftsjahre ab einem angegebenen Datum (dAfADatum).

Die Länge der Tabelle wird durch den 2. Parameter (nAfAJahre) bestimmt, wobei es sich bei diesem

Parameter um Kalenderjahre handelt. Die resultierende Tabelle berücksichtigt Rumpfgeschäftsjahre,

d.h. sie kann ggf. auch länger sein, als die durch den 2. Parameter vorgegebene Anzahl von Jahren.

Hinweis

Funktion ist nur im Rahmen der FiBu einsetzbar.

Parameter

aAfADatum:D | Startdatum
nAfAJahre:N | Anzahl der Kalenderjahre

Rückgabewert

Array (Aufbau s. Beispiel)

Beispiel

| aGJTab, nJahre, i |

nJahre:= 5,

aGJTab:= AfAGJahrTab(CtoD('10.10.02'), nJahre),

For i:= 1 to ALen(aGJTab) do

    WriteLn(Str(i) + ' Anfang GJ: '  + DateTimeToStr(aGJTab[i, 1]) +

                     ' Ende GJ: '    + DateTimeToStr(aGJTab[i, 2]) +

                     ' Perioden: '   + Str(aGJTab[i, 3])           +

                     ' GJ-Text: '    + aGJTab[i, 4])

Next

Siehe auch:

AfAPlan()

AfAEroeffBil()

AfAZugang()

AfAAbgang()

AfABuchWert()

AfAAHKosten()

AfAInGJGebucht()

AfABewegTab()


AfAInGJGebucht()

AfAInGJGebucht() – Summe der AfA-Buchungen (FiBu)

Beschreibung

Funktion berechnet die Summe der tatsächlich gebuchten AfA im Geschäftsjahr.

Hinweis

Summiert werden die Datenfelder NAFA_SUM, AAFA_SUM und SAFA_SUM aus DfAfA.

Funktion ist nur im Rahmen der FiBu einsetzbar.

Parameter

oDfInv:O | Tabellenobjekt Inventarverwaltung (DFINV)
nVorJahr:N | 0 = aktuelles Geschäftsjahr (default); 1..n = Vorjahr 1 bis n
nVonPer:N | Periode des GJ, ab der die Summe gebildet werden soll (default 1)
nBisPer:N | Periode des GJ, bis zu der die Summe gebildet werden soll (default fbMaxPer)
oDfAfA:O | Tabellenobjekt Abschreibungen (DFAFA)

Rückgabewert

Numerisch

Beispiel

| oDfInv, cInvNr, nAfAGebucht |

cInvNr:= '0000480-00012',

oDfInv:= BeOpen(waDAB075, 'ID'),

If !Empty(oDfInv) then

   StartSeq

      If DbSeek(cInvNr, oDfInv) then

         nAfAGebucht:= AfAInGJGebucht(oDfInv),

         WriteLn('AfA gebucht (' + cInvNr + '): ' +

                  FormatFloat('#,##0.00', nAfAGebucht)),

      EndIf

   Always

     BeClose(oDfInv)

   StopSeq

EndIf

Siehe auch:

AfAGJahrTab()

AfAPlan()

AfAEroeffBil()

AfAZugang()

AfAAbgang()

AfABuchWert()

AfAAHKosten()

AfABewegTab()


AfAPlan()

AfAPlan() – Abschreibungsplan eines Anlagegutes (FiBu)

Beschreibung

Die Funktion liefert den Abschreibungsplan eines Anlagegutes in Form eines Arrays. Das Array beinhaltet die

AfA-Werte für die einzelnen Geschäftsjahre während des Abschreibungszeitraumes.

Hinweis

Funktion ist nur im Rahmen der FiBu einsetzbar.

Der Aufruf dieser Funktion kann auch mit einem Inventar-Datensatz als erstem Parameter erfolgen (s. unten Variante 2).

In diesem Fall werden alle Parameter dem Datensatz entnommen.

Bei Verwendung von Aufruf-Variante 1 müssen die Parameter entsprechend der AfA-Art gefüllt werden (s. Parameterliste).

Mehrere Parameter übergeben Werte als Arrays, wobei ein Element des Arrays meist einem Geschäfsjahr entspricht.

Die Anzahl der Array-Elemente ergibt sich nicht zwangsläufig aus dem Parameter nAfAJahre, denn Geschäfsjahre können auch

Rumpfgeschäftsjahre sein (verkürztes GJ) . Weiterhin muss berücksichtigt werden, dass bedingt durch den Parameter dAfADat

im ersten und letzten Jahr der AfA evtl. nur anteilig abgeschrieben werden kann, wodurch das Array um ein weiteres Element

vergrößert werden muss. Zur Berechnung der Array-Länge siehe auch Funktion AfAGJahrTab().

Parameter

uAfAArt:U

Variante 1: Abschreibungsart

- afa_Linear

- afa_Degressiv

- afa_Leistung

- afa_GWG

- afa_Gebaeude

Variante 2: Inventar-Datensatz

- DFINV-Objekt

Hinweis: Variante 2 hat max. zwei Parameter

nAHKosten:N

Anschaffungs- / Herstellungs-Kosten

Hinweis: bei Verwendung von Aufrufvariante 2 kann an dieser Stelle der Parameter nSonderPlan (s. unten) stehen

dAfADat:D

Anfangsdatum des Abschreibungszeitraumes

nAfAJahre:N

Dauer der Abschreibung in Kalenderjahren

nRestWert:N

Restwert des Anlagegutes zum Ende des Abschreibungszeitraumes

nDegProz:N

Prozentsatz der degressiven Abschreibung

lDegLin:L

automatischer Wechsel von degressiver zu linearer AfA

dUebDat:D

Datum der Übernahme des Anlagegutes

nUebWert:N

Buchwert des Anlagegutes zum Zeitpunkt der Übernahme

nLeistGes:N

Gesamtleistung bei leistungsbezogener AfA

aLeistTab:A

Array mit Angaben zur Leistung je Geschäftsjahr; es wird nur die anteilige Leistung an nLeistGes je GJ übergeben

Beispiel: {{5000},{4000},{500},{500}}

aManuTab:A

Array mit Angaben zur manuellen AfA je Geschäftsjahr; eine Element besteht aus AfA-Betrag und Anmerkung; ein AfA-Betrag von Null bewirkt, dass in diesem GJ mit Normal-AfA gerechnet wird

Beispiel: {{1000,"Anmerkung"},{0,""},{0,""},{0,""},{0,""},{0,""}}

nSoAJahre:N

Sonder-AfA; Anzahl der Jahre; muss der Anzahl der Elemente in aSoATab entsprechen

aSoATab:A

Array mit Angaben zur Sonder-AfA je Geschäftsjahr; eine Element besteht aus Prozentsatz und AfA-Betrag

Beispiel: {{10,100},{5,50},{2,20},{2,20},{1,10}}

nGAbProz:N

Prozentsatz Gebäude-AfA bei linearer Abschreibung

aGAbTab:A

Array mit Angaben zur degressiven Gebäude-AfA; ein Element enthält Anzahl der Geschäftsjahre und den Prozentsatz der AfA

Beispiel: {{8,5},{6,2.5},{36,1.25}}

aBewegTab:A

Array mit Angaben zu Anlagenbewegungen

Beispiel: s. Funktion AfABewegTab()

aEBTab:A

Array mit Angaben zur Eröffnungsbilanz

Beispiel: s. Funktion AfAEroeffBil()

lRedBem:L

Restwert reduziert Bemessungsgrundlage

nGAbRProz:N

Prozentsatz der AfA nach Ablauf der regulären degressiven Gebäude-AfA (s. aGAbTab)

dAbgDat:D

Datum des Vollabgangs

nSonderPlan:N

Erstellt für die AfA-Art 'Leistung' im Modus safaLeistOhneLin einen AfA-Plan ohne Berücksichtigung des automatischen Übergangs von Leistungs-AfA zur linearen AfA bei Unterschreitung des linearen Wertes.

- safaOhne (default)

- safaLeistOhneLin

Hinweis: in Aufrufvariante 2 steht dieser Parameter auf der Position von nAHKosten

dGJBeginn:D

Beginn des aktuellen Geschäftsjahres; falls angegeben, wird der AfA-Plan unter Berücksichtigung dieses Datums erstellt, sonst mit dem aktuellen GJ aus den FiBu-Parametern

Rückgabewert

Array mit AfA-Werten je Geschäftsjahr

Ein Array-Element besteht aus:

01. lfd. Nr. des Jahres

02. Text zum GJ

03. Buchwert zu Beginn des GJ

04. Zugang und Abgang saldiert

05. AfA-Summe im GJ

06. kumulierte AfA bis GJ

07. Buchwert am Ende des GJ

08. Art der Berechnung

09. Zusatzinfos

10. vor Übernahme (Kennzeichen, dass hier keine Berechnung stattfand)

11. Soll-AfA im GJ

12. Summe der periodisch gebuchten AfA im GJ (tatsächliche Buchungen)

13. Summe außerplanmässigen AfA im GJ

14. Summe sonst. AfA im GJ

15. Anzahl der buchbaren Perioden im GJ

16. Anteil der Sonder-AfA

Beispiel

// Berechung des AfA-Plans eines Wirtschaftgutes mit Anschaffungskosten von € 5000,--

// bei einer AfA-Laufzeit von 8 Jahren und einem Restwert von € 1,-- ab dem aktuellen

// Datum

| aPlan, nAHKosten, nJahre, nRestWert, i |

nAHKosten := 5000,

nJahre    := 8,

nRestWert := 1,

aPlan := AfAPlan(afa_Linear, nAHKosten, Date(), nJahre, nRestWert),

For i := 1 to ALen(aPlan) do

    WriteLn(aPlan[i])

Next

Siehe auch:

AfAGJahrTab()

AfAEroeffBil()

AfAZugang()

AfAAbgang()

AfABuchWert()

AfAAHKosten()

AfAInGJGebucht()

AfABewegTab()


AfAZugang()

AfAZugang() – Summe des Wertzugangs (FiBu)

Beschreibung

Funktion summiert alle Buchungen, die die AH-Kosten eines Anlagegutes erhöhen

Hinweis

Funktion ist nur im Rahmen der FiBu einsetzbar.

Parameter

oDfInv:O | Tabellenobjekt Inventarverwaltung (DFINV)
nVorJahr:N | 0 = aktuelles Geschäftsjahr (default); 1..n = Vorjahr 1 bis n
nVonPer:N | Periode des GJ, ab der die Summe gebildet werden soll (default 1)
nBisPer:N | Periode des GJ, bis zu der die Summe gebildet werden soll (default fbMaxPer)
oDfAfA:O | Tabellenobjekt Abschreibungen (DFAFA)

Rückgabewert

Numerisch

Beispiel

| oDfInv, cInvNr, nZugang |

cInvNr:= '0000480-00012',

oDfInv:= BeOpen(waDAB075, 'ID'),

If !Empty(oDfInv) then

   StartSeq

      If DbSeek(cInvNr, oDfInv) then

         nZugang:= AfAZugang(oDfInv),

         WriteLn('Zugang von ' + cInvNr + ' ist ' +

                  FormatFloat('#,##0.00', nZugang)),

      EndIf

   Always

     BeClose(oDfInv)

   StopSeq

EndIf

Siehe auch:

AfAGJahrTab()

AfAPlan()

AfAEroeffBil()

AfAAbgang()

AfABuchWert()

AfAAHKosten()

AfAInGJGebucht()

AfABewegTab()


ArtLoesch()

ArtLoesch() – Artikel löschen

Beschreibung

Die Funktion dient dem Löschen eines Artikels inkl. vorheriger Löschprüfung.

Parameter

cArtNr:C | Artikelnummer
lShowMsg:L | Meldungen/Fragen anzeigen; default = true
lBewLoe:L | Bewegungen (Einzel-Umsätze) löschen; default = false; Achtung: True ist nicht mehr zulässig
lNurCheck:L | Nur prüfen, ob Löschung erlaubt, kein echter Löschvorgang; default = false
oDab010:O | Dab010 Tabelle (Artikelstamm)

Rückgabewert

Logisch / Boolean -

true - Löschvorgang war erfolgreich (lNurCheck = false)

Löschen wäre möglich (lNurCheck = true)

false - Löschvorgang fehlgeschlagen (lNurCheck = false)

Löschen nicht möglich (lNurCheck = true)

Beispiel

| oDab010:DB := 'waDAB010', nAnz:N, nGesAnz:N |

DBFilter("SubStr(ARTNR, 4) = '0053'", oDab010),

DBGoTop(oDab010),

while !EoF(oDab010) do

   if ArtLoesch(oDab010:ARTNR, false, false, false, oDab010) then

      nAnz++

   endif,

   nGesAnz++,

   DBSkip(1, oDab010),

end,

WriteLn('Es konnte(n) ' + Str(nAnz) + ' von ' + Str(nGesAnz) +

        ' Artikel(n) gelöscht werden!')

// Ergebnis: Es wird versucht, alle Artikel zu löschen, deren Artikelnummer

// mit '0053' beginnt. Am Ende wird ausgegeben, wie viele Artikel gelöscht

// werden konnten.

Siehe auch:

KundLoesch()


AttribColor()

AttribColor() – Farbwert eines Merkmals

Beschreibung

Diese Funktion liefert den Farbwert eines Merkmals.

Hinweis

Dynamische Merkmalstabellen besitzen keine Farbinformationen.

Parameter

nTabID:N | ID der Merkmalstabelle
cValue:C | Wert des Merkmals

Rückgabewert

Numerisch

Beispiel

AttribColor(TAB_ID, WERT) // z.B. als Colorblock einer Browser-Spalte

Siehe auch:

AttribIDArray()

AttribIDFor()

AttribTabID()

AttribDispVal()

AttribImageInfo()


AttribDispMultiVal

AttribDispMultiVal() – Anzeigewerte von Merkmalen

Beschreibung

Mit dieser Funktion können für Merkmalstabellen die Anzeigewerte von mehreren getrennten Werten ermittelt werden.

Parameter

nTabID:N | ID der Merkmalstabelle
cValues:C | Werte der Merkmale mit cValueSeparator getrennt
cValueSeparator:C | Trennzeichen für die Werte der Markmale; Default = Trennzeichen der Merkmalstabelle meist '/'
cResultSeparator:C | Trennzeichen für die Rückgabe der Anzeigewerte; Default = ', '

Rückgabewert

String

Beispiel

AttribDispMultiVal(101002, '0/1/2', , CRLF)

// Ergebnis:

// Betr.Sek.

// Betr.Min.

// Betr.Std.

Siehe auch:

AttribIDArray()

AttribIDFor()

AttribTabID()

AttribValues()

AttribDispVal()


AttribDispVal()

AttribDispVal() – Anzeigewert eines Merkmals

Beschreibung

Die Funktion gibt den Anzeigewert eines Merkmals unter Berücksichtigung der Anzeigewert-Funktion zurück.
Falls keine Anzeigewert-Funktion hinterlegt ist wird "WERT - BEZ1 BEZ2 BEZ3" zurückgegeben.

Hinweis - bei der Verwendung in Spalten von Browsern:

Der Spalte muss ein Feld zugewiesen sein, damit Self.BeAttr.AttribID die richtige MM-Tabelle zurück liefern kann.

Der Wert muss mit AllTrim() an die Funktion übergeben werden, wenn es sich um ein Character-Wert handelt.

z.B. AttribDispVal(Self.BeAttr.AttribID, AllTrim(X_CHAR_FELD))

Parameter

nTabID:N | ID der Merkmalstabelle
cValue:C | Wert des Merkmals

Rückgabewert

String

Beispiel

AttribDispVal(-6,'2'),   // Ergebnis: Defekt

Siehe auch:

AttribIDArray()

AttribIDFor()

AttribTabID()

AttribValues()

AttribDispMultiVal


AttribIDArray()

AttribIDArray() – Array von Merkmal-IDs einer Merkmalstabelle

Beschreibung

Die Funktion gibt ein Array mit den Sortierungs-IDs einer Merkmalstabelle zurück.

Parameter

nTabID:N | ID der Merkmalstabelle
nSortID:N | Sortierungs-IDs
oDabMDT:O | Tabellenobjekt der DABMDT

Rückgabewert

Array - Array mit Sortierungs-IDs

Beispiel

AttribIDArray(2001)

Siehe auch:

AttribIDFor()

AttribTabID()

AttribValues()


AttribIDFor()

AttribIDFor() – Sortierungs-ID eines Merkmals

Beschreibung

Die Funktion gibt die Sortierungs-ID von einem bestimmten Wert einer Merkmalstabelle zurück.

Parameter

nTabID:N | ID der Merkmalstabelle
cValue | Wert des Merkmals
oDABMDT | Merkmalstabellenobjekt

Rückgabewert

Numerisch - Sortierungs-ID

Beispiel

AttribIDFor(2001, '20')

Siehe auch:

AttribIDArray()

AttribTabID()

AttribValues()


AttribImageInfo()

AttribImageInfo() – Image-Info eines Merkmals

Beschreibung

Diese Funktion liefert die Image-Informationen eines Merkmals.

Hinweis

Dynamische Merkmalstabellen besitzen keine Image-Informationen.

Parameter

nTabID:N | ID der Merkmalstabelle
cValue:C | Wert des Merkmals

Rückgabewert

Array mit Image-Liste (Objekt) und Image-Index

Beispiel

AttribImageInfo(TAB_ID, WERT) // z.B. als Rückgabe von 'Image-Index' einer Browserspalte

Siehe auch:

AttribIDArray()

AttribIDFor()

AttribTabID()

AttribDispVal()

AttribColor()


AttribTabID()

AttribTabID() – ID einer Merkmalstabelle

Beschreibung

Die Funktion ermittelt die TabellenID zu einem Feld einer bestimmten Workarea.

Parameter

nWorkarea:N | Workarea einer Tabelle
cFieldName:C | Feldname

Rückgabewert

Numerisch - Tabellen-ID

Beispiel

AttribTabID(708, 'TESTMDT')

Siehe auch:

AttribIDArray()

AttribIDFor()

AttribValues()


AttribTranslate()

AttribTranslate() – Merkmalsbezeichnung ausgeben

Beschreibung

Die Funktion liefert für eine Merkmalstabelle nAttribID und einen Wert cValue den zugehörigen Text in der Sprache nLangID. Wird kein Text in der gewünschten Sprache gefunden, wird der Text der Default-Sprache zurückgegeben.

Hinweis: Da die Funktion nicht sortierungsoptimiert arbeitet, kann der Abruf der entsprechenden Sprachinformation bei großen Merkmalstabellen gegebenfalls einige Zeit in Anspruch nehmen.

Parameter

nAttribID:N | ID der Merkmalstabelle
cValue:C | Merkmals-ID
nLangID:N | Sprach-ID (ISO-Ländertabelle); default = aktuelle BE-Sprache
nDescNo:N | Nummer der Bezeichnung in der MM-Tabelle; default = 1

Rückgabewert

Alphanumerisch - Merkmalsbezeichnung

Beispiel

| cMerkmal |

cMerkmal := AttribTranslate(2002, '10', 1, 2)


AttribValues()

AttribValues() – Werte eines Merkmals

Beschreibung

Die Funktion gibt die Werte eines Merkmals zurück.

Parameter

nTabID:N | ID der Merkmalstabelle
nSortID:N | Sortierungs-ID
oDABMDT:O | Merkmalstabellenobjekt
nAVType:N | Rückgabemodus (0=Array, 1=Feld mit Wert als Text, 2=Feld mit Wert als Numerisch)
cFieldName:C | Feldname

Rückgabewert

Je nach Modus: Array, String, Numerisch

Beispiel

AttribValues(2001, 100, , 0, 'BEZ1'),   // Ergebnis: <Array> = [[100, 0, 10]]

AttribValues(2001, 100, , 1, 'BEZ1'),   // Ergebnis: (BEZ1='10')

AttribValues(2001, 100, , 2, 'BEZ1'),   // Ergebnis: (BEZ1=10)

Siehe auch:

AttribIDArray()

AttribIDFor()

AttribTabID()


Auf_Sperr()

Auf_Sperr() – Auftragssperre

Beschreibung

Die Funktion dient der Abfrage des Sperrkennzeichens im Kundenstamm bezüglich einer Auftragssperre.

Parameter

nKdNr:N | Kundennr.; default = 0
oDab000:O | DAB0000 Kundenstamm; default = Standard-Dab000

Rückgabewert

Logisch / Boolean

Beispiel

| nKdNr, oDab000 |

Auf_Sperr(nKdNr, oDab000)

Siehe auch:

Lief_Sperr()


AufAutoLiefFrei()

AufAutoLiefFrei() – Automatische Lieferfreigabe

Beschreibung

Funktion zum dialogfreien Start der Automatischen Lieferfreigabe bzw. Lieferreservierung. "Freigabe / Lieferung" bzw. "Kunde" muss je nach Parameter als "Reservierung" bzw. "Lieferant" gelesen werden.

Parameter

nFreiReservModus:N | 0 = Freigabe, 1 = Reservierung
nKdLiefModus:N | 0 = Kundenaufträge, 1 = Lieferantenaufträge
lWennBest:L | Nur wenn Bestand; default = true
lTeilLief:L | Auftragsteillieferung erlaubt; default = true
lPosTeilLief:L | Positionsteillieferung erlaubt; default = false
lNurVollst:L | Nur Vollständige; default = true
nTerminTyp:N | 0 = Kopftermin, 1 = Positiostermin; default = 0
cVonTermin:C | Von Termin ab; default = Leerstring
cBisTermin:C | Bis Termin; default = KW des Buchungsdatums
nFreigModus:N | 0 = Freigabe je Auftrag, 1 = je Kunde / Lieferanschrift; default = 0
nMindWert:N | Mindestwert; default = 0
nMindProz:N | Mind. %-Satz der Auftragswerts; default = 0
nVonAufTyp:N | Von Auftragsart; default = 0
nBisAufTyp:N | Bis Auftragsart; default = Max.Auftr.Art
cKopfFilter:C | DAB050-Filter; default = Leerstring
cPosFilter:C | DAB055-Filter; default = Leerstring
lKredLimCheck:L | Kreditlimit prüfen; default = true falls der OP-Verwaltungs-Typ; 'E' = Extern; 'D' = Debitoren; 'C' = Kreditoren; 'G' = Gemeinsam; 'I' = ohne Fibu ist, sonst false
nMaxFreigWert:N | Max. Wert bis zum dem Aufträge freigegeben werden; default = 0
nVonKunde:N | Von Kunde ab; default = 1
nBisKunde:N | Bis Kunde; default = 99999999
cLiefFuerSto:C | "/"-getrennte Liste mit Standorten, durch die die Lieferung erfolgen soll; default = Leerstring
cLiefDurchSto:C | "/"-getrennte Liste mit Standorten, für die die Lieferung erfolgen soll; default = aktiver Standort

Rückgabewert

Keiner

Beispiel

| nFreiReservModus:N, nKdLiefModus:N, lWennBest:L, lTeilLief:L, lPosTeilLief:L,

  lNurVollst:L, nTerminTyp:N, cVonTermin:C, cBisTermin:C, nFreigModus:N,

  nMindWert:N, nMindProz:N, nVonAufTyp:N, nBisAufTyp:N, cKopfFilter:C,

  cPosFilter:C, lKredLimCheck:L, nMaxFreigWert:N, nVonKunde:N, nBisKunde:N,

  cLiefFuerSto:C, cLiefDurchSto:C |

nFreiReservModus := 1,

nKdLiefModus     := 1,

lWennBest        := false,

lTeilLief        := false,

lPosTeilLief     := true,

lNurVollst       := false,

nTerminTyp       := 1,

cVonTermin       := 'KW.12.05',

cBisTermin       := 'KW.15.05',

nFreigModus      := 1,

nMindWert        := 100,

nMindProz        := 50,

nVonAufTyp       := 1,

nBisAufTyp       := 30,

cKopfFilter      := 'True',

cPosFilter       := 'False',

lKredLimCheck    := false,

nMaxFreigWert    := 9999,

nVonKunde        := 1,

nBisKunde        := 1000,

cLiefFuerSto     := '000',

cLiefDurchSto    := '000',

AufAutoLiefFrei(

   nFreiReservModus,

   nKdLiefModus,

   lWennBest,

   lTeilLief,

   lPosTeilLief,

   lNurVollst,

   nTerminTyp,

   cVonTermin,

   cBisTermin,

   nFreigModus,

   nMindWert,

   nMindProz,

   nVonAufTyp,

   nBisAufTyp,

   cKopfFilter,

   cPosFilter,

   lKredLimCheck,

   nMaxFreigWert,

   nVonKunde,

   nBisKunde,

   cLiefFuerSto,

   cLiefDurchSto)


AufKommChk()

AufKommChk() – Kommissionierungs-Prüfung

Beschreibung

Die Funktion prüft, ob alle hierarchisch vorrangigen Positionen (lSameTyp = true) oder alle Positionen gleichen Typs (lSameTyp = false) eines Auftrags für automatische Kommissionierung schon gepackt sind. Eine Positionierung der Tabellen ist nicht notwendig.

Parameter

oDab055:O | Tabellenobjekt DAB055
oDab210:O | Tabellenobjekt DAB210
cAnummer:C | Auftragsnummer (ANUMMER aus DAB050)
nPos:N | Hierarchie (Typ), für die geprüft werden soll; 1 = WE; 2 = Fertigung; 3 = Lager
lSametyp:L | Prüfungsart; default = false false - prüft hierarchisch vorrangig true - prüft nur identische Hierarchie (Typ)
dTermbis:U | Prüft nur bis zu diesem Datum; default = 99999999

Rückgabewert

Logisch / Boolean - alles gepackt

Beispiel

| oDab010, oDab055, oDab210 |

AufKommChk(oDab010, oDab055, oDab210, '123456', 2)


AufKopfEdit()

AufKopfEdit() – Editiermodus für Auftragskopf

Achtung!

Folgeprozesse die beim Speichern über die Oberfläche ausgelöst werden, werden von AufKopfPost() nicht ausgelöst!

Beschreibung

Die Funktion versetzt einen existierenden Auftagskopf in den Editmodus. Der Dab050-Datensatz befindet sich anschließend im Editiermodus und kann weiter bearbeitet werden.

Parameter

nOrderNo:N | Auftragsnummer
oDab000:O | Tabellenobjekt DAB000
oDab050:O | Tabellenobjekt DAB050
oMem050:O | TMemCalcTable-Object

Rückgabewert

Logisch / Boolean - Editieren erfolgreich

Beispiel

sieh AufKopfNeu()

Siehe auch:

AufKopfNeu()

AufKopfPost()


AufKopfNeu()

AufKopfNeu() – Neuer Auftragskopf

Beschreibung

Die Funktion legt einen neuen Auftragskopf an und lässt ihn im Einfügemodus. Der neue Dab050-Datensatz befindet sich anschließend im Einfügemodus und kann weiter bearbeitet werden.

Parameter

nKdNr:N | Kunden-Nr.
cAufTyp:C | Auftrags-Typ; A = Angebot; N = Neuer Auftrag; L = Lieferbuchung; S = Service-Anforderung
nAufArt:N | Auftragsart (0-99)
oDab000:O | Tabellenobjekt DAB000
oDab050:O | Tabellenobjekt DAB050
oMem050:O | TMemCalcTable-Object (nur aus Kompatibilität); default = nil

Rückgabewert

Numerisch - Neue Auftragsnummer, falls Neuanlage erfolgreich

Beispiel

| oDM, oDab000, oDab050, oMem050, nCustomerNo, nOrderNo, cOrderKind, nOrderType |

//******************************************************************************

// Die Funktion legt einen neuen Auftrag an und speichert diesen

// @Result: Integer - ANUMMER des neuen Auftrags

//******************************************************************************

function CreateNewOrder()

   Result := -1,

   DbStartTrans(oDM.AdsConnection),

   startseq

      // Auftrag anlegen

      Result := AufKopfNeu(nCustomerNo, cOrderKind, nOrderType, oDab000, oDab050),

      SetErrorIf(Result = 0, 'Auftrag konnte nicht angelegt werden.'),

      // Auftrag speichern

      if AufKopfPost(Result, oDab000, oDab050, oMem050) then

         DbCommit(oDM.AdsConnection),

      else

         SetError('Der Auftrag mit der Nummer: ' + Str(Result) + ' konnte nicht gespeichert werden.'),

      endif,

   onerror

      if DbInTrans(oDM.AdsConnection) then

         DbRollBack(oDM.AdsConnection),

      endif,

      MessageDlg('Fehler beim Anlegen des Auftrags.' + CRLF + GetErrorText()),

   stopseq,

end,

//******************************************************************************

// Die Funktion editiert einen bestehenden Auftrag und setzt den Termin auf die

// aktuelle Woche. Nach dem Editieren wird der Auftrag gespeichert.

// @Result: boolean - Editieren und Speichern des Auftrags erfolgreich

//******************************************************************************

function EditOrder()

   Result := False,

   DbStartTrans(oDM.AdsConnection),

   startseq

      // Auftrag editieren

      Result := AufKopfEdit(nOrderNo, oDab000, oDab050, oMem050),

      if Result then

         // Den Termin auf den nächsten Monat setzten

         oDab050:TERMIN := 'KW.' + KW(Date() + 30),

         // Auftrag speichern

         Result := AufKopfPost(nOrderNo, oDab000, oDab050, oMem050),

         if Result then

            DbCommit(oDM.AdsConnection),

         else

            SetError('Der Auftrag mit der Nummer: ' + Str(nOrderNo) + ' konnte nicht gespeichert werden.'),

         endif,

      else

         SetError('Der Auftrag mit der Nummer: ' + Str(nOrderNo) + ' konnte nicht editiert werden.'),

      endif,

   onerror

      if DbInTrans(oDM.AdsConnection) then

         DbRollBack(oDM.AdsConnection),

      endif,

      MessageDlg('Fehler beim Bearbeiten des Auftrags.' + CRLF + GetErrorText()),

   stopseq,

end,

// Hauptprogramm ###############################################################

oDM := CreateObject('TBeDbGet', 'OrderDM'),

startseq

   oDab000        := DbGetTable(oDM, waDab000),

   oDab050        := DbGetTable(oDM, waDab050),

   oMem050        := CreateObject('TMemCalcTable', 'Mem050', oDM),

   oMem050.Active := True,

   startseq

      nCustomerNo := 70000000,

      cOrderKind  := 'N',

      nOrderType  := 0,

      // Auftrag anlegen

      nOrderNo := CreateNewOrder(),

      if EditOrder() then

         MessageDlg('Der Auftrag mit der Nummer: ' + Str(nOrderNo) + ' wurde erfolgreich angelegt und editiert.'),

      endif,

   onerror

      MessageDlg('Fehler beim Bearbeiten des Auftrags.' + CRLF + GetErrorText()),

   stopseq,

always

   DestroyObject(oDM),

stopseq,

Siehe auch:

AufKopfEdit()

AufKopfPost()


AufKopfPost()

AufKopfPost() – Speichern des Auftragskopfes

Achtung!

Folgeprozesse die beim Speichern über die Oberfläche ausgelöst werden, werden von AufKopfPost() nicht ausgelöst!

Beschreibung

Die Funktion speichert den neuen Auftragskopf. Der Dab050-Datensatz muss vorher mit AufKopfNeu() oder AufKopfEdit() in den Einfüge- oder Editiermodus versetzt worden sein. Das Speichern des Auftragskopfes führt keine Änderungen an den Positionen durch! Es ist somit nicht zulässig, den Gesamtpreis, Rechung o.ä. zu verändern!

Parameter

nOrderNo:N | Auftragsnummer
oDab000:O | Tabellenobjekt DAB000
oDab050:O | Tabellenobjekt DAB050
oMem050:O | TMemCalcTable-Object

Rückgabewert

Logisch / Boolean - Speicherung erfolgreich

Beispiel

siehe AufKopfNeu()

Siehe auch:

AufKopfEdit()

AufKopfNeu()


AufPosDelete()

AufPosDelete() – Auftragsposition löschen

Beschreibung

AufPosDelete() löscht eine existierende Auftragsposition bzw. im Falle eines Angebotes mit 10er-Schritten eine Auftragspositionsgruppe.

Parameter

nOrderNo:N | Auftragsnummer
cArtNo:C | Auftragsposition
oDab000:O | oDab000
oDab050:O | oDab050
oDab055:O | oDab055
oDab010:O | oDab010
oCalc000:O | oCalc000
oCalc010:O | oCalc010
oCalc020:O | oCalc020
oCalc035:O | oCalc035
oCalc055:O | oCalc055
oCalc155:O | oCalc155
oCalc160:O | oCalc160
oCalc210:O | oCalc210
oCalc240:O | oCalc240
oCalc255:O | oCalc255
oCalc310:O | oCalc310
oCalc340:O | oCalc340
oCalc410:O | oCalc410
oCalc520:O | oCalc520
oCalc610:O | oCalc610
oCalc710:O | oCalc710
oCalc720:O | oCalc720
oCalc730:O | oCalc730
oMem050:O | TMemCalcTable-Object
oMem055:O | TMemCalcTable-Object
lProdSync:L | Produktionsauftragssynchronisation aktiviert; default =True
oCalc260:O | oCalc260

Rückgabewert

Keiner - Kann die Löschung nicht durchgeführt werden, wird eine Exception ausgelöst.

Beispiel

| oDab000:DB  := 'waDAB000, 1'     , oDab050:DB  := 'waDAB050, DAB051', oDab055:DB  := 'waDAB055, DAB056',

  oDab010:DB  := 'waDAB010, DAB011', oCalc010:DB := 'waDAB010, DAB011', oCalc155:DB := 'waDAB155, APNUMMER',

  oCalc160:DB := 'waDAB160, ARTNR1', oCalc340:DB := 'waDAB340, DAB341', oCalc062:DB := 'waDAB062, DAB063',

  oCalc000:DB := 'waDAB000, 1'     , oCalc520:DB := 'waDAB520, DAB521', oCalc020:DB := 'waDAB020, DAB021',

  oCalc310:DB := 'waDAB310, DAB311', oCalc040:DB := 'waDAB040, DAB041', oCalc510:DB := 'waDAB510, DAB511',

  oCalc710:DB := 'waDAB710, DAB711', oCalc110:DB := 'waDAB110, DAB111', oCalc130:DB := 'waDAB130, DAB131',

  oCalc055:DB := 'waDAB055, DAB056', oCalc035:DB := 'waDAB035, DAB036', oCalc210:DB := 'waDAB210, DAB211',

  oCalc240:DB := 'waDAB240, DAB241', oCalc255:DB := 'waDAB255, DAB256', oCalc250:DB := 'waDAB250, DAB251',

  oCalc410:DB := 'waDAB410, DAB411', oCalc610:DB := 'waDAB610, DAB611', oCalc720:DB := 'waDAB720, DAB721',

  oCalc730:DB := 'waDAB730, DAB731', oMem050, oMem055, nNummer, nPos |

DBStartTrans(),

startseq,

   oMem050 := CreateObject('TMemCalcTable'),

   oMem055 := CreateObject('TMemCalcTable'),

   AufPosDelete(1979, 1,  oDab000,  oDab050,  oDab055,  oDab010,  oCalc000,

                oCalc010, oCalc020, oCalc035, oCalc055, oCalc155, oCalc160, oCalc210,

                oCalc240, oCalc255, oCalc310, oCalc340, oCalc410, oCalc520, oCalc610,

                oCalc710, oCalc720, oCalc730, oMem050,  oMem055,  true),

   DBCommit(),

onerror,

   DBRollBack(),

   WriteLn(GetErrorText()),

   Raise(),

stopseq,

Siehe auch:

AufPosDelete2()


AufPosDelete2()

AufPosDelete2() – Auftragsposition löschen

Beschreibung

AufPosDelete2() löscht eine existierende Auftragsposition. Wenn für Angebote die Organisation in Zehnerschritten aktiv ist, wird die komplette Auftragspositionsgruppe gelöscht.

Parameter

oDM:O | Datenmodul
nOrderNo:N | Auftragsnummer
nOrderPositionNo:N | Positionsnummer
lProductionOrderSyncronisation:L | Produktionsauftragssynchronisation aktiviert; default = True

Rückgabewert

Keiner - Wenn die Position nicht gelöscht werden kann, wird eine Exception ausgelöst.

Beispiel

| oDataModule, nOrderNumber, nOrderPositionNumber, bProductionOrderSyncronisation |

nOrderNumber                   := 100197,

nOrderPositionNumber           := 1,

bProductionOrderSyncronisation := True,

oDataModule                    := CreateObject('TBeDbGet', 'DEL_POS_DM'),

startseq

   oDataModule.CbTransaction_Begin(),

   startseq

      startseq

      // Auftragsposition löschen

      AufPosDelete2(oDataModule, nOrderNumber, nOrderPositionNumber,

                    bProductionOrderSyncronisation),

      onerror

         MessageDlg('Fehler beim Löschen der Auftragsposition <' + Str(nOrderNumber) +

                     ' ' + Str(nOrderPositionNumber) + '>' + CrLf + CrLf +

                     GetErrorText()),

      stopseq,

      oDataModule.CbTransaction_Commit(),

   always

      oDataModule.CbTransaction_TryRollback(),

   stopseq,

always

   DestroyObject(oDataModule),

stopseq,

Siehe auch:

AufPosDelete()


AufPosEdit()

AufPosEdit() – Editiermodus für Auftragsposition

Beschreibung

Die Funktion versetzt eine existierende Auftragsposition in den Editiermodus. Die beiden Memory-Tabellen oMem050 und oMem055 müssen vor Aufruf der Funktion erzeugt worden sein. In ihnen werden die alten Dab050- und Dab055-Feldinhalte gespeichert. Diese dürfen anschließend nicht verändert werden und müssen an die Funktion AufPosPost() übergeben werden!

Hinweis

Die Funktion sollte nicht mehr verwendet werden. Verwenden Sie stattdessen AufPosEdit2()!

Parameter

nOrderNo:N | Auftragsnummer
nOrderPos:N | Auftragsposition
oDab000:O | Tabellenobjekt DAB000
oDab050:O | Tabellenobjekt DAB050
oDab055:O | Tabellenobjekt DAB055
oDab010:O | Tabellenobjekt DAB010
oMem050:O | TMemCalcTable-Objekt
oMem055:O | TMemCalcTable-Objekt

Rückgabewert

Logisch / Boolean - Editiermodus erfolgreich

Beispiel

| oDab000:DB  := 'waDAB000, 1',      oDab050:DB  := 'waDAB050, DAB051', oDab055:DB  := 'waDAB055, DAB056',

  oDab010:DB  := 'waDAB010, DAB011', oCalc062:DB := 'waDAB062, DAB063', oCalc000:DB := 'waDAB000, 1',

  oCalc520:DB := 'waDAB520, DAB521', oCalc020:DB := 'waDAB020, DAB021', oCalc310:DB := 'waDAB310, DAB311',

  oCalc510:DB := 'waDAB510, DAB511', oCalc710:DB := 'waDAB710, DAB711', oCalc040:DB := 'waDAB040, DAB041',

  oCalc110:DB := 'waDAB110, DAB111', oCalc130:DB := 'waDAB130, DAB131', oCalc055:DB := 'waDAB055, DAB056',

  oCalc035:DB := 'waDAB035, DAB036', oCalc210:DB := 'waDAB210, DAB211', oCalc240:DB := 'waDAB240, DAB241',

  oCalc255:DB := 'waDAB255, DAB256', oCalc410:DB := 'waDAB410, DAB411', oCalc610:DB := 'waDAB610, DAB611',

  oCalc720:DB := 'waDAB720, DAB721', oCalc730:DB := 'waDAB730, DAB731', oMem050, oMem055, nNummer, nPos |

oMem050 := CreateObject('TMemCalcTable'),

oMem055 := CreateObject('TMemCalcTable'),

nNummer := 123456,

startseq,

   DBStartTrans(),

   nPos := AufPosNeu(nNummer, 'BSP_ART', oDab000,  oDab050,  oDab055,

                     oDab010,  oCalc000, oCalc020, oCalc040, oCalc062,

                     oCalc110, oCalc130, oCalc310, oCalc510, oCalc520,

                     oCalc710),

   if nPos = 0 then

      DBRollBack(),

   else,

      if AufPosEdit( nNummer, nPos, oDab000, oDab050, oDab055, oDab010,

                     oMem050, oMem055 ) then

         oDab055:BMENGE := 10,

         oDab055:VMENGE := 5,

         if AufPosPost(nNummer,  nPos,     oDab000,  oDab050,  oDab055,

                       oDab010,  oMem050,  oMem055,  oCalc000, oCalc020,

                       oCalc040, oCalc055, oCalc035, oCalc062, oCalc210,

                       oCalc240, oCalc255, oCalc310, oCalc410, oCalc510,

                       oCalc520, oCalc610, oCalc710, oCalc720, oCalc730) then

            DBCommit(),

         else,

            DBRollBack(),

            Meld(''),

         endif,

      endif,

   endif,

onerror,

   DBRollBack(),

   Meld(GetErrorText()),

stopseq,

Siehe auch:

AufPosEdit2()

AufPosFrei()

AufPosNeu()

AufPosNeu2()

AufPosPost()


AufPosEdit2()

AufPosEdit2() – Editiermodus für Auftragsposition

Beschreibung

Die Funktion versetzt eine existierende Auftragsposition in den Editiermodus. Übergeben wird im Gegensatz zu AufPosEdit() ein Datenmodul. Der Dab055-Datensatz befindet sich anschließend im Editiermodus und kann bearbeitet werden. Es ist erlaubt beliebige Dab055-Feldinhalte zu verändern, sofern diese über die normale Auftragsbearbeitung ebenfalls geändert werden können.

Parameter

oDM:O | Objekt der Klasse TBeDbGet (Datenmodul)
nAufNummer:N | Auftragsnummer
nAufPos:N | Auftragspositionsnummer

Rückgabewert

Logisch / Boolean - Editiermodus erfolgreich

Beispiel

| oDM, oDAB055 |

// verändert die Bestellmenge auf 5

oDM     := CreateObject('TBeDbGet'),

oDAB055 := DBGetTable(oDM, waDAB055,),

startseq,

   DBStartTrans(oDM.ADSConnection),

   AufPosEdit2(oDM, 4711, 1),

   oDAB055:BMENGE := 5,

   AufPosPost2(oDM, 4711, 1, false, false),

   DBCommit(oDM.ADSConnection),

onerror,

   DbCancelAll(oDM),

   DBRollBack(oDM.ADSConnection),

stopseq,

Siehe auch:

AufPosEdit()

AufPosFrei()

AufPosNeu()

AufPosNeu2()

AufPosPost()


AufPosEntnOffen()

AufPosEntnOffen() – Offene Entnahmemenge

Beschreibung

Die Funktion ermittelt die noch offene Entnahmemenge einer reservierten Auftragsposition.

Parameter

oDAB055:O

Positioniertes Tabellenobjekt der Auftragspositionen

Rückgabewert

Numerisch - Offenen Entnahmemenge

Beispiel

| oDAB055:DB := 'waDAB055, DAB056' |

DBSeek('815816  1', oDAB055),

AufPosEntnOffen(oDAB055)


AufPosFrei()

AufPosFrei() – Versand-Freigabe für eine Auftragsposition

Beschreibung

Die Funktion gibt eine Menge einer Auftragsposition zur Lieferung frei. Erhöht die Freigabemenge (DAB055:VMENGE) um die übergebene Menge. Soll die Funktion in einer "aussenliegenden" (also bereits aktiven) Transaktion eingebettet werden, muss das Connection-Object dieser Transaktion übergeben werden. Werden optionale Tabellen übergeben (oDabXXX) müssen diese mit der gleichen Ads-Connection laufen, welche als oConnect übergeben wird.

Hinweis

Die Funktion sollte nicht mehr verwendet werden. Verwenden Sie stattdessen AufPosFrei2()!

Parameter

cAPNummer:C | 6+3-Stellig entsprechend DAB055->APNUMMER
nMenge:N | Freigabemenge
oConnect:O | AdsConnection-Objekt für Transaktions-Handling
oDab000:O | Tabellenobjekt DAB000
oDab010:O | Tabellenobjekt DAB010
oDab020:O | Tabellenobjekt DAB020
oDab050:O | Tabellenobjekt DAB050
oDab055:O | Tabellenobjekt DAB055
oDab240:O | Tabellenobjekt DAB240
oDab410:O | Tabellenobjekt DAB410
oDab520:O | Tabellenobjekt DAB520
oDab610:O | Tabellenobjekt DAB610
oDab710:O | Tabellenobjekt DAB710
oDab720:O | Tabellenobjekt DAB720
oDab730:O | Tabellenobjekt DAB730
aCommiss:A | Array Kommissionsnr.; default = null();Format: { { <Kommission>, <Menge>, <Platz> , <Verfallsdatum>, <BehälterNr>, <BehälterTyp>}, { ... } }
cProgID:C | Zur Verarbeitung von BE-Events; default = Leerstring
oDab160:O | Tabellenobjekt DAB160
nEntnSchNr:N | Entnahmescheinnummer - automatische der Chargen / Plätze auf dem übergebenen Entnahmeschein. Der Bezug macht nur bei Nutzung der Einzelreservierungen (Dab260) Sinn; (default = 0).
lIgnoreReservation:L | Einzelreservierungen ignorieren (default = false); True - Es werden immer die Angaben aus aCommiss verwendet. ACHTUNG: die Einzelreservierung müssen danach manuell angepasst werden!

Rückgabewert

keiner

Beispiel

| oDab055:DB := 'waDAB055' |

DBSeek('  1234  1', oDab055),

AufPosFrei(oDab055:APNUMMER, oDab055:BMENGE - oDab055:LMENGE - oDab055:VMENGE)

Siehe auch:

AufPosFrei2()


AufPosFrei2()

AufPosFrei2() – Versand-Freigabe für eine Auftragsposition

Beschreibung

Die Funktion übernimmt die gleiche Aufgabe wie AufPosFrei(). Übergeben wird im Gegensatz zu AufPosFrei() ein Datenmodul.

Hinweis

Die Funktion AufPosFrei2() führt keine Validierung aus, ob die übergebene Menge (nMenge) auf Lager verfügbar ist und bucht diese immer in den Auftrag. Soll eine Validierung stattfinden, müssen die Funktionen AufPosEdit2() und AufPosPost2() verwendet werden.

Parameter

oDM:O | Objekt der Klasse TBeDbGet (Datenmodul)
nAufNummer:N | Auftragsnummer
nAufPosNr | Nummer der Auftragsposition
nMenge:N | Freigabemenge
aCommiss:A | Array Kommissionsnr.; default = null(); Format: {; { <Kommission>, <Menge>, [,<Platz> [,<Verfallsdatum> [,<BehälterNr> [,<EinwegBehälterTyp> ]]]]}, { ... }; }
cProgID:C | Zur Verarbeitung von BE-Events; default = Leerstring
nEntnSchNr:N | Entnahmescheinnummer - automatische der Chargen / Plätze auf dem übergebenen Entnahmeschein. Der Bezug macht nur bei Nutzung der Einzelreservierungen (Dab260) Sinn.
lIgnoreReservation:L | Einzelreservierungen ignorieren (default = false); True - Es werden immer die Angaben aus aCommiss verwendet. ACHTUNG: die Einzelreservierung müssen danach manuell angepasst werden!

Rückgabewert

Keiner

Beispiel

| oDM, aKommiss, nAuftrag, nPosNr, nMenge |

aKommiss := { {"CHARGE_1", 5, "PLATZ_A"},

              {"CHARGE_2", 5, "PLATZ_B"} },

nAuftrag := 816077,

nPosNr   := 10,

nMenge   := 10,

oDM      := CreateObject('TBeDBGet'),

startseq,

   startseq,

      DBStartTrans(oDM.ADSConnection),

      AufPosFrei2(oDM, nAuftrag, nPosNr, nMenge, aKommiss),

      DBCommit(oDM.ADSConnection),

   onerror,

      DBCancelAll(oDM),

      DBRollBack(oDM.ADSConnection),

      MessageDlg(GetErrorText()),

   stopseq,

always,

   DestroyObject(oDM),

stopseq,


AufPosNeu()

AufPosNeu() – Neue Auftragsposition

Beschreibung

Die Funktion legt eine neue Auftragsposition an. Der neue Dab055-Datensatz befindet sich anschließend per Default nicht im Einfügemodus und kann erst mit AufPosEdit() weiter bearbeitet werden. Wird der Parameter lKeepInsertMode = true übergeben (zusammen mit oMem050 und oMem055) dann befindet sich der Datensatz anschließend im Einfügemodus und kann weiter bearbeitet werden. Ein weiteres AufPosEdit() ist dann nicht zulässig.

Hinweis

Die Funktion sollte nicht mehr verwendet werden. Verwenden Sie stattdessen AufPosNeu2()!

Parameter

nOrderNo:N | Auftragsnummer
cArtNo:C | Artikelnummer
oDab000:O | Tabellenobjekt DAB000
oDab050:O | Tabellenobjekt DAB050
oDab055:O | Tabellenobjekt DAB055
oDab010:O | Tabellenobjekt DAB010
oCalc000:O | Tabellenobjekt DAB000 für Kalkulationen
oCalc020:O | Tabellenobjekt DAB020 für Kalkulationen
oCalc040:O | Tabellenobjekt DAB040 für Kalkulationen
oCalc062:O | Tabellenobjekt DAB062 für Kalkulationen
oCalc110:O | Tabellenobjekt DAB110 für Kalkulationen
oCalc130:O | Tabellenobjekt DAB130 für Kalkulationen
oCalc310:O | Tabellenobjekt DAB310 für Kalkulationen
oCalc510:O | Tabellenobjekt DAB510 für Kalkulationen
oCalc520:O | Tabellenobjekt DAB520 für Kalkulationen
oCalc710:O | Tabellenobjekt DAB710 für Kalkulationen
lKeepInsertMode:L | Datensatz nach Neuanlage im Insert-Modus lassen; default = false
oMem050:O | TMemCalcTable-Objekt (für lKeepInsertMode = true benötigt); default = nil
oMem055:O | TMemCalcTable-Objekt (für lKeepInsertMode = true benötigt); default = nil

Rückgabewert

Numerisch - Neue Pos.Nr.

Beispiel

| oDab000:DB  := 'waDAB000, 1',       oDab050:DB  := 'waDAB050, DAB051', oDab055:DB  := 'waDAB055, DAB056',

  oDab010:DB  := 'waDAB010, DAB011',  oCalc062:DB := 'waDAB062, DAB063', oCalc000:DB := 'waDAB000, 1',

  oCalc520:DB := 'waDAB520, DAB521',  oCalc020:DB := 'waDAB020, DAB021', oCalc310:DB := 'waDAB310, DAB311',

  oCalc510:DB := 'waDAB510, DAB511',  oCalc710:DB := 'waDAB710, DAB711', oCalc040:DB := 'waDAB040, DAB041',

  oCalc110:DB := 'waDAB110, DAB111',  oCalc130:DB := 'waDAB130, DAB131', oCalc055:DB := 'waDAB055, DAB056',

  oMem050, oMem055, nNummer, nPos |

startseq,

   DBStartTrans(),

   oMem050 := CreateObject('TMemCalcTable'),

   nNummer := AufKopfNeu(81192544, 'N', 0, oDab000, oDab050, oMem050),

   if nNummer <> 0 and AufKopfPost(nNummer, oDab000, oDab050, oMem050) then

      DBCommit(),

      AufPosNeu(nNummer,  'BE-SW',  oDab000,  oDab050,  oDab055,  oDab010,

                oCalc000, oCalc020, oCalc040, oCalc062, oCalc110, oCalc130,

                oCalc310, oCalc510, oCalc520, oCalc710),

   else

      DBRollBack(),

   endif,

onerror,

   DBRollBack(),

   WriteLn(GetErrorText()),

stopseq,

Siehe auch:

AufPosEdit()

AufPosEdit2()

AufPosFrei()

AufPosNeu2()

AufPosPost()


AufPosNeu2()

AufPosNeu2() – Neue Auftragsposition

Beschreibung

Die Funktion übernimmt die gleiche Aufgabe wie AufPosNeu(). Übergeben wird im Gegensatz zu AufPosNeu() ein Datenmodul.

Parameter

oDM:O | Kontainer/Datenmodul-Objekt
nAufNummer:N | Auftragsnummer
cArtNr:C | Artikelnummer
lKeepInsertMode:L | Datensatz nach Neuanlage im Insert-Modus lassen; default = false
lModifyVarSL:L | Dialog zum Verändern von Sets/Varianten anzeigen; default = false
lAppendVarSL:L | Auftragsstückliste bei Neuanlage füllen; default = false
lQuiet:L | Funktionseigene Exceptionmeldungen unterdrücken; default = True
nAufPosNr:N | zu vergebene Auftragspositions-Nummer; default = -1; -1 : automatische Berechnung der nächsten Positions-Nummer

Rückgabewert

Numerisch - Neue Positions Nr.

Beispiel

| oDM, oDAB055 |

//neue AufPos mit Bestellmenge = 5

oDM     := CreateObject('TBeDbGet'),

oDAB055 := DBGetTable(oDM, waDAB055,),

startseq,

   DBStartTrans(oDM.ADSConnection),

   AufPosNeu2(oDM, 4711, '4711', true, false, false),

   oDAB055:BMENGE := 5,

   AufPosPost2(oDM, 4711, 1, false, false),

   DBCommit(oDM.ADSConnection),

onerror,

   DbCancelAll(oDM),

   DBRollBack(oDM.ADSConnection),

stopseq,

Siehe auch:

AufPosNeu()


AufPosPost()

AufPosPost() – Speichern einer Auftragsposition

Beschreibung

Die Funktion dient dem Speichern einer im Editiermodus befindlichen Auftragsposition. Diese muss zuvor von der Funktion AufPosEdit() in den Editiermodus versetzt worden sein.

Die Funktion analysiert die Veränderung im Datensatz und schreibt ggf. Terminraster, Statistik, Auftragskopfwerte, etc.

Die beiden Memory-Tabellen müssen vor Aufruf der Funktion erzeugt und an AufPosEdit() übergeben worden sein.

Wird lCheckVMENGE übergeben, muss auch oCalc320 übergeben werden! lCheckVMENGE = true führt alle Verfügbarkeitsprüfungen und Validierung der Auftragserfassung auf des Feld VMENGE aus !

Hinweis

Die Funktion sollte nicht mehr verwendet werden. Verwenden Sie stattdessen AufPosPost2()!

Parameter

nOrderNo:N | Auftragsnummer
nOrderPos: | Auftragsposition
oDab000:O | Tabellenobjekt DAB000
oDab050:O | Tabellenobjekt DAB050
oDab055:O | Tabellenobjekt DAB055
oDab010:O | Tabellenobjekt DAB010
oMem050:O | TMemCalcTable-Object
oMem055:O | TMemCalcTable-Object
oCalc000:O | Tabellenobjekt DAB000 für Kalkulationen
oCalc020:O | Tabellenobjekt DAB020 für Kalkulationen
oCalc040:O | Tabellenobjekt DAB040 für Kalkulationen
oCalc055:O | Tabellenobjekt DAB055 für Kalkulationen
oCalc035:O | Tabellenobjekt DAB035 für Kalkulationen
oCalc062:O | Tabellenobjekt DAB062 für Kalkulationen
oCalc210:O | Tabellenobjekt DAB210 für Kalkulationen
oCalc240:O | Tabellenobjekt DAB240 für Kalkulationen
oCalc255:O | Tabellenobjekt DAB255 für Kalkulationen
oCalc310:O | Tabellenobjekt DAB310 für Kalkulationen
oCalc410:O | Tabellenobjekt DAB410 für Kalkulationen
oCalc510:O | Tabellenobjekt DAB510 für Kalkulationen
oCalc520:O | Tabellenobjekt DAB520 für Kalkulationen
oCalc610:O | Tabellenobjekt DAB610 für Kalkulationen
oCalc710:O | Tabellenobjekt DAB710 für Kalkulationen
oCalc720:O | Tabellenobjekt DAB720 für Kalkulationen
oCalc730:O | Tabellenobjekt DAB730 für Kalkulationen
oCalc320:O | Tabellenobjekt DAB320 für Kalkulationen; default = nil
lCheckVMENGE:L | VMENGE überprüfen; default = false
oCalc160:O | Tabellenobjekt DAB160 für Kalkulationen; default = nil
lVarPriceCalc:L | Varianten/Set-Preis neu berechnen; default = false
lQuiet:L | Rückfragen wie "Menge <0> bestätigen ?" oder "Abweichung von Verpackungs-Einheit bestätigen ?" unterdrücken; default = true
lCheckRMENGE | RMENGE überprüfen; default = false
lProdOrdPLRebuild:L | Zugehörige Produktions-Stückliste neu aufbauen; (True - Produktions-Stückliste wird komplett gelöscht und 1 zu 1 von der Auftrags-Stückliste übernommen); Default = True

Rückgabewert

Logisch / Boolean - Post erfolgreich

Beispiel

| oDab000:DB  := 'waDAB000, 1',      oDab050:DB  := 'waDAB050, DAB051', oDab055:DB  := 'waDAB055, DAB056',

  oDab010:DB  := 'waDAB010, DAB011', oCalc062:DB := 'waDAB062, DAB063', oCalc000:DB := 'waDAB000, 1',

  oCalc520:DB := 'waDAB520, DAB521', oCalc020:DB := 'waDAB020, DAB021', oCalc310:DB := 'waDAB310, DAB311',

  oCalc510:DB := 'waDAB510, DAB511', oCalc710:DB := 'waDAB710, DAB711', oCalc040:DB := 'waDAB040, DAB041',

  oCalc110:DB := 'waDAB110, DAB111', oCalc130:DB := 'waDAB130, DAB131', oCalc055:DB := 'waDAB055, DAB056',

  oCalc035:DB := 'waDAB035, DAB036', oCalc210:DB := 'waDAB210, DAB211', oCalc240:DB := 'waDAB240, DAB241',

  oCalc255:DB := 'waDAB255, DAB256', oCalc410:DB := 'waDAB410, DAB411', oCalc610:DB := 'waDAB610, DAB611',

  oCalc720:DB := 'waDAB720, DAB721', oCalc730:DB := 'waDAB730, DAB731', oMem050, oMem055, nNummer, nPos |

oMem050 := CreateObject('TMemCalcTable'),

oMem055 := CreateObject('TMemCalcTable'),

nNummer := 123456,

startseq,

   DBStartTrans(),

   nPos := AufPosNeu(nNummer, 'BSP_ART', oDab000, oDab050, oDab055,

                     oDab010, oCalc000, oCalc020, oCalc040, oCalc062,

                     oCalc110, oCalc130, oCalc310, oCalc510, oCalc520,

                     oCalc710, true, oMem050, oMem055),

   if nPos = 0 then

      DBRollBack(),

   else

      if DBState(oDab055) = dsInsert then

         oDab055:BMENGE := 10,

         oDab055:VMENGE := 5,

         if AufPosPost(nNummer, nPos, oDab000, oDab050, oDab055, oDab010,

                       oMem050,  oMem055,  oCalc000, oCalc020, oCalc040,

                       oCalc055, oCalc035, oCalc062, oCalc210, oCalc240,

                       oCalc255, oCalc310, oCalc410, oCalc510, oCalc520,

                       oCalc610, oCalc710, oCalc720, oCalc730) then

            DBCommit(),

         else

            DBRollBack(),

         endif,

      endif,

   endif,

onerror,

   DBRollBack(),

   Meld(GetErrorText()),

stopseq,

Siehe auch:

AufPosEdit()

AufPosEdit2()

AufPosFrei()

AufPosNeu()

AufPosNeu2()

AufPosPost2()


AufPosPost2()

AufPosPost2() – Speichern einer Auftragsposition

Beschreibung

Die Funktion übernimmt die gleiche Aufgabe wie AufPosPost(). Übergeben wird im Gegensatz zu AufPosPost() ein Datenmodul.

Parameter

oDM:O | Kontainer/Datenmodul-Objekt
nAufNummer:N | Auftragsnummer
nAufPosNr:C | Auftragspositionsnummer
lCheckVMenge:L | V-Menge validieren
lVarPreisCalc:L | Varianten/Set-Preis neu berechnen; default = false
lQuiet:L | Rückfragen wie "Menge <0> bestätigen ?" oder "Abweichung von Verpackungs-Einheit bestätigen ?" unterdrücken; default = true
lCheckRMenge:L | R-Menge validieren
lProdOrdPLRebuild:L | Zugehörige Produktions-Stückliste neu aufbauen; (True - Produktions-Stückliste wird komplett gelöscht und 1 zu 1 von der Auftrags-Stückliste übernommen); Default = True

Rückgabewert

Logisch/ Boolean - Post erfolgreich

Beispiel

|oDM, oDAB055|

//neue AufPos mit Bestellmenge = 5

oDM     := CreateObject('TBeDbGet'),

oDAB055 := DBGetTable(oDM, waDAB055,),

startseq,

   DBStartTrans(oDM.ADSConnection),

   AufPosNeu2(oDM, 4711, '4711', true, false, false),

   oDAB055:BMENGE := 5,

   AufPosPost2(oDM, 4711, 1, false, false),

   DBCommit(oDM.ADSConnection),

onerror

   DbCancelAll(oDM),

   DBRollBack(oDM.ADSConnection),

stopseq,

Siehe auch:

AufPosEdit2()

AufPosNeu2()


AufPosSet()

AufPosSet() – Auftragspositionsfilter setzen

Beschreibung

Die Funktion setzt einen Auftragspositionsfilter auf die DAB160. Wird oTable leer gelassen, ist die Rückgabe eine globale DAB160 mit entsprechendem Filter.

Diese Funktion wird intern von allen AufPosXXX()-Funktionen verwendet. Es wird dringend empfohlen diese Funktion an Stelle von eigenen Filtern und/oder Scopes zu verwenden.

Parameter

cAPNummer:C | DAB055:APNUMMER
oTable:O | Tabelle, auf die der Filter gelegt werden soll; default = nil

Rückgabewert

Objekt - gefilterte Tabelle

Beispiel

AufPosSet('333568 18')


AufPosVarArray()

AufPosVarArray() – Auftragsstückliste als Array

Beschreibung

Die Funktion liefert eine Auftragsstückliste in dem Format zurück, in dem es u.a. in dem Feld DAB730:VAR_STK gespeichert wird. Diese Funktion kann genutzt werden, um den Inhalt von DAB730:VAR_STK programmatisch zu füllen.

Parameter

oDM:O | Datamodul
nAufNummer:N | Auftragsnr.
nAufPosNr:N | Auftr.Pos.Nr.

Rückgabewert

Array - Array-Format:

{ { <ArtNr>, <Menge>, <Dim1>, <Dim2>, <Dim3> }, { ... }, ... }

sortiert nach allen Array-Feldern

Beispiel

| oDM, oDab730 |

oDab730:VAR_STK := ArrToStr(AufPosVarArray(oDM, 4711, 99))


AufPosVerfueg()

AufPosVerfueg() – Verfügbarkeit einer Auftragsposition

Beschreibung

Die Funktion prüft die Verfügbarkeit einer Auftragsposition. Beide Tabellen müssen vor dem Funktionsaufruf entsprechend positioniert worden sein.

Parameter

oDab055:O | DAB055 Auftragsposition (Datei 4)
oDab010:O | DAB010 Artikelstamm (Datei 2)

Rückgabewert

Numerisch

0 vollständig verfügbar

1 teilweise verfügbar

2 unbekannt (z.B. nicht lagergeführt)

3 nicht verfügbar

Beispiel

| aAvail, oDab010, oDab055 |

aAvail := AufPosVerfueg(oDab055, oDab010)


AufPosWert()

AufPosWert() – Auftragspositionswert

Beschreibung

Die Funktion liefert den Auftragspositionswert zu der bestellten Menge oder zu einer übergebenen Menge.

Parameter

oDM:O | Datenmodul
nAufNummer:N | Auftragsnummer
nAufPosNr:N | Auftragspositionsnummer
nMenge:N | Menge; default = -99999999
lIgnFaktZuschlag:L | Einbeziehung der Zusatzkosten (ja = false, nein = true); default = true
oDAB055:O | Tabellenobjekt der DAB055; default = nil

Rückgabewert

Numerisch - Auftragspositionswert

Beispiel

| oDM |

oDM := CreateObject('TBeDBGet'),

AufPosWert(oDM, 4711, 99, 5, false)


AufRepErsPosNeu()

AufRepErsPosNeu() – Neue Ersatzbauteil-Auftragsposition für Reparatur-Auftragsposition

Beschreibung

Die Funktion legt für eine Reparatur-Auftragsposition eine Ersatzbauteil-Position an.

Der neue Dab055-Datensatz befindet sich anschließend per Default nicht im Einfügemodus und kann erst mit AufPosEdit() weiter bearbeitet werden.

Wird der Parameter lKeepInsertMode = True übergeben dann befindet sich der Datensatz anschließend im Einfügemodus und kann weiter bearbeitet werden. Ein weiteres AufPosEdit() ist dann nicht zulässig.

Parameter

oDM:O | Kontainer/Datenmodul-Objekt
nAufNummer:N | Auftragsnummer
nQuellAufPosNr:N | Auftragspositionsnummer für welche eine Ersatzbauteil-Position erzeugt werden soll
cArtNr:C | Artikelnummer; (default = Artikel der Position für welche die Ersatzbauteil-Position erzeugt werden soll
lKeepInsertMode:L | Datensatz nach Neuanlage im Insert-Modus lassen; default = False
lQuiet:L | Funktionseigene Exceptionmeldungen unterdrücken; default = True
nAufPosNr:N | zu vergebene Auftragspositions-Nummer; default = -1; -1 : automatische Berechnung der nächsten Positions-Nummer

Rückgabewert

Numerisch - Neue Positions Nr.

Beispiel

// Auftrag muss ein Reparatur-Auftrag sein

// und Artikel ein Serien-Artikel

|oDM, nPos, oDab055|

oDM := CreateObject('TBeDBGet'),

startseq

   // normale Position erzeugen

   oDab055 := DbGetTable(oDM, waDAB055),

   DbStartTrans(oDM.AdsConnection),

   nPos := AufPosNeu2(oDM, 533, 'PC_CPU', True),

   oDab055:BMENGE := -1,

   oDab055:VMENGE := -1,

   AufPosPost2(oDM, 533, nPos, True),

   nPos := AufRepErsPosNeu(oDM, 533, nPos),

   writeln('neue Ersatzbauteil-Positions-Nr.:' + Str(nPos)),

   DBCommit(oDM.AdsConnection),

always

   if DbInTrans(oDM.AdsConnection) then

      DbRollback(oDM.AdsConnection),

   endif,

   Destroyobject(oDM),

stopseq,

Siehe auch:

AufPosNeu()


AufResDelete()

AufResDelete() – Auftragspositions-Reservierung löschen

Beschreibung

Die Funktion löscht eine Reservierung für eine Auftragsposition.

Parameter

oDM:O | Datenmodul
nAufNummer:N | Auftragsnummer
nAufPosNr:N | Auftragspositionsnummer
nResID:N | Reservierungs-ID

Rückgabewert

Keiner

Beispiel

| oDM |

oDM := CreateObject('TBeDBGet'),

startseq,

   DBStartTrans(oDM.ADSConnection),

   AufResDelete(oDM, 4711, 99, 37773),

   DBCommit(oDM.ADSConnection),

onerror,

   DBCancelAll(oDM),

   DBRollBack(oDM.ADSConnection),

stopseq,


AufResEdit()

AufResEdit() – Auftragspositions-Reservierung editieren

Beschreibung

Eine Reservierung für eine Auftragsposition wird in den Edit-Modus versetzt. (Betrifft Dab055 und Dab260).

Parameter

oDM:O | Datenmodul
nAufNummer:N | Auftragsnummer
nAufPosNr:N | Auftragspositionsnummer
nResID:N | Reservierungs-ID

Rückgabewert

Keiner

Beispiel

| oDM, oDAB260 |

oDM     := CreateObject('TBeDBGet'),

oDAB260 := DBGetTable(oDM, waDAB260,),

startseq,

   DBStartTrans(oDM.ADSConnection),

   AufResEdit(oDM, 4711, 99, 37773),

   oDAB260:MENGE := 5,

   AufResPost(oDM, 4711, 99, 37773),

   DBCommit(oDM.ADSConnection),

onerror,

   DBCancelAll(oDM),

   DBRollback(oDM.ADSConnection),

   MessageDlg(GetErrorText()),

stopseq,

Siehe auch:

AufResNeu()

AufResPost()


AufResNeu()

AufResNeu() – Auftragspositions-Reservierung erstellen

Beschreibung

Eine Reservierung für eine Auftragsposition wird erstellt.

Parameter

oDM:O | Datenmodul
nAufNummer:N | Auftragsnummer
nAufPosNr:N | Auftragspositionsnummer

Rückgabewert

Numerisch - Reservierungs-ID

Beispiel

| oDM, oDAB260, nResId |

oDM     := CreateObject('TBeDBGet'),

oDAB260 := DBGetTable(oDM, waDAB260,),

startseq,

   DBStartTrans(oDM.ADSConnection),

   nResId := AufResNeu(oDM, 4711, 99),

   oDAB260:MENGE := 5,

   AufResPost(oDM, 4711, 99, nResId),

   DBCommit(oDM.ADSConnection),

onerror,

   DBCancelAll(oDM),

   DBRollBack(oDM.ADSConnection),

   MessageDlg(GetErrorText()),

stopseq,

Siehe auch:

AufResEdit()

AufResPost()


AufResPost()

AufResPost() – Auftragspositions-Reservierung speichern

Beschreibung

Eine Reservierung für eine Auftragsposition, die sich im Editier-Modus befindet, wird gespeichert.

Parameter

oDM:O | Datenmodul
nAufNummer:N | Auftragsnummer
nAufPosNr:N | Auftragspositionsnummer
nResID:N | Reservierungs-ID

Rückgabewert

Keiner

Beispiel

| oDM, oDAB260, nResId |

oDM     := CreateObject('TBeDBGet'),

oDAB260 := DBGetTable(oDM, waDAB260,),

startseq,

   DBStartTrans(oDM.ADSConnection),

   nResId := AufResNeu(oDM, 4711, 99),

   oDAB260:MENGE := 5,

   AufResPost(oDM, 4711, 99, nResId),

   DBCommit(oDM.ADSConnection),

onerror,

   DBCancelAll(oDM),

   DBRollBack(oDM.ADSConnection),

   MessageDlg(GetErrorText()),

stopseq,

Siehe auch:

AufResEdit()

AufResNeu()


AufRueck()

AufRueck() – Prozentuale Differenz

Beschreibung

Die Funktion berechnet die prozentuale Differenz zwischen zwei Werten (z.B. zwischen Verkaufspreis und Einkaufspreis).

Parameter

nVKP:N | Numerischer Wert 1
nEKP:N | Numerischer Wert 2

Rückgabewert

Numerisch - Prozentuale Differenz

Beispiel

AufRueck(120, 100)   // Ergebnis: 20 %

AufRueck(100, 120)   // Ergebnis: -16,67 %


AZeit()

AZeit() – Gesamt-Arbeitszeit einer Baugruppe

Beschreibung

Die Funktion dient der Ermittlung der gesamten Arbeitszeit (in Minuten) für eine Baugruppe, über alle Stücklistenhierarchien.

Parameter

cArtNr:C | Artikelnummer; default = Leerstring
cRS:C | "R"üstzeit/"S"tückzeit; default = 'S'
nFaktor:N | Menge; default = 1
oDab210:O | DAB210 Stücklisten (Datei 14); default = nil

Rückgabewert

Numerisch - Gesamt-Arbeitszeit in Min

Beispiel

| oDAB210:DB := 'waDAB210, DAB211' |

AZeit('4711', "S", 1, oDab210)


BDEBuch()

BDEBuch() – BDE Buchungsfunktion

Hinweis

Diese Codeblockfunktion ist in Verbindung mit Fertigungs- und Kundenaufträgen ab Version 6.5.65 nicht mehr einsetzbar und gibt keine entsprechende Fehlermeldung aus.

Für die Funktion stehen im Codeblock entsprechend leistungsfähigere Funktionen / Klassen (TBeBDEBusinessController) zur Verfügung, mit denen die unter Version 6.5 neu eingeführten Funktionalitäten im Bereich der BDE / MDE genutzt werden können.

Bei Anwesenheitsbuchungen können keine expliziten Zeiten mehr für Buchungen angegeben werden, welche keiner vollständigen Nachbuchung entsprechen.

Die Parameter cStartZeit:C und cStopZeit:C werden also nur berücksichtigt, wenn alle Parameter zum Erzeugen einer vollständigen Buchung (dStartDatum:D, cStartZeit:C, dStopDatum:D, cStopZeit:C) gleichzeitig angegeben werden.

Bei Buchungen bei denen nur die Parameter für das Starten oder Stoppen angegeben werden, verhält sich die Buchung genau wie das BDE-Buchungs-Fenster.

Ein Abschließen einer Buchung zu einem gewünschten Zeitpunkt kann durch eine nachträgliche Veränderung der Buchung direkt im Anschluss erreicht werden.

Beschreibung

Die Funktion bucht die BDE-Zeiten der Mitarbeiter. Das Datenmodul muss von der Klasse "TDM_TMEdit" sein. Die Funktion muss in jedem Fall in einer Transaktion ausgeführt werden.

- Wird die Funktion ohne den Parameter cAPosNummer aufgerufen, wird eine Anwesenheits-Buchung zu Grunde gelegt.

- Wird die Funktion ohne Stop-Datum/Zeit aufgerufen, wird eine Kommen- bzw. Auftragsstart-Buchung durchgeführt.

- Wird die Funktion ohne Start-Datum/Zeit aufgerufen, wird eine Gehen- bzw. Auftragsende-Buchung durchgeführt.

Parameter

oDM_TMEdit:O | Datamodul-Objekt (Klasse: TDM_TMEdit)
nPersNr:N | Mitarbeiter-Nummer
dStartDatum:D | Start-Datum; default = leer
cStartZeit:C | Start-Zeit (erforderlich falls Start-Datum übergeben); default = Leerstring
dStopDatum:D | Stop-Datum; default = leer
cStopZeit:C | Stop-Zeit (erforderlich falls Stop-Datum übergeben); default = Leerstring
cAPosNummer:C | Kundenauftragsnr. (DAB050:ANUMMER) oder Prod.Auftr.Pos.Nr. (DAB240:B_POS_LFD); default = Leerstring
cTaetigkeit:C | Art.Nr. der Tätigkeit (erforderlich falls Kundenauftragsnr. übergeben); default = Leerstring
cTaetigTyp:C | Typ der Tätigkeit, S = Stundenabrechnung, G = Budgetzeit (erforderlich falls Tätigkeit übergeben); default = Leerstring
cKommentar:C | Kommentar zur Buchung; default = Leerstring
nFertigMenge:N | Gefertigte Stückzahl-Menge
lQuiet:L | Ressourcen-Auswahl-Dialog nicht anzeigen (default = False) / Exception auslösen

Rückgabewert

Keiner - Falls eine Buchung nicht durchgeführt werden kann, wird eine Exception ausgelöst

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Dieses Programm legt testweise mehrere BDE-Buchungen an.

//##############################################################################

//##############################################################################

| m_oDM, m_PostingPersNr |

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_PostingPersNr := 1, // Personalnummer der Person für die gebucht werden soll

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Diese Funktion legt ein Paar Beispielbuchungen auf Basis der angegebenen

// Testdaten an

//******************************************************************************

function PostingExamples(oDM)

| dADSNow, dStartDate, cStartTime, dEndDate, cEndTime |

   // Beispiel-Buchungszeitpunkte berechnen

   dADSNow    := GetADSServerTime(),                        // ACHTUNG: Für BDE-Buchungen immer die ADS-Zeit verwenden!

   dStartDate := STOD(FormatDateTime('YYYYMMDD', dADSNow)), // Start-Datum

   dEndDate   := STOD(FormatDateTime('YYYYMMDD', dADSNow)), // End-Datum

   // Beispiel-Buchungszeiten berechnen

   cStartTime := FormatDateTime('HH:NN:SS', dADSNow - 3/24), // Erste Start-Zeit = vor drei Stunden für die Nachbuchung

   cEndTime   := FormatDateTime('HH:NN:SS', dADSNow - 2/24), // Erste End-Zeit   = vor zwei Stunden für die Nachbuchung

   // Anwesenheitszeit nachbuchen

   BDEBuch(m_oDM, m_PostingPersNr, dStartDate, cStartTime, dEndDate, cEndTime), // Entspricht einer Nachbuchung im BDE-Nachbuchen-Fenster

   // Kommen buchen

   BDEBuch(m_oDM, m_PostingPersNr, dStartDate, ''), // Entspricht einer Kommen-Buchung im BDE-Buchen-Fenster

   // Gehen buchen

   BDEBuch(m_oDM, m_PostingPersNr, 0, '', dEndDate, ''), // Entspricht einer Gehen-Buchung im BDE-Buchen-Fenster

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

m_oDM := CreateObject('TDM_TMEdit', 'BDEBUCHDM'),

startseq

   PostingExamples(m_oDM),

always

   DestroyObject(m_oDM),

stopseq,

Siehe auch:

TBeBDEBusinessController


BDECheckRights()

BDECheckRights() – Überprüfung der BDE-Rechte

Beschreibung

Die Funktion prüft, ob für BDE-Buchungen die nötigen Rechte vorliegen. Dabei werden lokale Parameter des aktuellen Users und ggf. personen-spezifische Einstellungen im Personalstamm geprüft.

Parameter

cModus:C | Modus; N = Neuanlage; L = Löschen; V = Verändern; T = Text-Verändern
lCheckAnw:L | true: Prüfung für An-/Abwesenheitsbuchungen false: Prüfung für Auftragsbuchungen
nPersNo:N | Personalnummer; default = 0
dStartDate:D | Startdatum; default = 0
oDab262:O | Dab262; default = nil

Rückgabewert

Logisch / Boolean - angefragtes Recht vorhanden / nicht vorhanden

Beispiel

BDECheckRights('N', true)

Siehe auch:

BDEValidRights()


BDEDelete()

BDEDelete() – Löschen von Betriebsdaten-Buchungen

Hinweis

Diese Codeblockfunktion ist in Verbindung mit Fertigungsaufträgen ab Version 6.5.65 nicht mehr einsetzbar und gibt eine entsprechende Fehlermeldung aus. Für die Funktion stehen im Codeblock entsprechend leistungsfähigere Funktionen / Klassen zur Verfügung, mit denen die unter Version 6.5 neu eingeführten Funktionalitäten im Bereich der BDE / MDE genutzt werden können.

Beschreibung

Funktion zum Löschen von BDE-Zeiten. Das Datenmodul muss von der Klasse "TDM_TMEdit" sein. Die Funktion muss in einer Transaktion ausgeführt werden.

Parameter

oDM_TMEdit:O | Datamodul-Objekt (Klasse: "TDM_TMEdit")
nPersNr:N | Mitarbeiter-Nummer
dStartDatum:D | Start-Datum
cStartZeit:C | Start-Zeit
cAPosNummer:C | Kundenauftragsnr. (DAB050:ANUMMER) oder Prod.Auftr.Pos.Nr. (DAB240:B_POS_LFD); default = Leerstring

Rückgabewert

Keiner - falls eine Buchung nicht durchgeführt werden kann, wird eine Exception ausgelöst.

Beispiel

| oDM, oDab340 |

oDM     := CreateObject("TDM_TMEdit"),

oDab340 := DBGetTable(oDM, waDAB340),

DBStartTrans(oDM.AdsConnection),

startseq,

   // Auftragsbuchung löschen

   BDEDelete(oDM, 37, SToD("20060505"), "04:00", "102622"),

   // Anwesenheitsbuchung löschen

   BDEDelete(oDM, 37, SToD("20060505"), "04:00"),

   DBCommit(oDM.AdsConnection),

onerror,

   DBRollBack(oDM.AdsConnection),

   WriteLn('Err:' + ClassName(GetErrorObj()) + ':' + GetErrorText()),

stopseq,


BDEEdit()

BDEEdit() – Ändern von Betriebsdaten-Buchungen

Hinweis

Diese Codeblockfunktion ist in Verbindung mit Fertigungsaufträgen ab Version 6.5.65 nicht mehr einsetzbar und gibt eine entsprechende Fehlermeldung aus. Für die Funktion stehen im Codeblock entsprechend leistungsfähigere Funktionen / Klassen zur Verfügung, mit denen die unter Version 6.5 neu eingeführten Funktionalitäten im Bereich der BDE / MDE genutzt werden können.

Beschreibung

Funktion zum Editieren von BDE-Zeiten. Das Datenmodul muss von der Klasse "TDM_TMEdit" sein. Die Funktion muss in einer Transaktion ausgeführt werden.

Parameter

oDM_TMEdit:O | Datamodul-Objekt (Klasse: "TDM_TMEdit")
nPersNr:N | Mitarbeiter-Nummer
dStartDatum:D | Start-Datum
cStartZeit:C | Start-Zeit
cAPosNummer:C | Kundenauftragsnr. (DAB050:ANUMMER) oder Prod.Auftr.Pos.Nr. (DAB240:B_POS_LFD); default = leer

Rückgabewert

Keiner - falls eine Buchung nicht durchgeführt werden kann, wird eine Exception ausgelöst.

Beispiel

| oDM, oDab340 |

oDM     := CreateObject("TDM_TMEdit"),

oDab340 := DBGetTable(oDM, waDAB340),

DBStartTrans(oDM.AdsConnection),

startseq,

   // Anwesenheitsbuchung ändern

   BDEEdit(oDM, 37, SToD("20060505"), "02:45"),

   oDab340:S_ZEIT := "02:45",

   oDab340:E_ZEIT := "03:25",

   BDEPost( oDM ),

   // Auftragsbuchung ändern

   BDEEdit(oDM, 37, SToD("20060505"), "02:45", "102622  001"),

   oDab340:S_ZEIT := "02:40",

   oDab340:E_ZEIT := "03:25",

   BDEPost(oDM),

   DBCommit(oDM.AdsConnection),

onerror,

   DBRollBack(oDM.AdsConnection),

   WriteLn('Err:' + ClassName(GetErrorObj()) + ':' + GetErrorText()),

stopseq,


BDEMaDelete()

BDEMaDelete() – Mitarbeiter löschen

Beschreibung

Die Funktion löscht einen Mitarbeiter aus dem Personalstamm.

Parameter

oDM_TMEdit:O | Datamodul-Objekt (Klasse: "TDM_TMEdit")
nPersNr:N | Mitarbeiter-Nummer

Rückgabewert

Keiner

Beispiel

| oDM |

oDM := CreateObject('TDM_TMedit'),

startseq,

   DBStartTrans(oDM.ADSConnection),

   BDEMaDelete(oDM, 5),

   DBCommit(oDM.ADSConnection),

onerror,

   DBRollBack(oDM.ADSConnection),

   WriteLn('Err:' + ClassName(GetErrorObj()) + ':' + GetErrorText()),

stopseq,

Siehe auch:

BDEMaEdit()

BDEMaNew()

BDEMaPost()


BDEMaEdit()

BDEMaEdit() – Personalstamm editieren

Beschreibung

Die Funktion editiert einen Mitarbeiter im Personalstamm.

Parameter

oDM_TMEdit:O | Datamodul-Objekt (Klasse: "TDM_TMEdit")
nPersNr:N | Mitarbeiter-Nummer

Rückgabewert

Keiner

Beispiel

| oDM, oDAB262 |

oDM     := CreateObject('TDM_TMedit'),

oDAB262 := DBGetTable(oDM, waDAB262,),

startseq,

   DBStartTrans(oDM.ADSConnection),

   BDEMaEdit(oDM, 5),

   oDAB262:NAME := 'Josef Huber',

   BDEMAPost(oDM),

   DBCommit(oDM.ADSConnection),

onerror,

   DBRollBack(oDM.ADSConnection),

   WriteLn('Err:' + ClassName(GetErrorObj()) + ':' + GetErrorText()),

stopseq,

Siehe auch:

BDEMaDelete()

BDEMaNew()

BDEMaPost()


BDEMaNew()

BDEMaNew() – Neuer Mitarbeiter

Beschreibung

Die Funktion erstellt einen neuen Mitarbeiter im Personalstamm.

Parameter

oDM_TMEdit:O | Datamodul-Objekt (Klasse: "TDM_TMEdit")
nPersNr:N | Mitarbeiter-Nummer

Rückgabewert

Keiner

Beispiel

| oDM, oDAB262 |

oDM     := CreateObject('TDM_TMedit'),

oDAB262 := DBGetTable(oDM, waDAB262,),

startseq,

   DBStartTrans(oDM.ADSConnection),

   BDEMaNew(oDM, 5),

   oDAB262:NAME := 'Josef Huber',

   BDEMAPost(oDM),

   DBCommit(oDM.ADSConnection),

onerror,

   DBRollBack(oDM.ADSConnection),

   WriteLn('Err:' + ClassName(GetErrorObj()) + ':' + GetErrorText()),

stopseq,

Siehe auch:

BDEMaDelete()

BDEMaEdit()

BDEMaPost()


BDEMaPost()

BDEMaPost() – Speichern im Personalstamm

Beschreibung

Die Funktion speichert einen Datensatz im Personalstamm.

Parameter

oDM_TMPost:O

Datamodul-Objekt (Klasse: "TDM_TMEdit")

Rückgabewert

Keiner

Beispiel

Siehe BDEMaEdit(), BDEMaNew()

Siehe auch:

BDEMaDelete()

BDEMaEdit()

BDEMaNew()


BDEPausenSek()

BDEPausenSek() – Anzahl Pausen-Sekunden einer BDE-Buchung

Beschreibung

Die Funktion errechnet die Anzahl der Sekunden, die bei einer BDE-Buchung als Pause abgezogen werden.

Basis ist entweder die Pausen-Tabelle im Personalstamm / die Pausen der Produktionsabteilung oder die Pausen in der Buchung (DAB340:PAUSEN)

Parameter

oDM:O

Datenmodul, Tabelle Dab340 muss geöffnet und positioniert sein

Rückgabewert

Integer

Beispiel

// Beispiel aus dem Default-Updaterecht DAB340:PAUSEN_MIN

| nSecs, nResult |

if not Empty(DAB340:E_DATUM) then

   nSecs   := BDEPausenSek(GetOwner(Dab340)),   // DAB340 ist auf die Buchung positioniert

   nResult := nSecs / 60,

else

   nResult := PAUSEN_MIN,

endif,

nResult


BDEPost()

BDEPost() – Speichern von Betriebsdaten-Buchungen

Hinweis

Diese Codeblockfunktion ist in Verbindung mit Fertigungsaufträgen ab Version 6.5.65 nicht mehr einsetzbar und gibt eine entsprechende Fehlermeldung aus. Für die Funktion stehen im Codeblock entsprechend leistungsfähigere Funktionen / Klassen zur Verfügung, mit denen die unter Version 6.5 neu eingeführten Funktionalitäten im Bereich der BDE / MDE genutzt werden können.

Beschreibung

Funktion zum Speichern von BDE-Zeiten. Das Datenmodul muss von der Klasse "TDM_TMEdit". Es muss eine Transaktion aktiv sein.

Parameter

oDM_TMEdit:O | Datamodul-Objekt (Klasse: "TDM_TMEdit")
lCheckUserRights:L | Aktiviert/Deaktiviert beim Post CheckUserRights für die Dab340 default: false (ab 7.2)

Rückgabewert

Keiner - falls eine Buchung nicht durchgeführt werden kann, wird eine Exception ausgelöst.

Beispiel

| oDM, oDab340 |

oDM     := CreateObject("TDM_TMEdit"),

oDab340 := DBGetTable(oDM, waDAB340),

DBStartTrans(oDM.AdsConnection),

startseq,

   // Anwesenheitsbuchung ändern

   BDEEdit(oDM, 37, SToD("20060505"), "02:45"),

   oDab340:S_ZEIT := "02:45",

   oDab340:E_ZEIT := "03:25",

   BDEPost(oDM),

   // Auftragsbuchung ändern

   BDEEdit(oDM, 37, SToD("20060505"), "02:45", "102622"),

   oDab340:S_ZEIT := "02:40",

   oDab340:E_ZEIT := "03:25",

   BDEPost(oDM),

   DBCommit(oDM.AdsConnection),

onerror,

   DBRollBack(oDM.AdsConnection),

   WriteLn('Err:' + ClassName(GetErrorObj()) + ':' + GetErrorText()),

stopseq,


BDEValidRights()

BDEValidRights() – Prüfung der Validierungsrechte für BDE-Buchungen

Beschreibung

Die Funktion prüft die Validierungsrechte für BDE-Buchungen.

Parameter

cModus:C | Modus; N = Neuanlage; V = Verändern; T = Text-Verändern
lCheckAnw:L | true: Check ob für BE-User generell freigegeben false: Check ob für MA und Zeitraum freigegeben
nPersNo:N | Personalnummer
dStartDate:D | Startdatum
oDab262:O | Dab262; default = nil

Rückgabewert

Logisch / Boolean - Freigabe erteilt

Beispiel

| oDab262 |

if BDEValidRights('N', false, 20019, Now(), oDab262) then

   Meld('Valid'),

endif,

Siehe auch:

BDECheckRights()


Bed_Calc()

Bed_Calc() – Bedarfskalkulation

Beschreibung

Die Funktion berechnet ein Array mit zukünftigen Bedarfsmengen eines Artikels.

Hinweis

Bed_Calc() ist veraltet. Verwenden sie stattdessen die Funktion Bed_Calc2(). Bed_Calc() berücksichtigt die Werte der Absatzplanung im Gegensatz zu Bed_Calc2() nicht!

Parameter

oDab010:O | DAB010
oDab410:O | DAB410
oDab320:O | DAB320
oTmpTable:O | Temp.Bedarfstabelle (nur für Modi >= 3)
cArtNo:C | Art.Nr.
nPlanHor:N | Planungshorizont in Wochen
nMeUmr:N | ME-Umrechung
nMode:N | Modus (1=Handel, 2=Baugruppen, 3=SLAufl.Kauft, 4=SL-Aufl.Baugruppen)
lBrutto:L | Brutto-Bedarf (ohne Berücksichtigung existierender Zugänge u.ä.); default = false

Rückgabewert

Array - Array mit Bedarfsterminen und -mengen im Format:

{ { "KW.XX.XX", Menge }, { ... }, ... }

Beispiel

| oDab010, oDab410, oDab320, oTmpTable |

Bed_Calc(oDab010, oDab410, oDab320, oTmpTable, 'F76-X8K', 4, 1, 1, true)

Siehe auch:

Bed_Calc2()


Bed_Calc2()

Bed_Calc2() – Bedarfskalkulation

Beschreibung

Die Funktion berechnet ein Array mit zukünftigen Bedarfsmengen eines Artikels.

Parameter

oDM:O | Container-Objekt (TBeDBGetTable)
oTmpTable:O | Temp.Bedarfstabelle (nur für Modi >= 3)
cArtNo:C | Art.Nr.
nPlanHor:N | Planungshorizont in Wochen
nMeUmr:N | ME-Umrechung
nMode:N | Modus (1=Handel, 2=Baugruppen, 3=SLAufl.Kauft, 4=SL-Aufl.Baugruppen)
lBrutto:L | Brutto-Bedarf (ohne Berücksichtigung existierender Zugänge u.ä.); default = false
nForecastMode | Modus; default = 0; 0 = Entsprechend Einstellung im Artikelstamm; 1 = Konventionelle Methode; 2 = nach Absatzplanungsmethode (nur wenn Absatzplanung in DAB010 auf Budgetierung oder Ja steht)

Rückgabewert

Array - Array mit Bedarfsterminen und -mengen im Format:

{ { "KW.XX.XX", Menge }, { ... }, ... }

Beispiel

| oDm |

// Netto-Fertigungs-Primärbedarf ermitteln

oDm := CreateObject("TBeDBGet"),

Bed_Calc2(oDM, nil(), "RT_BG1", 10, 1, 2, false, 1)

Siehe auch:

Bed_Calc()


BeImageList()

BeImageList() – Kurzbeschreibung

Beschreibung

Die Funktion ermöglicht den Zugriff auf die internen Imagelist-Objekte von be.

Hinweis

Als Parameter können die folgende Konstanten eingesetzt werden:

nImageListMain16 Imageliste für Bilder im Format 16x16; Standard

nImageListIndi16 Imageliste für Bilder im Format 16x16; individuell definierbarer Inhalt

nImageListMain24 Imageliste für Bilder im Format 24x24; Standard

nImageListMain32 Imageliste für Bilder im Format 32x32; Standard

Parameter

nImageList:N

Nummer der Imageliste

Rückgabewert

Imagelist-Objekt

Beispiel

BeImageList(nImageListMain16) // Standard-Imageliste von be

Siehe auch:

AttribImageInfo()


BEMessageDlgEx()

BEMessageDlgEx() – Meldungsdialog (erweitert)

Beschreibung

Die Funktion ermöglicht die Dialogabfrage einer Meldung und gibt einen entsprechenden Wert zurück.

Parameter

Msg:C | Meldungstext
DlgType:N | Dialogtyp: 0 – Warnung; 1 – Fehler; 2 – Information; 3 – Bestätigung/Frage; 4 – BE-Programmierung
Buttons:A | Array mit Buttonbeschriftung
Results:A | Numerisches Array mit Buttonergebnis
DefaultResult:N | Default-Ergebnis/Auswahl
CancelResult:N | Ergebnis bei Abbruch

Rückgabewert

Numersich - Kennziffer des gedrückten Buttons bzw. Abbruch-Ergebnis

Beispiel

BeMessageDlgEx('Fehler! Wie soll weiter verfahren werden?', 3,

               {'Wiederholen', 'Ignorieren', 'Abbrechen'}, {1, 2, 4}, 3, 4)

Siehe auch:

MessageDlg()


BEPrintConfig()

BEPrintConfig() – Druckerzuweisungen anzeigen/ändern

Beschreibung

Die Funktion öffnet das Fenster "Druckerzuweisungen".

Parameter

aShowModal:L

Modale Anzeige; default = true

true: Fenster wird modal angezeigt

false: Verarbeitung des Codeblocks läuft weiter (nicht modal)

Rückgabewert

keiner

Beispiel

BEPrintConfig(true)

Siehe auch:

BEPrintDoc()


BEPrintDoc()

BEPrintDoc() – Belegdruck

Beschreibung

Die Funktion führt für eine Belegart und eine Beleg-Nummer den Belegdruck aus.

Parameter

aDocType:N | Bestimmt den Belegtyp, der gedruckt werden soll; DT_ANGE Angebot; DT_AUFB Auftragsbestätigung; DT_AUFS Service-Anforderung; DT_PRRE Proformarechnung; DT_KOMM Kommissionierschein; DT_LIEF Lieferschein; DT_SALI Sammellieferschein; DT_VMLI Mietlieferschein; DT_VMRU Mietrückgabe; DT_RECH Rechnung; DT_TLRE Teilrechnung; DT_ABRE Abschlagsrechnung; DT_SARE Sammelrechnung; DT_VMZW Mietzwischenrechnung; DT_MAHN Mahnung; DT_PRAN Preisanfrage; DT_BEST Bestellung; DT_ABEI Abrufeinteilung; DT_BEMA Bestellmahnung
aNo:U | Nummer des Beleges bzw. Kunden- oder Lieferanten-Nr. In den meisten Fällen kann 0 übergeben werden, um das Belegauswahlfenster anzeigen zu lassen; default = 0
aPrintDlg:L | Anzeige des Druckauswahlfensters; default = true
aModal:L | Modale Anzeige (bei Angabe von aNo:U hat dieser Parameter keine Wirkung); default = true true: Fenster wird modal angezeigt false: Verarbeitung des Codeblocks läuft weiter (nicht modal)

Rückgabewert

Numerisch - Handle des Fensters wenn aModal:L = false ansonsten Null

Beispiel

BEPrintDoc(DT_ANGE, 0, true, false)

Siehe auch:

BEPrintConfig()


BERemoteClientStart()

BERemoteClientStart() – BE Remote-Client

Beschreibung

Eine BE-Applikation wird als Client-Exe aktiviert.

Die Funktionen BeRemoteServerStart( nPortNr ), BeRemoteServerStop( nPortNr ), BeRemoteClientStart( cRemoteHost, nRemotePort ), BeRemoteClientStop( cRemoteHost, nRemotePort ), BeRemoteExecute( cRemoteHost, nRemotePort, cCodeblock, [lAntw] ) dienen zum Ausführen eines Codeblocks auf einem entfernten Rechner (oder einfach einer anderen BE-Instanz).

Als "Server-Exe" wird die Exe verstanden, auf der ein BeRemoteServerStart() ausgeführt wurde.

Die Client-Exe muss die IP-Adresse oder den Namen des PC, sowie den Port der Server-Exe kennen (sprich: als Parameter in den entsprechenden Funktionen übergeben bekommen).

Zum Ablauf:

Eine BE-Applikation wird als Server-Exe aktiviert (durch Aufruf von BeRemoteServerStart()).

Die Server-Exe wartet jetzt im Hintergrund auf den Empfang einer Sendung einer Client-Exe.

Eine BE-Applikation wird als Client-Exe aktiviert (durch Aufruf von BeRemoteClientStart()).

Die Aktivierung ist nur möglich, wenn die Server-Exe bereits aktiviert wurde!

Die Client-Exe ist jetzt bereit einen Codeblock durch Aufruf von BeRemoteExecute() an die Server-Exe zu senden.

Kommt eine Sendung bei der Server-Exe an, wird der gesendete Codeblock sofort ausgeführt und das Ergebnis als Antwort ggf. zurückgesendet (falls lAntw = True).

Die Client-Exe wartet max. nTimeOut Sekunden (0 = unbegrenzt) auf die Antwort der Server-Exe.

Zu beachten:

Die Kommunikation erfolgt über IP.

Die gemeinsame Port-Nr. dient zur gegenseitigen Identifizierung der Exen.

Die Port-Nr. sollte in einem Bereich zwischen 50000 und 64000 liegen, um Konflikte mit der BE-Funkscanner-Kommunikation zu vermeiden.

Eine BE-Applikation kann gleichzeitig als Server- und Client-Exe aktiviert werden.

Server- und Client-Exe können sich auf dem gleichen PC befinden (müssen sie aber nicht).

Parameter

cRemoteHost:C | IP-Adresse bzw. Name des PC auf dem die Server-Exe läuft
nRemotePort:N | Port-Nr. des PC auf dem die Server-Exe "horcht"

Rückgabewert

Keiner

Beispiel

| cServer |

cServer := 'be-neu', // oder z.B.: 192.168.1.1

startseq,

   BeRemoteClientStart(cServer, 55300),

   if BeRemoteExecute(cServer, 55300, 'JN("Alles klar?")', true) then

// Auf Bestätigung der Meldung warten und Ergebnis interpretieren

      Meld("Es war alles klar!"),

   endif,

// Ergebnis nicht abwarten

   BeRemoteExecute('be-wxp', 55300, 'Call("ServerIndiProg", 4711)', false)

onerror,

   WriteLn('ERROR: ' + GetErrorText()),

stopseq,

BeRemoteClientStop(cServer, 55300),


BERemoteClientStop()

BERemoteClientStop() – BE Remote-Client

Beschreibung

Eine BE-Applikation wird als Client-Exe gestoppt.

Die Funktionen BeRemoteServerStart( nPortNr ), BeRemoteServerStop( nPortNr ), BeRemoteClientStart( cRemoteHost, nRemotePort ), BeRemoteClientStop( cRemoteHost, nRemotePort ), BeRemoteExecute( cRemoteHost, nRemotePort, cCodeblock, [lAntw] ) dienen zum Ausführen eines Codeblocks auf einem entfernten Rechner (oder einfach einer anderen BE-Instanz).

Als "Server-Exe" wird die Exe verstanden, auf der ein BeRemoteServerStart() ausgeführt wurde.

Die Client-Exe muss die IP-Adresse oder den Namen des PC, sowie den Port der Server-Exe kennen (sprich: als Parameter in den entsprechenden Funktionen übergeben bekommen).

Zum Ablauf:

Eine BE-Applikation wird als Server-Exe aktiviert (durch Aufruf von BeRemoteServerStart()).

Die Server-Exe wartet jetzt im Hintergrund auf den Empfang einer Sendung einer Client-Exe.

Eine BE-Applikation wird als Client-Exe aktiviert (durch Aufruf von BeRemoteClientStart()).

Die Aktivierung ist nur möglich, wenn die Server-Exe bereits aktiviert wurde!

Die Client-Exe ist jetzt bereit einen Codeblock durch Aufruf von BeRemoteExecute() an die Server-Exe zu senden.

Kommt eine Sendung bei der Server-Exe an, wird der gesendete Codeblock sofort ausgeführt und das Ergebnis als Antwort ggf. zurückgesendet (falls lAntw = True).

Die Client-Exe wartet max. nTimeOut Sekunden (0 = unbegrenzt) auf die Antwort der Server-Exe.

Zu beachten:

Die Kommunikation erfolgt über IP.

Die gemeinsame Port-Nr. dient zur gegenseitigen Identifizierung der Exen.

Die Port-Nr. sollte in einem Bereich zwischen 50000 und 64000 liegen, um Konflikte mit der BE-Funkscanner-Kommunikation zu vermeiden.

Eine BE-Applikation kann gleichzeitig als Server- und Client-Exe aktiviert werden.

Server- und Client-Exe können sich auf dem gleichen PC befinden (müssen sie aber nicht).

Parameter

cRemoteHost:C | IP-Adresse bzw. Name des PC auf dem die Server-Exe läuft
nRemotePort:N | Port-Nr. des PC auf dem die Server-Exe "horcht"

Rückgabewert

Keiner

Beispiel

| cServer |

cServer := 'be-neu', // oder z.B.: 192.168.1.1

startseq,

   BeRemoteClientStart(cServer, 55300),

   if BeRemoteExecute(cServer, 55300, 'JN("Alles klar?")', true) then

// Auf Bestätigung der Meldung warten und Ergebnis interpretieren

      Meld("Es war alles klar!"),

   endif,

// Ergebnis nicht abwarten

   BeRemoteExecute('be-wxp', 55300, 'Call("ServerIndiProg", 4711)', false)

onerror,

   WriteLn('ERROR: ' + GetErrorText()),

stopseq,

BeRemoteClientStop(cServer, 55300),


BERemoteExecute()

BERemoteExecute() – BE Remote-Client

Beschreibung

Die Client-Exe fordert die Ausführung eines Codeblock Aufrufs auf der Server-Exe an.

Die Funktionen BeRemoteServerStart( nPortNr ), BeRemoteServerStop( nPortNr ), BeRemoteClientStart( cRemoteHost, nRemotePort ), BeRemoteClientStop( cRemoteHost, nRemotePort ), BeRemoteExecute( cRemoteHost, nRemotePort, cCodeblock, [lAntw] ) dienen zum Ausführen eines Codeblocks auf einem entfernten Rechner (oder einfach einer anderen BE-Instanz).

Als "Server-Exe" wird die Exe verstanden, auf der ein BeRemoteServerStart() ausgeführt wurde.

Die Client-Exe muss die IP-Adresse oder den Namen des PC, sowie den Port der Server-Exe kennen (sprich: als Parameter in den entsprechenden Funktionen übergeben bekommen).

Zum Ablauf:

Eine BE-Applikation wird als Server-Exe aktiviert (durch Aufruf von BeRemoteServerStart()).

Die Server-Exe wartet jetzt im Hintergrund auf den Empfang einer Sendung einer Client-Exe.

Eine BE-Applikation wird als Client-Exe aktiviert (durch Aufruf von BeRemoteClientStart()).

Die Aktivierung ist nur möglich, wenn die Server-Exe bereits aktiviert wurde!

Die Client-Exe ist jetzt bereit einen Codeblock durch Aufruf von BeRemoteExecute() an die Server-Exe zu senden.

Kommt eine Sendung bei der Server-Exe an, wird der gesendete Codeblock sofort ausgeführt und das Ergebnis als Antwort ggf. zurückgesendet (falls lAntw = True).

Die Client-Exe wartet max. nTimeOut Sekunden (0 = unbegrenzt) auf die Antwort der Server-Exe.

Zu beachten:

Die Kommunikation erfolgt über IP.

Die gemeinsame Port-Nr. dient zur gegenseitigen Identifizierung der Exen.

Die Port-Nr. sollte in einem Bereich zwischen 50000 und 64000 liegen, um Konflikte mit der BE-Funkscanner-Kommunikation zu vermeiden.

Eine BE-Applikation kann gleichzeitig als Server- und Client-Exe aktiviert werden.

Server- und Client-Exe können sich auf dem gleichen PC befinden (müssen sie aber nicht).

Parameter

cRemoteHost:C | IP-Adresse bzw. Name des PC auf dem die Server-Exe läuft
nRemotePort:N | Port-Nr. des PC auf dem die Server-Exe "horcht"
cCodeblock:C | In der Server-Exe auszuführender Codeblock
lAntw:L | auf Antwort der Server-Exe warten; default = true
nTimeOut:N | Max.Anzahl Sekunden, die auf die entfernte Ausführung gewartet wird. 0 = unbegrenzt; default = 0
lAbbrErl:L | Manueller Abbruch erlaubt; default = true

Rückgabewert

Undefined - Falls lAntw = True, Ergebnis des Codeblockes, sonst keiner

Beispiel

| cServer |

cServer := 'be-neu', // oder z.B.: 192.168.1.1

startseq,

   BeRemoteClientStart(cServer, 55300),

   if BeRemoteExecute(cServer, 55300, 'JN("Alles klar?")', true) then

// Auf Bestätigung der Meldung warten und Ergebnis interpretieren

      Meld("Es war alles klar!"),

   endif,

// Ergebnis nicht abwarten

   BeRemoteExecute('be-wxp', 55300, 'Call("ServerIndiProg", 4711)', false)

onerror,

   WriteLn('ERROR: ' + GetErrorText()),

stopseq,

BeRemoteClientStop(cServer, 55300),


BERemoteServerStart()

BERemoteServerStart() – BE Remote-Client

Beschreibung

Eine BE-Applikation wird als Server-Exe aktiviert.

Die Funktionen BeRemoteServerStart( nPortNr ), BeRemoteServerStop( nPortNr ), BeRemoteClientStart( cRemoteHost, nRemotePort ), BeRemoteClientStop( cRemoteHost, nRemotePort ), BeRemoteExecute( cRemoteHost, nRemotePort, cCodeblock, [lAntw] ) dienen zum Ausführen eines Codeblocks auf einem entfernten Rechner (oder einfach einer anderen BE-Instanz).

Als "Server-Exe" wird die Exe verstanden, auf der ein BeRemoteServerStart() ausgeführt wurde.

Die Client-Exe muss die IP-Adresse oder den Namen des PC, sowie den Port der Server-Exe kennen (sprich: als Parameter in den entsprechenden Funktionen übergeben bekommen).

Zum Ablauf:

Eine BE-Applikation wird als Server-Exe aktiviert (durch Aufruf von BeRemoteServerStart()).

Die Server-Exe wartet jetzt im Hintergrund auf den Empfang einer Sendung einer Client-Exe.

Eine BE-Applikation wird als Client-Exe aktiviert (durch Aufruf von BeRemoteClientStart()).

Die Aktivierung ist nur möglich, wenn die Server-Exe bereits aktiviert wurde!

Die Client-Exe ist jetzt bereit einen Codeblock durch Aufruf von BeRemoteExecute() an die Server-Exe zu senden.

Kommt eine Sendung bei der Server-Exe an, wird der gesendete Codeblock sofort ausgeführt und das Ergebnis als Antwort ggf. zurückgesendet (falls lAntw = True).

Die Client-Exe wartet max. nTimeOut Sekunden (0 = unbegrenzt) auf die Antwort der Server-Exe.

Zu beachten:

Die Kommunikation erfolgt über IP.

Die gemeinsame Port-Nr. dient zur gegenseitigen Identifizierung der Exen.

Die Port-Nr. sollte in einem Bereich zwischen 50000 und 64000 liegen, um Konflikte mit der BE-Funkscanner-Kommunikation zu vermeiden.

Eine BE-Applikation kann gleichzeitig als Server- und Client-Exe aktiviert werden.

Server- und Client-Exe können sich auf dem gleichen PC befinden (müssen sie aber nicht).

Parameter

nRemotePort:N

Port-Nr. auf dem die Server-Exe "horchen" soll

Rückgabewert

Keiner

Beispiel

startseq,

   BeRemoteServerStart(55300),

onerror,

   WriteLn('ERROR: ' + GetErrortext()),

stopseq,


BERemoteServerStop()

BERemoteServerStop() – BE Remote-Client

Beschreibung

Eine Remote Server-Exe wird angehalten.

Die Funktionen BeRemoteServerStart( nPortNr ), BeRemoteServerStop( nPortNr ), BeRemoteClientStart( cRemoteHost, nRemotePort ), BeRemoteClientStop( cRemoteHost, nRemotePort ), BeRemoteExecute( cRemoteHost, nRemotePort, cCodeblock, [lAntw] ) dienen zum Ausführen eines Codeblocks auf einem entfernten Rechner (oder einfach einer anderen BE-Instanz).

Als "Server-Exe" wird die Exe verstanden, auf der ein BeRemoteServerStart() ausgeführt wurde.

Die Client-Exe muss die IP-Adresse oder den Namen des PC, sowie den Port der Server-Exe kennen (sprich: als Parameter in den entsprechenden Funktionen übergeben bekommen).

Zum Ablauf:

Eine BE-Applikation wird als Server-Exe aktiviert (durch Aufruf von BeRemoteServerStart()).

Die Server-Exe wartet jetzt im Hintergrund auf den Empfang einer Sendung einer Client-Exe.

Eine BE-Applikation wird als Client-Exe aktiviert (durch Aufruf von BeRemoteClientStart()).

Die Aktivierung ist nur möglich, wenn die Server-Exe bereits aktiviert wurde!

Die Client-Exe ist jetzt bereit einen Codeblock durch Aufruf von BeRemoteExecute() an die Server-Exe zu senden.

Kommt eine Sendung bei der Server-Exe an, wird der gesendete Codeblock sofort ausgeführt und das Ergebnis als Antwort ggf. zurückgesendet (falls lAntw = True).

Die Client-Exe wartet max. nTimeOut Sekunden (0 = unbegrenzt) auf die Antwort der Server-Exe.

Zu beachten:

Die Kommunikation erfolgt über IP.

Die gemeinsame Port-Nr. dient zur gegenseitigen Identifizierung der Exen.

Die Port-Nr. sollte in einem Bereich zwischen 50000 und 64000 liegen, um Konflikte mit der BE-Funkscanner-Kommunikation zu vermeiden.

Eine BE-Applikation kann gleichzeitig als Server- und Client-Exe aktiviert werden.

Server- und Client-Exe können sich auf dem gleichen PC befinden (müssen sie aber nicht).

Parameter

nRemotePort:N

Port-Nr. auf dem die Server-Exe "horchen" soll

Rückgabewert

Keiner

Beispiel

startseq,

   BeRemoteServerStop(55300),

onerror,

   WriteLn('ERROR: ' + GetErrortext()),

stopseq,


BestPlanAuto()

BestPlanAuto() – Dispo-Planung

Beschreibung

Automatische Dispo-Planung starten. Tabelle "Einkauf Dispo Planung" (DAB315) wird mit Bestellvorschlägen gefüllt.

Parameter

nLiefNr:N | Lieferantennummer
lLoeschPlan:L | DAB315 vor Beginn löschen

Rückgabewert

keiner

Beispiel

BestPlanAuto(4711, false),


BestPlanClear()

BestPlanClear() – Dispo-Planung

Beschreibung

Die Funktion dient dem Löschen von Dispo-Datensätzen inklusive assoziierter Grob-Planung.

Parameter

oDM:O | Datenmodul, Container-Objekt (TBeDBGetTable)
nWorkArea:N | Workarea. Nur DAB315, DAB320, DAB220 und DAB215 zulässig
cFilter:C | Filter; default = Leerstring

Rückgabewert

keiner

Beispiel

| oDm |

oDm := CreateObject("TBeDBGet"),

BestPlanClear(oDM, waDAB315),


BestPosBuch()

BestPosBuch() – Bestellrückstandsbuchung

Beschreibung

Funktion zur automatischen Bestell-Rückstandsbuchung.

Wird eine Bestell-Nr. übergeben, wird der entsprechende Bestell-Rückstand verbucht und ggf. die Restbestellung gelöscht, falls der entsprechende Parameter gesetzt wurde.

Wird keine Bestell-Nr. übergeben, wird eine Buchung ohne Rückstand durchgeführt und ggf. offene Rückstände aufgelöst, falls der entsprechende Parameter gesetzt wurde.

Hinweis

Die Funktion ist veraltet. Verwenden Sie stattdessen BestposBuch2().

Parameter

oConnect:O | Connection (erforderlich, leer erlaubt, Transaktion wird ggf. automatisch durchgeführt)
nLiefNr:N | Lieferantennummer
cArtNr:C | Artikelnummer (erforderlich, leer erlaubt, falls Bestell-Nr./-Pos. übergeben wird)
nZugMengeEK:N | Zug. Menge in EK-Einh.
nZugMengeLAG:N | Zug. Menge in Lager-Einh.
dZugDatum:D | Zug. Datum
cLager:C | Zug. Lager; default = Leerstring
nBestNr:N | Bestell-Nr.; default = 0
nBestPos:N | Bestell-Pos.; default = 0
cBestTermin:C | Termin; default = Leerstring
cBestKommiss:C | Kommission ; default = Leerstring
cBelegNr:C | Belegnummer; default = Leerstring
lRueckAufloes:L | Automatische Bestell. Rückstandsauflösung; default = false falls Bestell-Nr. leer ist und für den Lieferanten keine Rückstände vorliegen, wird ggf. ein Dialog angezeigt mit anderen Lieferanten welche Bestellrückstände für diesen Artikels besitzen
lRestLoesch:L | Rest-Bestellung Löschen; default = false
lAbrufErh:L | Abruf-Bestellung um Diff. erhöhen; default = false
lKdAuftrAuloes:L | Dialog Kunden-Rückstände auflösen anzeigen; default = false
lEtikDruck:L | Art.Etik. drucken; default = false
oDab000:O | Tabellenobjekt DAB000; default = nil
oDab010:O | Tabellenobjekt DAB010; default = nil
oDab055:O | Tabellenobjekt DAB055; default = nil
oDab050:O | Tabellenobjekt DAB050; default = nil
oDab100:O | Tabellenobjekt DAB100; default = nil
oDab240:O | Tabellenobjekt DAB240; default = nil
oDab510:O | Tabellenobjekt DAB510; default = nil
oDab520:O | Tabellenobjekt DAB520; default = nil
oDab020:O | Tabellenobjekt DAB020; default = nil;
oDab035:O | Tabellenobjekt DAB035; default = nil;
oDab110:O | Tabellenobjekt DAB110; default = nil
oDab235:O | Tabellenobjekt DAB235; default = nil
oDab310:O | Tabellenobjekt DAB310; default = nil
oDab410:O | Tabellenobjekt DAB410; default = nil
oDab610:O | Tabellenobjekt DAB610; default = nil
oDab710:O | Tabellenobjekt DAB710; default = nil
oDab720:O | Tabellenobjekt DAB720; default = nil
oDab730:O | Tabellenobjekt DAB730; default = nil
oDab910:O | Tabellenobjekt DAB910; default = nil
aKomissDetail:A | Detailierte Kommissionsnr.-Information (wichtig für Lagerplatzbuchung!) {Kommiss, WEMenge, Lagerplatz}; default = leer
oDab160:O | Tabellenobjekt DAB160; default = nil
dLiefDatum:D | Lieferungsdatum; default = aktuelles Datum
lProdFreigabe:L | Produktions-Freigabe Dialog anzeigen; default = true
lQuiet:L | keine Meldungen anzeigen; default = false
nDab035_ID:N | ID des Dab035-Datensatzes (übersteuert die Verwendung von nBestNr und nBestPos); default = 0 = Parameter wird ignoriert

Hinweis

lQuiet übersteuert nicht folgende Parameter welche ggf. wieder Meldungen und Dialoge anzeigen können

&#183 lRueckAufloes

&#183 lEtikDruck

&#183 lProdFreigabe

Rückgabewert

Alphanumerisch - Dispo-Nr.

Beispiel

| oADSConnection |

BestPosBuch(oADSConnection, 60052, 'XF7-GX-T', 5, 10, Now()+1),

Siehe auch:

BestPosBuch2()


BestPosBuch2()

BestPosBuch2() – Bestellrückstandsbuchung

Beschreibung

Funktion zur automatischen Bestell-Rückstandsbuchung.

Wird eine Bestell-Nr. übergeben, wird der entsprechende Bestell-Rückstand verbucht und ggf. die Restbestellung gelöscht, falls der entsprechende Parameter gesetzt wurde.

Wird keine Bestell-Nr. übergeben, wird eine Buchung ohne Rückstand durchgeführt und ggf. offene Rückstände aufgelöst, falls der entsprechende Parameter gesetzt wurde.

Parameter

oDM:O | Datamodul
nLiefNr:N | Liefernummer
nID:N | ID der DAB035
cArtNr:C | Artikelnummer (erforderlich, leer erlaubt, falls Bestell Nr./-Pos. übergeben wird)
nZugMengeEK:N | Zugangsmenge Wareneingang
nZugMengeLAG:N | Zugangsmenge Lager
dZugDatum:D | Zug. Datum
cLager:C | Zug. Lager
nBestNr:N | Bestell-Nr.
nBestPos:N | Bestell-Pos.
cBestTermin:C | Termin
cBestKommiss:C | Kommission
cBelegNr:C | Belegnummer
lRueckAufloes:L | Automatische Bestell. Rückstandsauflösung; default = false falls Bestell-Nr. leer ist und für den Lieferanten keine Rückstände vorliegen, wird ggf. ein Dialog angezeigt mit anderen Lieferanten welche Bestellrückstände für diesen Artikels besitzen
lRestLoesch:L | Rest-Bestellung Löschen
lAbrufErh:L | Abruf-Bestellung um Diff. erhöhen
lKdAuftrAuloes:L | Dialog Kunden-Rückstände auflösen anzeigen
lEtikDruck:L | Art.Etik. drucken
aKomissDetail:A | Detailierte Kommissionsnr.-Information (wichtig für Lagerplatzbuchung!) {Kommiss, WEMenge, Lagerplatz}
dLiefDatum:D | Lieferungsdatum
lProdFreigabe:L | Produktions-Freigabe Dialog anzeigen; default = true
lQuiet:L | keine Meldungen anzeigen; default = false

Hinweis

lQuiet übersteuert nicht folgende Parameter welche ggf. wieder Meldungen und Dialoge anzeigen können

&#183 lRueckAufloes

&#183 lEtikDruck

&#183 lProdFreigabe

Rückgabewert

Alphanumerisch - Dispo-Nr.

Beispiel

| oDM, aKommiss, oDAB035 |

oDM      := CreateObject('TBeDBget'),

oDAB035  := DBGetTable(oDM, waDAB035,),

aKommiss := {'123456', 5, 'PLATZ1'},

startseq,

   DBStartTrans(oDM.ADSConnection),

   BestPosBuch2(oDM, 1, oDAB035:ID, 'Testartikel1', oDAB035:MENGE, 5, Date(),

                '0', '23.08.2006', '123456', '1369', , , , , , aKommiss, Date()),

   DBCommit(oDM.ADSConnection),

onerror,

   DBRollBack(oDM.ADSConnection),

   Meld(GetErrorText()),

stopseq,

Siehe auch:

BestPosBuch()


BestPosDelete()

BestPosDelete() – Bestellrückstand löschen

Beschreibung

Die Funktion löscht einen Bestellrückstand.

Parameter

oDM:O | Datamodul
nRedID | ID des DAB035 Satzes

Rückgabewert

keiner

Beispiel

| oDM, oDAB035, oDAB010, nID |

oDM      := CreateObject('TBeDBget'),

oDAB035  := DBGetTable(oDM, waDAB035,),

nID      := 528806,

startseq,

   DBStartTrans(oDM.ADSConnection),

   oDAB010 := DBGetTable(oDM, 2,),

   DBSeek(lookup(13, 'DAB03D', {{nID}}, "ARTNR"), oDAB010),

   BestPosDelete(oDM, nID),

   DBCommit(oDM.ADSConnection),

onerror,

   DBRollBack(oDM.ADSConnection),

   Meld(GetErrorText()),

stopseq,


BestPosEdit()

BestPosEdit() – Bestellrückstand editieren

Beschreibung

Die Funktion versetzt einen Bestellrückstand in den Änderungsmodus.

Parameter

oDM:O | Datenmodul
nRecID | ID des DAB035 Satzes

Rückgabewert

Keiner

Beispiel

| oDM, oDAB035, oDAB010, nID |

oDM      := CreateObject('TBeDBget'),

oDAB035  := DBGetTable(oDM, waDAB035,),

nID      := 528806,

startseq,

   DBStartTrans(oDM.ADSConnection),

   oDAB010 := DBGetTable(oDM, waDAB010,),

   DBSeek(lookup(waDAB035, 'DAB03D', {{nID}}, "ARTNR"), oDAB010),

   BestPosEdit(oDM, nID),

   oDAB035:MENGE := 5,

   BestPosPost(oDM, nID),

   DBCommit(oDM.ADSConnection),

onerror,

   DBRollBack(oDM.ADSConnection),

   Meld(GetErrorText()),

stopseq,


BestPosNew()

BestPosNew() – Neuer Bestellrückstand

Beschreibung

Die Funktion erzeugt einen neuen Bestellrückstand.

Parameter

oDM:O | Datenmodul
nLiefNr:N | Lieferantennummer
nBestNr:N | Bestellnummer
cArtNr:C | Artikelnummer
lKeepInsert:L | Nach dem Erstellen im Bearbeitungsmodus bleiben; default = false
lQuiet:L | keine Meldungen anzeigen; default = false

Rückgabewert

Numerisch - RecID des erstellten Bestellrückstands

Beispiel

| oDM, aKommiss, oDAB035, nID |

oDM      := CreateObject('TBeDBget'),

oDAB035  := DBGetTable(oDM, waDAB035,),

startseq,

   DBStartTrans(oDM.ADSConnection),

   nID := BestPosNew(oDM, 1, 10010, 'TESTARTIKEL1', true),

   oDAB035:MENGE := 10,

   BestPosPost(oDM, nID),

   DBCommit(oDM.ADSConnection),

onerror,

   DBRollBack(oDM.ADSConnection),

   Meld(GetErrorText()),

stopseq,


BestPosPost()

BestPosPost() – Bestellrückstand speichern

Beschreibung

Die Funktion speichert einen im Änderungsmodus befindlichen Bestellrückstand.

Hinweis

Artikelstammtabelle (DAB010) muss manuell positioniert werden!

Parameter

oDM:O | Datenmodul
nRecID:N | ID des DAB035 Satzes

Rückgabewert

keiner

Beispiel

| oDM, oDAB035, oDAB010, nID |

oDM      := CreateObject('TBeDBget'),

oDAB035  := DBGetTable(oDM, waDAB035,),

nID      := 528806,

startseq,

   DBStartTrans(oDM.ADSConnection),

   oDAB010 := DBGetTable(oDM, waDAB010,),

   DBSeek(lookup(waDAB035, 'DAB03D', {{nID}}, "ARTNR"), oDAB010),

   BestPosEdit(oDM, nID),

   oDAB035:MENGE := 5,

   BestPosPost(oDM, nID),

   DBCommit(oDM.ADSConnection),

onerror,

   DBRollBack(oDM.ADSConnection),

   Meld(GetErrorText()),

stopseq,


BeUserEmailAddress

BeUserEmailAddress() – E-Mail Adresse eines Benutzers

Beschreibung

Die Funktion gibt die E-Mail Adresse zu einer Benutzer-Nummer zurück.

Hinweis

Ist kein Benutzername hinterlegt oder wird der Benutzer nicht gefunden, ist die Rückgabe immer "".

Parameter

aUserNo:U

Benutzernummer (numerisch oder alphanumerisch)

Default = aktueller Benutzer

Rückgabewert

Alphanumerisch – E-Mail Adresse

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: E-Mail Adresse und Anzeigenamen aller be-User anzeigen

//##############################################################################

//##############################################################################

| m_oDabFIL, m_cUserNo |

m_oDabFil := BeOpen(waDABFIL, 'DABFIL'),

startseq

   m_oDabFil.Filter   := "DATEI = 999 AND CONTAINS(FELD,'__USR__*')",

   m_oDabFil.Filtered := True,

   DbGoTop(m_oDabFil),

   while not Eof(m_oDabFil) do

      m_cUserNo := Right(m_oDabFil:FELD, 3),

      writeln(m_cUserNo, BeUserEmailDisplayName(m_cUserNo) + '<' + BeUserEmailAddress(m_cUserNo) + '>'),

      DbSkip(1, m_oDabFil),

   end,

always

   BeClose(m_oDabFil),

stopseq,

Siehe auch:

BeUserEmailDisplayName


BeUserEmailDisplayName

BeUserEmailDisplayName() – E-Mail Anzeigename eines Benutzers

Beschreibung

Die Funktion gibt den E-Mail Anzeigenamen zu einer Benutzer-Nummer zurück.

Hinweis

Ist kein Benutzername hinterlegt oder wird der Benutzer nicht gefunden, ist die Rückgabe immer "".

Parameter

aUserNo:U

Benutzernummer (numerisch oder alphanumerisch)

Default = aktueller Benutzer

Rückgabewert

Alphanumerisch – E-Mail Anzeigename

Beispiel

// siehe BeUserEmailAddress()

Siehe auch:

BeUserEmailAddress


BeUserName()

BeUserName() – Benutzername

Beschreibung

Die Funktion gibt den Benutzernamen zu einer Benutzer-Nummer zurück.

Hinweis

Ist kein Benutzername hinterlegt oder wird der Benutzer nicht gefunden, ist die Rückgabe immer "---".

Parameter

aUserNo:U

Benutzernummer (numerisch oder alphanumerisch)

Rückgabewert

Alphanumerisch – Benutzername

Beispiel

//******************************************************************************

// Benutzernamen und Benutzer-Kurzname alle be-User anzeigen

//******************************************************************************

| oDabFil, cUserNo |

oDabFil := BeOpen(waDABFIL, 'DABFIL'),

startseq

   oDabFil.Filter   := "DATEI = 999 AND CONTAINS(FELD,'__USR__*')",

   oDabFil.Filtered := True,

   DbGoTop(oDabFil),

   while not Eof(oDabFil) do

      cUserNo := Right(oDabFil:FELD, 3),

      writeln(cUserNo, BeUserName(cUserNo), BeUserShortName(cUserNo)),

      DbSkip(1, oDabFil),

   end,

always

   BeClose(oDabFil),

stopseq,

Siehe auch:

BeUserShortName()


BeUserShortName()

BeUserShortName() – Benutzer-Kurzname

Beschreibung

Die Funktion liefert den Benutzer-Kurznamen zu einer Benutzer-Nummer aus dem Personalstamm.

Hinweis

Ist für den Benutzer kein Kurzname hinterlegt, ist die Rückgabe der Benutzername.

Parameter

aUserNo:U

Benutzernummer (numerisch oder alphanumerisch)

Rückgabewert

Alphanumerisch – Benutzer-Kurzname

Beispiel

// siehe BeUserName()

Siehe auch:

BeUserName()


CalcSLText()

CalcSLText() – Druckfeld Handelsstückliste

Beschreibung

Die Funktion dient in einem Report zur Anzeige von eindimensionalen Handelsstücklisten aus einem Auftrag.

Die Funktion nicht im Belegdruck verwenden, dort stehen o[pv] Variablen zur Verfügung!

Parameter

cCodedANUMMER:C | Codierte Auftragsnummer (Auftragsnr. * 1000 + Auftragsposition)
nSprachNr:N | Sprachnummer
lCalcChargeText:L | Nur bei eingetragenen Versandmengen, Ausgabe der Chargen/Seriennummern; default = false

Rückgabewert

Alphanumerisch – 3 Spalten: "Anzahl, Einheit, Artikelnr. + Bezeichnung"

Um den Inhalt einzelner Spalten zu erhalten, die im Report jeweils in einem Memo dargestellt werden können, wird die Funktion SplitTabbedText() genutzt.

Beispiel

| aAuftr, aText, oDab055:DB := 'waDAB055, DAB056' |

aAuftr := Hex(Val(SubStr(oDab055:APNUMMER, 1 6)) * 1000 +

          Val(SubStr(oDab055:APNUMMER, 7, 3)), 32, 6),

aText  := CalcSLText(aAuftr, 0),

if !empty(atext) then

   aText := SplitTabbedText (aText, 1, 3),

endif,

Siehe auch:

CalcTSLText()

SplitTabbedText()


CalcTSLText()

CalcTSLText() – Druckfeld Standardstückliste

Beschreibung

Die Funktion dient in einem Report zur Anzeige von eindimensionalen Standardstücklisten aus dem Artikelstamm.

Die Funktion nicht im Belegdruck verwenden, dort stehen o[pv] Variablen zur Verfügung!

Parameter

cArtNr:C | Artikelnummer
nSprachNr:N | Sprachnummer
lMitAPos:L | Anzeige der Arbeitswerte für Artikel; default = false

Rückgabewert

Alphanumerisch – 3 Spalten: "Anzahl, Einheit, Artikelnr. + Bezeichnung"

Um den Inhalt einzelner Spalten zu erhalten, die im Report jeweils in einem Memo dargestellt werden können, wird die Funktion SplitTabbedText() genutzt.

Beispiel

| aText, oDab010:DB := 'waDAB010, DAB011' |

aText := CalcTSLText(oDab010:ARTNR, 0, false),

if !empty(atext) then

   aText := SplitTabbedText(aText, 1, 3),

endif,

Siehe auch:

CalcSLText()

SplitTabbedText()


CalcVarText()

CalcVarText() – Druckfeld Variantenstückliste

Beschreibung

Die Funktion dient in einem Report zur Anzeige von eindimensionalen Variantenstücklisten aus einem Auftrag.

Die Funktion nicht im Belegdruck verwenden, dort stehen o[pv] Variablen zur Verfügung!

Parameter

cCodedANUMMER:C | Codierte Auftragsnummer (Auftragsnr.*1000+Auftragsposition)
cSL_MEMO:C | DAB055:SL_Memo (Auftragspositionssatz:Datei 4)
nSprachNr:N | Sprachnummer
cSprachSL_MEMO:C | DAB055:SL_MemoFS (Auftragspositionssatz:Datei 4)
lIgnoreEmpty:L | Nullmengen ignorieren

Rückgabewert

Alphanumerisch – 3 Spalten: "Anzahl, Einheit, Artikelnr. + Bezeichnung"

Um den Inhalt einzelner Spalten zu erhalten, die im Report jeweils in einem Memo dargestellt werden können, wird die Funktion SplitTabbedText() genutzt.

Beispiel

| aText, aAuftr, oDab055:DB := 'waDAB055, DAB056' |

aText := CalcVarText(aAuftr, oDab055:SL_MEMO, 0, '', true),

if !empty(atext) then

   aText := SplitTabbedText (aText, 1, 2),

endif,

Siehe auch:

CalcSLText()

CalcTSLText()

SplitTabbedText()


CbUserHasRole()

CbUserHasRole() – Prüfen ob ein User einer bestimmten Benutzer-Rolle zugeordnet ist.

Beschreibung

Diese Funktion prüft, ob ein bestimmter business express User einer bestimmten Benutzer-Rolle zugeordnet ist. Dabei berücksichtigt diese Funktion sowohl Abteilung als auch Standort spezifische Rollen-Zuordnungen.

Parameter

cRoleKey:C | Schlüssel der zu prüfenden Rolle
nUserNo:N | User-Nummer des zu prüfenden Users. default: Der aktuell angemeldete User
nDepartmentNo:N | Nummer der Abteilung, die als Kontext für die Rollen-Zuordnung verwendet werden soll. default: Die aktuelle Abteilung
nLocationNo:N | Nummer des Standorts, der als Kontext für die Rollen-Zuordnung verwendet werden soll. default: Der aktuelle Standort

Rückgabewert

Logisch

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Beispiel wie mithilfe der Funktion CbUserHasRole() geprüft

//                werden kann, ob der Zugriff auf einen bestimmten Bereich oder

//                eine bestimmte Funktionalität erlaubt ist.

//

// Rückage:      boolean, Zugriff erlaubt/nicht erlaubt

//##############################################################################

//##############################################################################

| bAccess, cAdminRoleKey, nUserNo, cAdminPassword |

cAdminRoleKey  := 'Zugriffe_Administration', // Prüfe Zuordnung diese Rolle ...

nUserNo        := Val(c_usr),                // ... und für aktuellen User

cAdminPassword := 'be32',

bAccess :=

   // Prüfen, ob der User der Rolle in der aktuellen Abteilung

   //  zugeordnet ist. (Übergabe von mAbteilung ist optional!)

   CbUserHasRole(cAdminRoleKey, nUserNo, mAbteilung)

   or

   // Falls die obere Bedingung nicht zutrifft,

   //  das gleiche für Abteilung 1 prüfen

   CbUserHasRole(cAdminRoleKey, nUserNo, 1),

// Wenn der aktuelle User nicht der o.g. Rolle zugeordnet ist

//  -> Administrations-Passowrt abfragen

if not bAccess then

   bAccess := PasswordDlg(cAdminPassword, 'Administrativer Bereich') = 0,

endif,

// Rückgabe, ob der Zugriff erlaubt ist

bAccess

Siehe auch:

PasswordDlg()


Charge_VD()

Charge_VD() – Chargen Verfallsdatum

Beschreibung

Die Funktion gibt das Chargen-Verfallsdatum für einen Artikel/eine Charge zurück.

Parameter

cArtNo:C | Artikelnr.
cCommiss:C | Cahrgennummer
oDab720:O | DAB720 Kommissions/Chargenverfolgung. Sollte aus Performance-Gründen immer mit übergeben werden.

Rückgabewert

Datum - Verfallsdatum

Beispiel

Charge_VD('4711', 'CHARGE_01')


CharOnly()

CharOnly() – Zeichenkettenvergleich

Beschreibung

Die Funktion dient der Bildung der Schnittmenge zwischen zwei Zeichenketten auf der Basis von Einzelzeichen. Es werden alle Zeichen aus der zweiten Zeichenkette entfernt, die nicht in der ersten angegeben wurden. Die Funktion eignet sich besonders zum Datenvergleich.

Parameter

cCharsOnly:C | Zeichenkette 1
cText:C | Zeichenkette 2

Rückgabewert

Alphanumerisch - Schnittmenge der Zeichenketten

Beispiel

CharOnly("0123456789","089 231148-54"),

CharOnly("0123456789","089/231148-54")  // Ergebnis: '08923114854'


ChkSLSperre()

ChkSLSperre() – Gesperrte Stücklistenartikel

Beschreibung

Die Funktion prüft eine Stückliste auf gesperrte Artikel/Baugruppen und gibt die Nr. der ersten Stücklistenebene zurück, in der sich ein gesperrter Artikel befindet.

Parameter

aDab210:O | DAB210 Stückliste (Datei 14)
aDab010:O | DAB010 Artikelstamm (Datei 2)
aArtNo:C | Artikelnummer

Rückgabewert

Numerisch - Stücklistenebene des ersten gesperrten Artikels (0 = keine gesperrten Artikel).

Beispiel

| oDab210:DB := 'waDAB210, DAB211', oDab010:DB := 'waDAB010, DAB011', aArtnr |

ChkSLSperre(oDab210, oDab010, aArtnr)


CreateSerialHistory()

CreateSerialHistory() – Seriennummern-Historie

Beschreibung

Mit CreateSerialHistory() wird die Historie einer Serien-Nr. eines Artikels ermittelt und als Tabelle zurückgegeben (entsprechend dem Fenster: "Serien-Nummern verwalten" / "Historie").

Parameter

oDM:O | Datenmodul
cArtNr:C | Artikel-Nr.
cKommiss:C | Serien-Nr.

Rückgabewert

Object (TMemCalcTable)

Die Struktur der Rückgabe-Tabelle entspricht der DAB020 zzgl. folgender Felder:

       RECORDNUM    Integer     Datensatz-Nummer in physischer DAB020

       ORDERBY      Integer     Teil des Sortier-Schlüssels der Tabelle

Default Sortierung der Tabelle:

       DATUM;ORDERBY;RECORDNUM

Beispiel

| oDM, oHist |

oDM   := CreateObject("TBeDBGet"),

oHist := CreateSerialHistory(oDM, '00100000', '000001'),

Browse(, oHist),


CurrConvSales()

CurrConvSales() – Währungstabelle VK-Umrechnung

Beschreibung

Die Funktion gibt den Wert des Feldes “VK-Umr.“ (J/N) aus der Festwerten-Währungstabelle für die jeweilige Währungsnummer zurück.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Alphanumerisch - ('J'/'N')

Beispiel

CurrConvSales(5)

Siehe auch:

CurrDecimals()

CurrDM()

CurrDMPurchase()

CurrEuro()

CurrFixRate()

CurrPurchase()

CurrSale()

CurrSign()

CurrUnit()

CurrSymbol()


CurrDecimals()

CurrDecimals() – Währungstabelle Nachkommastellen

Beschreibung

Die Funktion gibt den numerischen Wert des Feldes “NK-St.“ aus der Währungstabelle (Festwerte) für die jeweilige Währungsnummer zurück.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Numerisch - Feld "NK-St."

Beispiel

CurrDecimals(7)

Siehe auch:

CurrConvSales()

CurrDM()

CurrDMPurchase()

CurrEuro()

CurrFixRate()

CurrPurchase()

CurrSale()

CurrSign()

CurrUnit()

CurrSymbol()


CurrDM()

CurrDM() – Währungstabelle VK-Kurs

Beschreibung

Die Funktion gibt für “Nicht-EUR“-Währungen der Währungstabelle (“EUR-Kurs“ = “N“) den numerischen Wert des Feldes “VK-Kurs.“ zurück.

Für “EUR“-Währungen der Währungstabelle (“EUR-Kurs“ = “J“) wird der berechnete Wert “Einheit“/“VK-Kurs“ zurückgegeben.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Numerisch - Feld "VK-Kurs"

Beispiel

CurrDM(5)

Siehe auch:

CurrConvSales()

CurrDecimals()

CurrDMPurchase()

CurrEuro()

CurrFixRate()

CurrPurchase()

CurrSale()

CurrSign()

CurrUnit()

CurrSymbol()


CurrDMPurchase()

CurrDMPurchase() – Währungstabelle EK-Kurs

Beschreibung

Die Funktion gibt für “Nicht-EUR“-Währungen der Währungstabelle (“EUR-Kurs“ = “N“) den numerischen Wert des Feldes “EK-Kurs.“ zurück.

Für “EUR“-Währungen der Währungstabelle (“EUR-Kurs“ = “J“) wird der berechnete Wert “Einheit“/“EK-Kurs“ zurückgegeben.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Numerisch - Feld "EK-Kurs."

Beispiel

CurrDMPurchase(5)

Siehe auch:

CurrConvSales()

CurrDecimals()

CurrDM()

CurrEuro()

CurrFixRate()

CurrPurchase()

CurrSale()

CurrSign()

CurrUnit()

CurrSymbol()


CurrEuro()

CurrEuro() – Währungstabelle Eur-Kurs

Beschreibung

Die Funktion gibt den Wert des Feldes “EUR-Kurs“ (J/N) aus der Währungstabelle in den Festwerten für die jeweilige Währungsnummer zurück.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Logisch / Boolean - Feld "EUR-Kurs"

Beispiel

CurrEuro(7)

Siehe auch:

CurrConvSales()

CurrDecimals()

CurrDM()

CurrDMPurchase()

CurrFixRate()

CurrPurchase()

CurrSale()

CurrSign()

CurrUnit()

CurrSymbol()


CurrFixRate()

CurrFixRate() – Währungstabelle Fix-Kurs

Beschreibung

Die Funktion gibt den Wert des Feldes “Fix-Kurs“ (J/N) aus der Festwerte-Währungstabelle für die jeweilige Währungsnummer zurück.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Logisch / Boolean - Feld "Fix-Kurs"

Beispiel

CurrFixRate(7)

Siehe auch:

CurrConvSales()

CurrDecimals()

CurrDM()

CurrDMPurchase()

CurrEuro()

CurrPurchase()

CurrSale()

CurrSign()

CurrUnit()

CurrSymbol()


CurrPurchase()

CurrPurchase() – Währungstabelle EK-Kurs direkt

Beschreibung

Die Funktion gibt den numerischen Wert des Feldes “EK-Kurs.“ für die jeweilige Währung zurück.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Numerisch - Feld "EK-Kurs"

Beispiel

CurrPurchase(5)

Siehe auch:

CurrConvSales()

CurrDecimals()

CurrDM()

CurrDMPurchase()

CurrEuro()

CurrFixRate()

CurrSale()

CurrSign()

CurrUnit()

CurrSymbol()


CurrSale()

CurrSale() – Währungstabelle VK-Kurs direkt

Beschreibung

Die Funktion gibt den numerischen Wert des Feldes “VK-Kurs.“ für die jeweilige Währung zurück.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Numerisch - Feld "VK-Kurs"

Beispiel

CurrSale(5)

Siehe auch:

CurrConvSales()

CurrDecimals()

CurrDM()

CurrDMPurchase()

CurrEuro()

CurrFixRate()

CurrPurchase()

CurrSign()

CurrUnit()


CurrSign()

CurrSign() – Währungstabelle Währung

Beschreibung

Die Funktion gibt die Bezeichnung der jeweiligen Währung zurück.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Alphanumerisch - Währungsname

Beispiel

CurrSign(0)

Siehe auch:

CurrConvSales()

CurrDecimals()

CurrDM()

CurrDMPurchase()

CurrEuro()

CurrFixRate()

CurrPurchase()

CurrSale()

CurrUnit()

CurrSymbol()


CurrSymbol()

CurrSymbol() – Währungssymbol

Beschreibung

Die Funktion gibt für EURO,USD,GBP das Währungssymbol aus, ansonsten das alphanumerische Währungskennzeichen für die jeweilige Währung zurück.

Außerdem kann mit dieser Funktion ein Betrag formatiert werden, wenn der Parameter nValueToFormat angegeben wird.

Hinweis

Währungen werden in der FiBu getrennt vom be-Hauptprogramm und verwaltet.

Parameter

nCurrencyID:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Alphanumerisch - Währungssymbol

Beispiel

CurrSymbol(,, 1200.99)

Siehe auch:

CurrConvSales()

CurrDecimals()

CurrDM()

CurrDMPurchase()

CurrEuro()

CurrFixRate()

CurrPurchase()

CurrSign()

CurrUnit()

CurrSymbol()

Kontakt zum Support | www.dontenwill.de


CurrUnit()

CurrUnit() – Währungstabelle Einheit

Beschreibung

Die Funktion gibt den numerischen Wert des Feldes “Einheit“ für die jeweilige Währung zurück.

Parameter

aValue:N | Währungsnummer.
nLocation:N | Nummer des Standortes.

Rückgabewert

Numerisch - Einheit

Beispiel

CurrUnit(5)

Siehe auch:

CurrConvSales()

CurrDecimals()

CurrDM()

CurrDMPurchase()

CurrEuro()

CurrFixRate()

CurrPurchase()

CurrSale()

CurrSign()

CurrSymbol()


CustLocationCompany()

CustLocationCompany() – Firmenzugehörigkeit

Beschreibung

Die Funktion gibt die Firmenzugehörigkeits-Nummer einer KundenNr. zurück.

Parameter

aCustNo:N

KundenNr. des Standortes

Rückgabewert

Numerisch - Firmenzugehörigkeit/Standort-Nummer, falls KundenNr. ungültig ist -1

Beispiel

CustLocationCompany(73500)

Siehe auch:

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationExists()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


CustLocationInfo()

CustLocationInfo() – Standortinformation

Beschreibung

Die Funktion gibt ein Objekt mit allen Informationen einer KundenNr. eines Standortes zurück.

Parameter

aCustNo:N

KundenNr. des Standortes

Rückgabewert

Objekt - Falls KundenNr. ungültig ist: NIL

Objekt-Eigenschaften

- allowed // Erlaubnis ???

- company // Firmenzugehörigkeit Standort

- custdepart // VK-Abteilung für sto.Umlagerung

- custno // Kundennr. Standort

- custtype // Empfängertyp für sto.Umlagerung

- locname // Mandanten/Abteilungs-Name

- locno // Standort-Nummer

- ordtypeext // Auftragsart für Lieferung firmenextern

- ordtypeint // Auftragsart für Lieferung firmenintern

- suppdepart // EK-Abteilung. für sto.Umlagerung

- suppno // Lieferantennr. Standort

Beispiel

| oCustLocInfo |

oCustLocInfo := CustLocationInfo(73500),

WriteLn(oCustLocInfo.custno),

WriteLn(oCustLocInfo.suppno),

WriteLn(oCustLocInfo.company),

Siehe auch:

CustLocationCompany()

CustLocationNo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationExists()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


CustLocationNo()

CustLocationNo() – Standortinformation

Beschreibung

Die Funktion gibt die Standort-Nummer einer KundenNr. zurück.

Parameter

aCustNo:N

KundenNr. des Standortes

Rückgabewert

Numerisch - Falls KundenNr. ungültig ist: -1

Beispiel

CustLocationNo(73500)

Siehe auch:

CustLocationCompany()

CustLocationInfo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationExists()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


D005_BriefAnrede()

D005_BriefAnrede() – Briefanrede zusammensetzen

Beschreibung

Die Funktion setzt Anredeschlüssel aus den Allg.Parameter mit Name und Titel einer Ansprechperson zusammen.

Parameter

oDab005:O

Tabellenobjekt DAB005

Rückgabewert

Alphanumerisch - Briefanrede

Beispiel

// Allgemeine Parameter (DABPAR)

// Anrede-Text Herr, Sehr geehrter Herr

// …

//

// Ansprechperson (DAB005)

// REC_NO      1

// PERSNR      1

// ANREDESCHL  0

// NAME        Müller, Hans

// TITEL       Dr.

// EMAIL       hans@mueller.de

// …

| oDab005:DB := 'waDAB005, DAB006' |

DBGoTop(oDab005),

WriteLn(D005_BriefAnrede(oDab005)),   // Ergebnis: 'Sehr geehrter Herr Dr. Müller'

Siehe auch:

D005_BriefName()

D005_Email()

D005_Fax()

D005_Telefon()


D005_BriefName()

D005_BriefName() – Briefname zusammensetzen

Beschreibung

Die Funktion setzt Brief-Anredeschlüssel aus den Allg.Parameter mit Name und Titel einer Ansprechperson zusammen.

Parameter

oDab005:O

Tabellenobjekt DAB005

Rückgabewert

Alphanumerisch

Beispiel

// Allgemeine Parameter (DABPAR)

// Anrede-Text 0  Herrn, Sehr geehrter Herr

// …

//

// Ansprechperson (DAB005)

// REC_NO      1

// PERSNR      1

// ANREDESCHL  0

// NAME        Müller, Hans

// TITEL       Dr.

// EMAIL       hans@mueller.de

// …

| oDab005:DB := 'waDAB005, DAB006' |

DBGoTop(oDab005),

WriteLn(D005_BriefName(oDab005)),   // Ergebnis: 'Herr Dr. Müller'

Siehe auch:

D005_BriefAnrede()

D005_Email()

D005_Fax()

D005_Telefon()


D005_Email()

D005_Email() – Email-Adresse zusammensetzen

Beschreibung

Die Funktion gibt die E-Mail-Adresse eines Ansprechpartners zurück. Falls die E-Mail-Adresse des Kontakts ohne Domain angegeben ist, wird die Domain des Kunden angehängt. Ist in beiden Fällen keine gültige E-Mail-Adresse ermittelbar, so gibt die Funktion einen leeren Wert zurück.

Gültige Email-Adressen enthalten ein "@".

Parameter

oDab005:O | Tabellenobjekt DAB005
oDab000:O | Tabellenobjekt DAB000

Rückgabewert

Alphanumerisch - E-Mail-Adresse

Beispiel

// Ansprechperson (DAB005)

// REC_NO        1

// PERSNR        1

// ANREDESCHL    0

// NAME          Müller, Hans

// TITEL         Dr.

// EMAIL         hans@mueller.de

// …

| oDab005:DB := 'waDAB005, DAB006', oDab000:DB := 'waDAB000' |

DBGoTop(oDab005),

WriteLn(D005_EMAIL(oDab005, oDab000))   // Ergebnis: 'hans@mueller.de'

Siehe auch:

D005_BriefAnrede()

D005_BriefName()

D005_Fax()

D005_Telefon()


D005_Fax()

D005_Fax() – Faxnummer zusammensetzen

Beschreibung

Die Funktion setzt eine Fax-Nr. aus der Kunden-Fax-Nr. (bis zum "-") und der Kontakt-Fax-Durchwahl zusammen. Falls eine eigene Kontakt-Fax-Nummer hinterlegt ist, so wird immer die Kontakt-Fax-Nummer zurückgegeben.

Parameter

oDab005:O | Tabellenobjekt DAB005
oDab000:O | Tabellenobjekt DAB000

Rückgabewert

Alphanumerisch - Faxnummer

Beispiel

// Kundenstamm

// …

// TELEX  931/332165-

// …

//

// Ansprechperson (DAB005)

// REC_NO     1

// PERSNR     1

// ANREDESCHL 0

// NAME       Müller, Hans

// TITEL      Dr.

// EMAIL      hans@mueller.de

// FAX_DW     5

// …

| oDab005:DB := 'waDAB005, DAB006', oDab000:DB := 'waDAB000' |

DBGoTop(oDab005),

WriteLn(D005_Fax(oDab005, oDab000)),   // Ergebnis: '0931/332165-5'

Siehe auch:

D005_BriefAnrede()

D005_BriefName()

D005_Email()

D005_Telefon()


D005_Telefon()

D005_Telefon() – Telefonnummer zusammensetzen

Beschreibung

Die Funktion setzt eine Telefon-Nr. aus der Kunden-Telefon-Nummer (bis zum "-") und der Kontakt-Telefon-Durchwahl zusammen. Falls die Kunden-Telefon-Nummer kein "-" beinhaltet, wird immer die Nummer aus dem Kundenstamm zurückgegeben. Die Kontakt-Telefon-Nr. wird grundsätzlich nicht berücksichtigt.

Parameter

oDab005:O | Tabellenobjekt DAB005
oDab000:O | Tabellenobjekt DAB000

Rückgabewert

Alphanumerisch - Telefonnmmer

Beispiel

// Kundenstamm

// …

// TELEFON    0931/332166-0

// …

//

// Ansprechperson (DAB005)

// REC_NO     1

// PERSNR     1

// ANREDESCHL 0

// NAME       Müller, Hans

// TITEL      Dr.

// EMAIL      hans@mueller.de

// TEL_DW     -37

// …

| oDab005:DB := 'waDAB005, DAB006', oDab000:DB := 'waDAB000' |

DBGoTop(oDab005),

WriteLn(D005_Telefon(oDab005, oDab000)),   // Ergebnis: '0931/332166-37'

Siehe auch:

D005_BriefAnrede()

D005_BriefName()

D005_Email()

D005_Fax()


D010_AbrufSum()

D010_AbrufSum() – Summe Abruf-EK

Beschreibung

Die Funktion summiert alle ABRUF_EK-Summen einer Artikel-Nr.

Parameter

cArtNr:C | Artikel Nr.
lRefresh:L | Refreshen; default = false false: Bei gleich bleibender Art.Nr. wird jeweils das letzte Result zurückgeliefert true: Wert neu errechnen
nFirma:N | Summe für diesen Standort bilden; default = -1 (aktueller Standort)

Rückgabewert

Numerisch - Summe aller ABRUF_EK

Beispiel

D010_AbrufSum('GX4-F56', true)


D065_CalcConversationSort()

ToDo: Mit MemoBo Umstellung über MemoBo-Objekt abgedeckt -> Doku löschen

D065_CalcConversationSort() – Kurzbeschreibung

Beschreibung

Die Funktion erstellt anhand verschiedener Eigenschaften eines Memos eine eigenen Sortierschlüssel (z.B. für die Sortierung nach Konversationen). Funktion wird im Default-Update-Recht für Dab065:BETRF_SORT verwendet.

Parameter

oDab065:O

Tabellenobjekt Wiedervorlage-Memos (DAB065)

Rückgabewert

Alphanumerisch

Beispiel

|oDAB065|

oDAB065 := beopen(waDAB065, DAB066, True), // Wiedervorlage-Memos

startseq,

   while not eof(oDAB065) do

      writeln(D065_CalcConversationSort(oDab065)),

      dbskip(1, oDAB065),

   end,

always,

   beclose(oDAB065),

stopseq,


D210_Calc()

D210_Calc() – Stücklistenkosten Vorkalkulation

Beschreibung

Die Funktion kalkuliert die Kosten für die Stückliste eines Artikels. Entspricht der Vorkalkulation im Artikelstamm.

Parameter

cArtNr:C | Artikel Nr.
cEKPFeld:C | EKP-Feld; default = "EKP". Es muss ein ausführbarer Codeblock-String übergeben werden. Zum Zeitpunkt der Ausführung ist die Tabelle Dab010 im Codeblock verfügbar.
nLosGroesse:N | LosGröße; default = DAB010 Vorgabe
nAusschuss:N | Ausschuss; default = DAB010 Vorgabe

Rückgabewert

zweidimensionales Array

Element | Bezeichnung | EKP-Basis
[1,1]; [1,2]; [2,1]; [2,2]; [3,1]; [3,2]; [4,1]; [4,2]; [5,1]; [5,2]; [6,1]; [6,2] | Arbeits-Rüst-Zeiten-Kosten; Arbeits-Rüst-Zeiten-Kosten; Arbeits-Stück-Zeit-Kosten; Arbeits-Stück-Zeit-Kosten; Material-Kosten; Material-Kosten; Material-Zuschläge; Material-Zuschläge; Externleistungs-Kosten; Externleistungs-Kosten; Werkzeugkosten; Werkzeugkosten | Std.EKP cEKPFeld; Std.EKP cEKPFeld; Std.EKP cEKPFeld; Std.EKP cEKPFeld; Std.EKP cEKPFeld; Std.EKP cEKPFeld

Entsprechend dem Verhalten der Kalkulations-Oberfläche (Aufruf aus dem Artikelstamm -> Info-Menü) rechnet auch diese Funktion immer zusätzlich zur übergebenen Preisbasis (cEKPFeld:C) mit dem Standard-EKP. Die Ergebnisse sind dementsprechend im Rückgabe-Array abgelegt.

Beispiel

| oDab010:DB := 'waDAB010' |

D210_Calc(oDAB010:ARTNR, "iif(Empty(LTZTEKP),DURCHSCHEK,LTZTEKP)")


D262_Search()

D262_Search() – BDE Mitarbeitersuche

Beschreibung

Die Funktion öffnet ein Fenster für die Suche nach Mitarbeitern.

Parameter

keine Parameter erwartet

Rückgabewert

Numerisch - Personalnummer ausgewählter Mitarbeiter; Kein Treffer/Abbruch = 0

Beispiel

D262_Search(),


D270_ResZNrParent()

D270_ResZNrParent() – Parent Ressourcen-ID

Beschreibung

Die Funktion ermittelt den Parent einer Ressourcen Zuordnungs-ID.

Parameter

oDab270:O | Tabellenobjekt Dab270
nResZuID:N | Ressourcen Zuordnungs-ID

Rückgabewert

Numerisch - Parent der Ressourcen Zuordnungs-ID

Beispiel

| oDAB270:DB := 'waDAB270, ARGB_ID' |

D270_ResZNrParent(oDab270, 4711)


D610_DelResID()

D610_DelResID() – Lagerplatz Reservierung löschen

Beschreibung

Die Funktion löscht eine Reservierung für einen Lagerort.

Parameter

oDM:O | Datamodul
nReservID:N | Reservierungs-ID

Rückgabewert

Keiner

Beispiel

| oDM |

oDM := CreateObject('TBeDBGet'),

D610_DelResID(oDM, 1342),


D610_SetResID()

D610_SetResID() – Lagerplatz Reservierung

Beschreibung

Die Funktion erstellt eine Reservierung im Lagerort-Verzeichnis.

Parameter

oDM:O | Datamodul
cPlatz:C | Lagerplatznummer

Rückgabewert

Numerisch - Reservierungs-ID

Beispiel

| oDM |

oDM := CreateObject('TBeDBGet'),

D610_SetResID(oDM, '250'),


D700_HistoryAsText()

D700_HistoryAsText() - Beleg-Historie als Klartext

Beschreibung

Die Funktion entfernt die Draw-Commands aus dem Übergabestring und liefert "ReinText" zurück.

Parameter

cVoucherFieldStr:C | Feldname als String; Wenn leer => wird Feldname "Dab700:Daten" verwendet
oDab700:O | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Text

Beispiel

| oDab700, text |

oDab700 := BEOpen(waDAB700, 'BELEG'),

startseq,

   DBGoBottom(oDab700),

   Skip(-50, oDab700),

   text := D700_HistoryAsText('', oDab700),

always,

   BEClose(oDab700)

stopseq,

text


D700_VoucherAsText()

D700_VoucherAsText() - Beleg-Langtext ohne Formatierungen

Beschreibung

Die Funktion erstellt aus den Belegen (Belegarchiv) Langtext ohne Formatierungen.

Parameter

cVoucherFieldStr:C | Feldname als String; Wenn leer => wird Feldname "Dab700:Daten" verwendet
oDab700:O | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Text

Beispiel

| oDab700, text |

oDab700 := BEOpen(waDAB700, 'BELEG'),

startseq,

   DBGoBottom(oDab700),

   Skip(-50, oDab700),

   text := D700_VoucherAsText('', oDab700),

always,

   BEClose(oDab700)

stopseq,

text


D730Chk()

D730Chk() – Überprüfung Seriennummer

Beschreibung

Die Funktion überprüft, ob die Buchung einer Seriennummer erlaubt ist.

Parameter

cArtNr:C | Artikel-Nummer
cKommiss:C | Serien-Nummer
cBuart:C | Buchungsart; A - Abgang Verkauf; E - Zugang Einkauf; P - Abgang an Produktion; F - Zugang von Fertigung; I - Inventur; U - Umlagerung; N - Kunden-Auftragseingang; B - Lieferanten-Bestellausgang; K - Kommen/Gehen-Buchung
lNumCheck:L | Prüfung auf Numerisch; default = true
lStatRet:L | Ergebnistyp; default = false true - Ergebnis als Text ausgeben false - Ergebnis als Boolean ausgeben

Rückgabewert

Logisch / Boolean - Seriennummer erlaubt

Character - Seriennummer erlaubt

Beispiel

D730Chk('Art1', '3000000318812', 'F')


Dab010_eh()

Dab010_eh() – Zeiteinheit

Beschreibung

Die Funktion gibt als Ergebnis eine Zeiteinheit zurück.

Parameter

cZeitEH:C | Zeiteinheit; S - Stunden; T - Tage; W - Wochen; M - Monate
lPlural:L | Zeitangabe in der Mehrzahl ausgeben; default = false

Rückgabewert

Keiner

Beispiel

WriteLn('Der Termin dauerte genau 2 ' + Dab010_eh('S', true) + '.')


DArbg_Checkrecursion()

DArbg_CheckRecursion() – Auf Rekursion prüfen

Beschreibung

Die Funktion prüft die Arbeitsgangabfolge in einer Stückliste auf Rekursion.

Parameter

oDabMaster:O | Die Master-Tabelle (Dab210 / Dab240)
cArtNoField:C | Name des Artikelnummerfeldes
nID:N | ID
nParentID:N | Parent-ID

Rückgabewert

Logisch / Boolean

Beispiel

| oDab240:DB := 'waDAB240' |

DArbg_CheckRecursion(oDab240, 'ARTNR1', 31, 57)


DateStr()

DateStr() – Datums-String

Beschreibung

Die Funktion dient der Umwandlung von Datumseingaben in eine formatierte Zeichenkette.

Parameter

uTermin:U

Datumseingabe, zulässig sind:

TT.MM.JJ,

TT.MM.JJJJ

oder

KW.MM.JJ

KW.MM.JJJJ.

Rückgabewert

Alphanumerisch

String mit Format "JJJJMMTTX".

- "X" steht für "T" = Tagesdatum / "W" = Wochendatum

Beispiel

DateStr('12.02.2003') // Ergebnis: 20030212T - T für Tagesdatum

DateStr('KW.05.03')   // Ergebnis: 20030131W - W für Wochendatum


Dim_Faktor()

Dim_Faktor() – Stücklistenmengenfaktor

Beschreibung

Die Funktion berechnet einen Stücklistenmengenfaktor anhand der eingegebenen Dimension.

Parameter

oDab010:O | Tabellenobjekt Dab010
oDab240:O | Tabellenobjekt Dab240 (od. Dab210)
aNoMsg:L | Exception bei auftretendem Fehler nicht ausgeben; default = false

Rückgabewert

Numerisch - Stücklistenmengenfaktor

Beispiel

| oDAB010:DB := 'waDAB010, DAB011', oDAB210:DB := 'waDAB210, DAB211' |

DBSeek({'4711'}, oDAB010),

DBSeek({'4711'}, oDAB210),

Dim_Faktor(oDab010, oDAB210, true)


DispoNr()

DispoNr() – Dispo-Nummer

Beschreibung

Die Funktion erzeugt eine Dispo-Nummer.

Parameter

oDab010:O | Tabellenobjekt DAB010
dDate:D | Datum

Rückgabewert

Alphanumerisch - Dispo-Nummer

Beispiel

| oDM, oDAB010 |

oDM     := CreateObject('TBeDbget'),

oDAB010 := DBGetTable(oDM, waDAB010),

DispoNr(oDab010, Date())   // -> neue Dispo-Nr.


DocDeleted()

DocDeleted() – Beleg gelöscht Prüfung

Beschreibung

Die Funktion prüft, ob ein Beleg im Belegarchiv als gelöscht markiert ist. Der Datensatz muss in der Dab700 auf dem zu überprüfenden Beleg positioniert sein.

Parameter

oDab700:O

Tabellenobjekt DAB700

Rückgabewert

Logisch / Boolean - Beleg gelöscht

Beispiel

| oDab700:DB := 'waDAB700' |

DBScope('020', '020', oDab700),

while !EoF(oDab700) do

   if DocDeleted(oDab700) then

      WriteLn(oDab700:BELEG_NR),

   endif,

DBSkip(1, oDab700),

end,


DocTitle()

DocTitle() – Belegart Bezeichnung

Beschreibung

Die Funktion gibt die Bezeichnung einer Belegart zurück.

Parameter

aDocTyp:N

ID der Beleg-Art

Rückgabewert

Alphanumerisch - Belegbezeichnung

Beispiel

DocTitle(010)   // Ergebnis: 'Angebot'

Siehe auch:

DocDeleted()


EAN_Chk()

EAN_Chk() – EAN-Prüfung

Beschreibung

Die Funktion prüft eine EAN-Nummer auf ihre Gültigkeit.

Parameter

cEAN:C

Zu prüfende Nr.

Rückgabewert

Logisch / Boolean - EAN gültig; Wenn ungültig wird ein Warnfenster angezeigt

Beispiel

EAN_Chk("0000556765434")

Siehe auch:

EAN_Nr()

EAN_PruefZ()


EAN_Nr()

EAN_Nr() – EAN-Nummer

Beschreibung

Die Funktion generiert automatisch eine 13-stellige EAN-Nummer mit Prüfziffer auf Grundlage der in den Festwerten eingetragenen EAN-Basis-Nummer.

Anmerkung: Kann im Feld EAN oder in einem beliebigen anderen Feld benutzt werden. Die Funktion wird üblicherweise als "Neuanlage"-Recht für Dab010:EAN hinterlegt.

Parameter

keine Parameter erwartet

Rückgabewert

Alphanumerisch - gültige EAN-Nummer

Beispiel

EAN_Chk(EAN_Nr())   // Ergebnis: .T.

Siehe auch:

EAN_Chk()

EAN_PruefZ()


EAN_PruefZ()

EAN_PruefZ() – EAN-Prüfziffer

Beschreibung

Die Funktion gibt die Prüfziffer einer 13-stelligen EAN-Nummer zurück.

Parameter

cEAN:C

13-stellige EAN-Nr.

Rückgabewert

Alphanumerisch - EAN-Prüfziffer

Beispiel

EAN_Pruefz('0000000000116')   // Ergebnis: '6'

Siehe auch:

EAN_Chk()

EAN_Nr()


EK_Wert()

EK_Wert() – Einkaufswert einer Lagerbewegung

Beschreibung

Die Funktion berechnet den Einkaufswert einer Lagerbewegung, gegebenenfalls in Fremdwährung.

Parameter

oDAB020:O | DAB020 Tabellenobjekt; default = nil
lFW:L | Fremdwährung; default = false

Rückgabewert

Numerisch - Einkaufswert

Beispiel

| oDAB020:DB := 'waDAB020, DAB021' |

DBSeek({'4711'}, oDAB020),

EK_Wert(oDAB020)


EKPEw()

EKPEw() – Einkaufspreis in Eigenwährung

Beschreibung

Die Funktion gibt den EKP in der Eigenwährung für einen bestimmten Artikel, Zulieferer und ggf. für eine bestimmte Menge zurück.

Die Tabellen Artikelstamm (DAB010) und Artikel/Zulieferer (DAB510) müssen geöffnet und entsprechend positioniert sein.

Hinweis

Die Funktion berücksichtigt keine Staffel-Preis-/Mengen-Angaben.

Parameter

nEKPFW:N | Einkaufspreis-Fremdwährung; default = DAB510:EKPFW
nRabatt1:N | Rabatt 1; default = DAB510:RABATT1
nRabatt2:N | Rabatt 2; default = DAB510:RABATT1 (!)
nRabatt3:N | Rabatt 3; default = DAB510:RABATT1 (!)
lWaehr:L | Währungsumrechnung nach Eigenwährung; default = true
nMenge:N | Menge, für die der Preis errechnet werden soll; default = DAB010:BESTELLEH. Diese Angabe wird benötigt sofern Zusatzkosten existieren, die "Global je Bestellung" oder "Global einmalig" berechnet werden sollen.
aZ_Kost:A | Zusatz-Kosten (3-dim Array); default = { DAB510:Z_KOST1, DAB510:Z_KOST2, DAB510:Z_KOST3 }
aZ_Mode:A | Zusatz-Kosten-Modi (3-dim Array); default = { DAB510:Z_MODE1, DAB510:Z_ MODE2, DAB510:Z_ MODE3 }
lZoll:L | Zoll/Fracht rechnen; default = true
lUmr_PE:L | Umrechnung auf Lager-Preiseinheit durchführen; default = true

Rückgabewert

Numerisch - EKP in Eigenwährung

Beispiel

| oDab510:DB := 'waDAB510, DAB511', oDab010:DB := 'waDAB010, DAB011' |

DBSeek('4711', oDab510),

EkpEW(oDAB510:EKPFW, oDAB510:RABATT1, oDAB510:RABATT2,

      0, true, oDAB010:BESTELLEH,

      {oDAB510:Z_KOST1, oDAB510:Z_KOST2, oDAB510:Z_KOST3},

      {oDAB510:Z_MODE1, oDAB510:Z_ MODE2, oDAB510:Z_MODE3},

      true, true, oDab010, oDab510)


EKPEWert()

EKPEWert() – Einkaufswert in Eigenwährung

Beschreibung

Die Funktion gibt den EK-Wert in Eigenwährung für einen bestimmten Artikel, Zulieferer und ggf. für eine bestimmte Menge zurück (z.B. für Rückstandwerts-Berechnung).

Die Tabellen Artikelstamm (DAB010) und Artikel/Zulieferer (DAB510) müssen geöffnet und entsprechend positioniert sein.

Parameter

nMenge:N | Menge
nSoEK:N | Soll-EKP
nPE:N | PE - Preiseinheit
nRabatt1:N | Rabatt 1
nRabatt2:N | Rabatt 2
nRabatt3:N | Rabatt 3
aZ_Kost:A | Array mit Zusatzkosten
aZ_mode:A | Array mit Zusatzkosten Modalitäten
nFW_Kurs:N | Fremdwährungskurs
nWaeKz:N | Währungsnummer
oDab010:O | Tabellenobjekt DAB010
oDab510:O | Tabellenobjekt DAB510
nMeUmrPE:N | Mengeneinheitumrechnung-Preiseinheit
nMeUmr:N | Mengeneinheitumrechnung

Rückgabewert

Numerisch - EK-Wert in Eigenwährung

Beispiel

| oDAB010:DB := 'waDAB010, DAB011', oDAB510:DB := 'waDAB510, DAB511' |

DBSeek({'211-014A100'}, oDAB010),

DBSeek({74104}, oDAB510),

EkpEWert(5, 1.1, 1, 0, 0, 0, {0, 0, 0}, {'0', '0', '0'}, 1, 1, oDab010, oDab510, 1, 1)


FCGetNettoArray()

FCGetNettoArray() – Absatzplanung Netto-Array ermitteln

Beschreibung

Ermittelt für den übergebenen Zeitraum für einen Artikel und Standort ein Array mit Netto-Absatzplanungswerten je Woche.

Parameter

oBeDBget:O | Datenmodul (Klasse: "TBeDBGet")
cTerminVon:C | Von Termin
cTerminBis:C | Bis Termin
cArtNr:C | Artikelnummer
cStandorte:C | Standort; default = Leerstring = aktueller Standort

Rückgabewert

Array - Format:

{ { KW-Termin, Netto-ForeCast }, { ... }, ... }

Beispiel

| oDM |

oDM := CreateObject('TBeDBGet'),

FCGetNettoArray(oDM, '01.01.06', '01.07.07', 'LS-200')


FCGetValue()

FCGetValue() – Forecast-Summe ermitteln

Beschreibung

Die Funktion ermittelt die Absatzplanung zu einem best. Artikel und Termin.

Parameter

oBeDBget:O | Datenmodul (Klasse: "TBeDBGet")
nTyp:N | Typ; 0 - Einzelner Forecast-Wert; 1 - Summe der Forecasts eines Artikels; 2 - Summe der Forecast-IST-Werte eines Artikels; 3 - (Absatzplanungswirksame-)Terminraster-Summe eines Artikels; 4 / 6 - Terminraster-Summe der Unterartikel eines Artikels; 5 - Total-Forecast eines Artikels
cTermin:C | Termin
cArtNr:C | Artikelnummer
nVtNr:N | Vertreternummer; default = 0
nKdNr:N | Kundennummer; default = 0
cStandorte:C | Standorte; default = Leerstring

Rückgabewert

Numerisch - Forecast-Summe

Beispiel

| oDM |

oDM := CreateObject('TBeDbGet'),

FCGetValue(oDM, 0, 'KW.07.06', '4711')


FieldValLabel()

FieldValLabel() – Feldklartext

Beschreibung

Die Funktion ermittelt den Klartext eines Feldes (z.B. der Text aus einer zugewiesenen ComboBox-Liste).

Die optionalen Parameter dienen nur internen Zwecken.

Parameter

oField:O | Feldobjekt
lIsList:L | default = false
cListSep:C | default = ','
uListItem:U | default = null()

Rückgabewert

Alphanumerisch - Feldklartext

Beispiel

| oDAB000:DB := 'waDAB000, 1' |

FieldValLabel(DBField('KDNR', oDAB000))


FindArtNoByMC()

FindArtNoByMC() – Artikelsuche über Matchcode

Beschreibung

Die Funktion sucht Art.Nr. anhand eines beliebigen Suchbegriffes / Matchcodes.

Parameter

aMachcode:C

Feldobjekt

Rückgabewert

Alphanumerisch - Artikelnummer

Beispiel

FindArtNoByMC('ECG CABLE')


FTS_CalcSearchText()

FTS_CalcSearchText() – Kurzbeschreibung

Beschreibung

Diese Funktion dient zur Befüllung vom SUCHE-Felder für die Volltextsuche.

Es bereitet einen optimierten Such-String vor mit den Standardfeldern der Tabelle. Der Such-String wird nur für den Datensatz aufbereitet, auf dem die Tabelle positioniert ist.

Zusätzlich können weitere Feldnamen in einem Array mitgegeben werden, deren Feldinhalte mit in den Such-String aufgenommen werden.

Hinweis

Die Funktion unterstützt beim optionalen Parameter(CustomFields) keine RTF Felder. Es muss vorab eine Konvertierung durchgeführt werden.

Parameter

Table:O | Tabelle, die auf ein bestimmten Datensatz positioniert ist
CustomFields:A | Array von Feldnamen, die mit aufgenommen werden sollen

Rückgabewert

Alphanumerisch

Beispiel

| oDab100, aCustomFields |

oDab100 := BeOpen(waDab100),

startseq

  aCustomFields := { 'IBAN', 'BIC' },

  writeln(FTS_CalcSearchText(oDab100, aCustomFields)),

always

   BeClose(oDab100),

stopseq,

Siehe auch:

PrepareTextForFTS()

PrepareTextForFTSSearch()

FullTextSearch()

FullTextSearchDocking()

TCbFullTextSearch


FuG()

FuG() – Farben und Größen

Beschreibung

Die Funktion gibt den Wert aus der Farben/Größentabelle zurück.

Parameter

aType:C | Typ: F - Farbe; G - Größe
aGroup:N | Gruppennummer
aCode:C | Code
aLang:N | Sprachen-Nummer
aDabFug:O | Tabellenobjekt der DABFUG (Farben und Größen); default = nil

Rückgabewert

Alphanumerisch - Farbe/Größe

Beispiel

FuG('F', 1, 'F1', 1)


FullTextSearch()

FullTextSearch() – Kurzbeschreibung

Beschreibung

Öffnet die Volltextsuche als modales Fenster für die angegebene Tabelle.

Parameter

MainTable:O | Die Tabelle, die durchsucht wird
MaskID:N | Masken-ID der Maske, die neben der Suche angezeigt werden soll
SortOrderFields:C | Namen der Felder getrennt mit Komma, wonach die Sortierung stat finden soll

Rückgabewert

String - Array indem das ID-Feld der Tabelle und der Wert des ausgewählten Datensatzes enthalten ist.

Beispiel

| oDAB000, cSearch |

oDAB000 := BeOpen(waDab000),

startseq

   cSearch := FullTextSearch(oDAB000),

always

   BeClose(oDAB000),

stopseq,

Siehe auch:

FullTextSearchDocking()

TCbFullTextSearch


FullTextSearchDocking()

FullTextSearchDocking() – Kurzbeschreibung

Beschreibung

Erstellt die Volltext-Suche als ein dockbares Fenster.

Parameter

Owner:O | Das Formular, auf welchen die Suche angedockt werden soll
MainTable:O | Die Tabelle, die durchsucht wird
MaskID:N | Masken-ID der Maske, die neben der Suche angezeigt werden soll
SortOrderFields:C | Namen der Felder getrennt mit Komma, wonach die Sortierung stat finden soll

Rückgabewert

Objekt - TCbFullTextSearch

Beispiel

| oForm, oDab000, oFullTextSearchDocking |

oForm := CreateObject('TFormEx', 'TFormEx'),

oDab000 := BeOpen(waDab000),

startseq

  oFullTextSearchDocking := FullTextSearchDocking(oForm, oDab000),

  oFullTextSearchDocking.CbHelper.CbManualDock(oForm),

  Show(oFullTextSearchDocking),

  ShowModal(oForm),

always

  BeClose(oDab000),

stopseq

Siehe auch:

FullTextSearch()

TCbFullTextSearch


GetBEParam()

GetBEParam() – Globaler BE-Parameter

Beschreibung

Die Funktion ermittelt einen globalen BE Parameter.

Parameter

aKey:C

ID des Parameters

Rückgabewert

Alphanumerisch - BE-Parameter

Beispiel

GetBeParam('USTID')


GetLangText()

GetLangText() – Textelement ausgeben

Beschreibung

Die Funktion liefert einen Text zur übergebenen Text-ID in der aktiven BE-Sprache.

Parameter

aTextNo:N

Text-Id

Rückgabewert

Alphanumerisch - Textelement

Beispiel

GetLangText(65),   // Ergebnis: 'Zulieferer nicht gefunden !'

GetLangText(66)    // Ergebnis: 'Kunde nicht gefunden !'

Siehe auch:

GetLangTextEx()


GetLangTextEx()

GetLangTextEx() – Textelement ausgeben

Beschreibung

Die Funktion liefert einen formatierten Text zur übergebenen Text-ID in der aktiven BE-Sprache.

Parameter

aTextNo:N | Text-Id
aArgs:A | Array mit den Formatierungs Argumenten

Rückgabewert

Alphanumerisch - Textelement

Beispiel

GetLangText(6),

// Ergebnis: 'Tabelle <%s> kann nicht geöffnet werden !'

//           (GetLangText liefert den unformatierten Text)

GetLangTextEx(6, {'Dab010'})

// Ergebnis: 'Tabelle <Dab010> kann nicht geöffnet werden !'

//           (GetLangTextEx liefert den Text formatiert zurück)

Siehe auch:

GetLangText()


GetLastStatusErrorText()

GetLastStatusErrorText() – Gibt den Text der letzten Meldung zurück, die über die Status-Bar dargestellt wurde.

Beschreibung

Die Funktion gibt den Text der letzten Meldung zurück, die über die Status-Bar dargestellt wurde.

Hierbei handelt es sich um rote Fehlermeldungen die am unteren Rand der Anwendung auftauchen.

Rückgabewert

Alphanumerisch

Beispiel

// Nicht in der Programmierumgebung testbar

StatusError('TEST'),

GetLastStatusErrorText()

Siehe auch:

GetLastStatusErrorTimeStamp()


GetLastStatusErrorTimeStamp()

GetLastStatusErrorTimeStamp() – Gibt einen Timestamp zurück, der angibt, wann die letzte Fehlermeldung über die Status-Bar dargestellt wurde.

Beschreibung

Gibt einen Timestamp zurück, der angibt, wann die letzte Fehlermeldung über die Status-Bar dargestellt wurde.

Hierbei handelt es sich um rote Fehlermeldungen die am unteren Rand der Anwendung auftauchen.

Rückgabewert

Zeitstempel

Beispiel

// Nicht in der Programmierumgebung testbar

StatusError('TEST'),

GetLastStatusErrorTimeStamp()

Siehe auch:

GetLastStatusErrorText()


GetLastUsedRecords()

GetLastUsedRecords() – Zuletzt verwendete Einträge im Memo-System

Beschreibung

Diese Funktion liefert die zuletzt bearbeiteten Einträge im Memo-System (WorkArea DAB065). Für die WorkAreas DAB000, DAb062, DAB100 werden die zuletzt verwendeten Memo-Zuordnungen zurückgegeben.

Hinweis

Rückgabe ist absteigend nach Timestamp sortiert

Parameter

nUserID:N | ID des Users (z.Z. nur eigener User möglich "c_usr")
nWorkArea:N | ID der Workarea (DAB000, DAB062, DAB065, DAB100 möglich)
dTimestamp:D | Maximal Alter der Einträge
nMaxCount:N | Maximal Anzahl an Einträgen die zurückgegeben werden

Rückgabewert

Array {UserID, WorkArea, RecordID, Timestamp}

Beispiel

| aLastUsed, i, cSQL:C:='' |

// Erstellt einen SQL-Filter, welcher die letzten 50 im Memo-System veränderten MEMO_ID der DAB065 berücksichtigt

aLastUsed := GetLastUsedRecords(Val(c_usr),waDAB065,0,50),

for i := 1 to Alen(aLastUsed) do

   cSQL += if(empty(cSQL), '', ' OR '),

   cSQL += 'MEMO_ID = ' + Str(aLastUsed[i, 3]),

next,

cSQL := iif(empty(cSQL),'', ' (' + cSQL + ') '),

cSQL // (MEMO_ID = 1 OR MEMO_ID = 2 OR MEMO_ID = 3 ...)


GetProdDetail()

GetProdDetail() – Produktionsdetails

Beschreibung

Die Funktion gibt Produktionsdetails zu einem Produktionsauftrag zurück.

Parameter

oDab035:O | Tabellenobjekt Dab035
oDab240:O | Tabellenobjekt Dab240
oDab010:O | Tabellenobjekt Dab010
lAuftrKompl:R | RückgabeParameter: Auftrag vollständig gebucht
nMaxFertigMeld:R | RückgabeParameter: Maximal produzierbare Menge (vor AKA-Druck), bzw. maximal fertig zu meldende Menge (nach AKA-Druck)

Rückgabewert

Rückgabe - keine

Referenz-Parameter beachten! (lAuftrKompl, nMaxFertigMeld)

Beispiel

| oDab035:DB := 'waDAB035', oDab010:DB := 'waDAB010', oDab240:DB := 'waDAB240',

  ergebnisAuftrKompl, ergebnisMaxFertigMeld |

GetProdDetail(oDab035, oDab240, oDab010, ergebnisAuftrKompl, ergebnisMaxFertigMeld),

WriteLn(ergebnisAuftrKompl),

WriteLn(ergebnisMaxFertigMeld),


GetSLText()

GetSLText() – Stücklisten Text

Beschreibung

Die Funktion liefert den Stücklisten-Text zu einer bestimmten Auftragsnummer.

Hinweis

lMitChargeText nur auf TRUE setzen wenn die Versandmenge der Auftragsposition gesetzt ist (DAB055.VMENGE > 0).

Diese Funktion funktioniert nur auf Artikelstamm - Masken

Parameter

cANUMMER:C | AuftragsNummer
nSprachNr:N | Sprach-ID; default = aktive BE-Sprache
lMitChargeText:L | Chargen-Text erzeugen; default = false
oDab010:O | Tabellenobjekt Dab010; default = Standard Dab010

Rückgabewert

Alphanumerisch - Stücklisten Text


GFCheck()

GFCheck() – Prüfung von Farbe / Größe

Beschreibung

Die Funktion prüft in der Farben und Größentabelle, ob eine Farbe / Größe existiert.

Parameter

cTyp:C | Typ: F - Farbe; G - Größe
nGruppe:N | Gruppennummer

Rückgabewert

Logisch / Boolean - Farbe / Größe existiert

Beispiel

if GFCheck('F', 1) then

   Meld('Die Farbe ist ' + FuG('F', 1, 'F1', 1)),

else

   Meld('Farbe existiert nicht'),

endif,


GPlanDel()

GPlanDel() – Anonyme Produktions-Grobplanung löschen

Beschreibung

Die Funktion löscht die Produktionsgrobplanung für alle anonymen Einträge, d.h. Einträge, die keinem Eintrag in einer Planungstabelle (DAB220, DAB215, DAB315, DAB320) zugeordnet sind.

Parameter

oDab280:O | Dab280-Tabelle
oDab410:O | Dab410-Tabelle
cArtNr:C | Nur Einträge für eine bestimmte Art.Nr. löschen (Default = leer = alle Artikel-Nummern)

Rückgabewert

Keiner

Beispiel

| oDab280, oDab410, oDBGet |

oDBGet  := CreateObject('TBeDBGet'),

oDab280 := DBGetTable(oDBGet, waDAB280),

oDab410 := DBGetTable(oDBGet, waDAB410),

GPlanDel(oDab280, oDab410),


HLager()

HLager() – Bestand eines Setartikels

Beschreibung

Die Funktion ermittelt den Bestand eines Setartikels und berücksichtigt dabei die Set-Bestandteile.

Parameter

cArtNr:C | Artikelnummer
cnLager:U | Lager
oDab010:O | Tabellenobjekt Dab010; default = Standard-Dab010
oDab210:O | Tabellenobjekt Dab210; default = Standard-Dab210

Rückgabewert

Numerisch - Bestand

Beispiel

HLager('KSH-809', 0)

Siehe auch:

RLager()


IBAN_Chk()

IBAN_Chk() – Prüfen einer IBAN

Beschreibung

Funktion überprüft, ob die übergebene IBAN (International Bank Account Number) den geltenden Konventionen entspricht und die IBAN-Prüfsumme korrekt ist.

Hinweis

Die Funktion gibt keine Auskunft darüber, ob die eingegebene IBAN tatsächlich existiert.

Parameter

cIBAN:C

IBAN, die überprüft werden soll

Rückgabewert

Logisch

Beispiel

If IBAN_Chk('DE3600000000000000000000') then

   WriteLn('IBAN ist korrekt')

Else

   WriteLn('IBAN ist fehlerhaft')

EndIf

Siehe auch:

BIC_Chk()


InitBDatum()

InitBDatum() – Buchungsdatum initiieren

Beschreibung

Die Funktion dient dem Füllen eines leeren Buchungsdatums (Erstinstallation).

Parameter

keine Parameter erwartet

Rückgabewert

Keiner


Is_ArtNr()

Is_ArtNr() – Bestand vorhanden

Beschreibung

Die Funktion prüft, ob für die übergebene Artikelnummer Bestand vorhanden ist.

Parameter

cArtNr:C

Artikelnummer

Rückgabewert

Logisch / Boolean - Bestand vorhanden

Beispiel

if Is_ArtNr('LS-200') then

   Meld('Artikel ist auf Lager.')

else

   Meld('Artikel ist nicht auf Lager.'),

endif,


IsLicense()

IsLicense() – Lizenz für Modul prüfen

Beschreibung

Die Funktion prüft, ob die Lizenz für ein business express - Modul vorhanden ist.

Parameter

nLicenseID:N

Lizenz-ID, die geprüft werden soll

Interne ID | Codeblock-Konstante
1 = Lagerverwaltung | liArticleMasterData
2 = Kunderverwaltung | liCustomerMasterData
3 = Druck - Belege | liPrintVouchers
4 = Festwerte | liParameters
5 = Formulargestaltung | liDesignForms
6 = Memos abfragen | liSearchMemos
7 = Auftragslisten | liOrderLists
8 = Eigenfertigung | liProduction
9 = Zuliefer - Einkauf | liSupplierMasterData
10 = Ausgabe Adressen | liPrintAddress
11 = Textbausteine | liTextModules
12 = Vertreter | liAgentMasterData
13 = Statistik | liStatistics
14 = Individualprogramme | liIndividualProgramms
15 = Filial-Kommunikation | liSubsidiaryCommunications
16 = Barverkauf | liCashSales
17 = Auftrags-Zeiterfassung | liOrderTimeRecording
18 = Datev | liDatev
19 = Ausfuhrerklärungen | liIntraStat
20 = Wareneingang / Qualitätssicherung | liStockReceiving
21 = Sprachen | liLanguage
22 = Vermietung | liRenting
23 = Fremdsprachige Benutzeroberfläche | liMultiLanguage
24 = Handelsstückliste | liTradePartList
25 = Farben und Größen | liColorSize
26 = Mehrwährungsfähigkeit | liMultiCurrency
27 = Sammelrechnung | liCollectInvoice
28 = Terminverwaltung | liTimeLimitAdmin
29 = Versandpapiere | liShippNotes
30 = Import-Modul | liImport
31 =Standort-Verwaltung | liLocationAdmin
32 = Finanzbuchhaltung | liFiBu
33 = FiBu - Liquiditätsanalyse | liFiBuLiqu
34 = Belegscan | liDocumentScan
35 = Artikel-Forecast | liForecast
36 = CRM-Serienaktionen | liCRMBatchAction
37 = Proj.Termin-Planung | liProjDateMgmt
38 = Fertigung Kapazitätsplanung | liProdCapaPlan
39 = Read-Only User | liReadOnlyUser
40 = FiBu Anlagenverwaltung | liFiBuAfA
41 = Named User License | liNamedUserLic
42 = FiBu Bankauszugsdaten | liFiBuBAD
43 = QS-Prüfungen | liQASystem
44 = Web-Server Kommunikation | liWebServerComm
45 = XML Kommunikation | liXMLComm
46 = Grafisches Chart für Ind.Programmierung | liIndiProgPlanningChart
47 = TCP-Kommunikation (Client) | liTCPCommClient
48 = Projektmanagement | liProjectManagement
49 = be-Application-Server | liBeApplicationServer
50 = Gleichzeitige Nutzung | liConcurrentUse
51 = be mobile-Services | liBeMobileServices
52 = MDE Maschinendatenerfassung | liMachineDataRecording
53 = erweiterte Web-Funktionen | liExtendedWebFunctions
54 = be external Services | liBeExternalServices
55 = EDI | liEDI
56 = Toolbox DMS | liDMS
57 = DATEV Export inkl. Beleg-Export | liDatevPdfExport
58 = Toolbox Schnittstelle DATEV-FIBU V2 | liDT2
59 = Toolbox Dublettenprüfung | liDBL
60 = Toolbox CAD-Schnittstelle | liCAD
61 = Toolbox Erweiterte Verfügbarkeitsprüfung | liVFP
62 = Toolbox GoogleMaps (API Codeblock-Wrapper, Demo-GUI) | liMAP
63 = Toolbox Sachmerkmalleisten | liSML
64 = Toolbox Historisierung von Auftragsbeständen für Verkauf und Einkauf | liHAU
65 = Toolbox Historisierung von Lagerbeständen | liHLA
66 = Toolbox Kapazitätsauswertung Grobplanung | liKGP
67 = Toolbox Funkscanner | liSCN
68 = Toolbox Lagerbuchführung | liLBF
69 = Toolbox Lieferantenbewertung | liLBW
70 = Toolbox Produktkostenrechnung | liPKR
71 = Toolbox Rahmenverträge im Einkauf | liREK
72 = Toolbox Rahmenverträge im Verkauf | liRVK
73 = Toolbox Vertreterportal | liPTL
74 = Toolbox Flexible Umsatzauswertung | liFUA
75 = Toolbox Erweiterte Versandsteuerung | liEVS
76 = Toolbox Paketschnittstelle DHL | liDHL
77 = Toolbox Paketschnittstelle UPS | liUPS
78 = Toolbox EBID-Daten aktualisieren | liEBI
79 = Toolbox Preisanfragen im Einkauf | liPAF
80 = Toolbox Elektronischer Rechnungsversand | liERV
81 = Toolbox Qualifizierte USt-ID Prüfung | liUID
82 = Toolbox Sanktionslistenprüfung | liSLP

Rückgabewert

Logisch / Boolean - Lizenz ist vorhanden

Beispiel

IsLicense(liQASystem)


Kom_2_APNr()

Kom_2_APNr() – Auftragsposition aus Kommissionsnummer

Beschreibung

Die Funktion ermittelt die Auftragspositionsnummer aus der Kommissionsnummer.

Parameter

cKommiss:C

Kommissionsnummer

Rückgabewert

Alphanumerisch - Auftragspositionsnummer. Falls keine Auftragsposition vorhanden: ‚?????????’

Beispiel

Kom_2_APNr('123456')


KontoName()

KontoName() – Kontoname

Beschreibung

Die Funktion ermittelt den Kontonamen eines Kontos.

Parameter

aBuchArt:C | Buchungsart; D / E / F = "Debitoren"; K / A = "Kreditoren"; S = "Sachkonten"
aKonto:N | Kontonummer
aDf010:O | Tabellenobjekt der DF010; default = nil
aDf030:O | Tabellenobjekt der DF030; default = nil
aDf040:O | Tabellenobjekt der DF040; default = nil

Rückgabewert

Alphanumerisch - Kontoname

Beispiel

KontoName('D', 4711)


KundLoesch()

KundLoesch() – Kunde löschen

Beschreibung

Die Funktion prüft, ob ein Kunde gelöscht werden kann bzw. löscht einen Kunden.

Parameter

nKdNr:N | Kundennummer
lShowMsg:L | Meldungen/Fragen anzeigen; default = true
lStatLoe:L | Einzel-Umsätze löschen; default = false; Achtung: True ist nicht mehr zulässig
lNurCheck:L | Nur Prüfen ob Löschen erlaubt, kein Löschvorgang; default = false
oDab000:O | Dab000 Tabelle; default = Standard Dab000

Rückgabewert

Logisch / Boolean - true - löschen war erfolgreich (lNurCheck = false)

- löschen wäre möglich (lNurCheck = true)

false - löschen fehlgeschlagen (lNurCheck = false)

- löschen nicht möglich (lNurCheck = true)

Beispiel

KundLoesch(900, false, false, true)


KundPreisCalc()

KundPreisCalc() – Kunden-Preis

Beschreibung

Die Funktion berechnet den Kunden-Netto-Preis eines Artikels (inkl. aller Rabatte, Sonderpreise, Staffeln, usw.) für einen Kunden in Eigenwährung.

Parameter

nCustNo:N | Kunden-Nr.
cArtNo:C | Artikel-Nr.
nQuant:N | Preis für Menge (in Lager-Einheiten)
oMem055:O | Tabellenobjekt der Memtable mit Struktur der DAB055; default = nil
oDab010:O | Tabellenobjekt DAB010; default = Standard Dab010
oDab000:O | Tabellenobjekt DAB000; default = Standard Dab000
oDab040:O | Tabellenobjekt DAB040; default = Standard Dab040;
oDab310:O | Tabellenobjekt DAB310; default = Standard Dab310
oDab510:O | Tabellenobjekt DAB510; default = Standard Dab510
nPreisNr:N | Zu verwendende Preis-Nr.; default = -1 (Übernahme vom Kunden)
oDab160:O | Tabellenobjekt DAB160; default = Standard Dab160
cProgID:C | Individuelle Prog-ID (wird an aufgerufene Events weitergegeben)

Rückgabewert

Numerisch - Netto-Preis in EW

Beispiel

KundPreisCalc(12345678, 'BSP_ART', 1)

Siehe auch:

KundPreisCalcAll()

KundPreisCalc2()


KundPreisCalc2()

KundPreisCalc2() – Kunden-Preis

Beschreibung

Die Funktion berechnet den Kunden-Netto-Preis (inkl. aller Rabatte, Sonderpreise, Staffeln, usw.) für einen Kunden in Eigenwährung.

Parameter

oDM:O | Datenmodul-Objekt
nCustNo:N | Kunden-Nr.
cArtNo:C | Artikel-Nr.
nQuant:N | Preis für Menge (in Lager-Einheiten)
nPreisNr:N | Zu verwendende Preis-Nr.; default = -1 (Übernahme vom Kunden)
cProgID:C | Individuelle Prog-ID (wird an aufgerufene Events weitergegeben)
dGueltigPer:D | Datum, zu welchem die Sonder-Kondition gültig ist (leer = Tagesdatum)

Rückgabewert

Numerisch - Netto-Preis in EW

Beispiel

| oDM |

KundPreisCalc2(oDM, 12345678, 'BSP_ART', 1)

Siehe auch:

KundPreisCalcAll()


KundPreisCalcAll()

KundPreisCalcAll() – Kunden-Preis Konditionen

Beschreibung

Die Funktion berechnet die Kunden-Preis-Konditionen eines Artikels für einen Kunden in Eigenwährung.

Parameter

nCustNo:N | Kunden-Nr.
cArtNo:C | Artikel-Nr.
nQuant:N | Menge (in Lager-Einheiten)
oMem055:O | Tabellenobjekt der Memtable mit Struktur der DAB055; default = nil
oDab010:O | Tabellenobjekt DAB010; default = Standard Dab010
oDab000:O | Tabellenobjekt DAB000; default = Standard Dab000
oDab040:O | Tabellenobjekt DAB040; default = Standard Dab040;
oDab310:O | Tabellenobjekt DAB310; default = Standard Dab310
oDab510:O | Tabellenobjekt DAB510; default = Standard Dab510
oDab050:O | Tabellenobjekt DAB040; default = Standard Dab050;
nPreisNr:N | Zu verwendende Preis-Nr.; default = -1 (Übernahme vom Kunden)
oDab160:O | Tabellenobjekt DAB160; default = Standard Dab160
cProgID:C | Individuelle Prog-ID (wird an aufgerufene Events weitergegeben)

Rückgabewert

Array- {     [ 1]Währung,

                  [ 2]Brutto-Preis,

                  [ 3]PE,

                  [ 4]{ PosRab1, PosRab2, PosRab3 },

                  [ 5]{ GesRab1, GesRab2 },

                  [ 6]Nettopreis,

                  [ 7]Menge(false)/Wert(true),

                  [ 8]Rabatt(false)/Netto(true),

                  [ 9]{ { Staffel-Menge1/Wert1, Staffel-Rabatt%1/Netto1 },

                        { Staffel-Menge2/Wert1, Staffel-Rabatt%2/Netto2 },

                        {...} },

                  [10]Kalkulierter-Netto-Preis,

                  [11]Dab040-Datensatz-Nr.

                  [12]{ { Zusatzkosten-Text1, Zusatzkosten-Typ1, Zusatzkosten1 },

                        { Zusatzkosten-Text2, Zusatzkosten-Typ2, Zusatzkosten2 },

                        { Zusatzkosten-Text3, Zusatzkosten-Typ3, Zusatzkosten3 } }

}

Beispiel

// Beispiel im Positionsbrowser der Auftragsbearbeitung

| nCustNo:N := 220, cArtNo:C := '', nQuant:N := 0, aResult |

nCustNo := DAB055:KDNR,

cArtNo  := DAB055:ARTNR,

nQuant  := DAB055:BMENGE,

aResult := KundPreisCalcAll(nCustNo, cArtNo, nQuant),

aResult[6]  // Netto-Preis -> entspricht KundPreisCalc()

Siehe auch:

KundPreisCalc()

KundPreisCalc2()

KundPreisCalcAll2()


KundPreisCalcAll2()

KundPreisCalcAll2() – Kunden-Preis Konditionen

Beschreibung

Die Funktion berechnet die Kunden-Preis-Konditionen für einen Kunden in Kunden- bzw. Auftrags-Währung.

Parameter

oDM:O | Datenmodul-Objekt
nCustNo:N | Kunden-Nr.
cArtNo:C | Artikel-Nr.
nQuant:N | Menge (in Lager-Einheiten)
nPreisNr:N | Zu verwendende Preis-Nr.; default = -1 (Übernahme vom Kunden)
cProgID:C | Individuelle Prog-ID (wird an aufgerufene Events weitergegeben)
dGueltigPer:D | Datum, zu welchem die Sonder-Kondition gültig ist (leer = Tagesdatum)
nCalcOrdNo:N | Auftrags-Nr. zur Bestimmung der Währung; default = 0 (Währung aus den Kundendaten)

Rückgabewert

Array- {     [ ccpCurrID ]                                   Währung

                  [ ccpSinglePrice ]                              Brutto-Preis

                  [ ccpPriceUnit ]                                Preis-Einheit

                  [ ccpDiscount, 1..3 ]                           Pos.-Rabatt 1 - 3

    [ ccpTotalDiscount, 1..2 ]                      Gesamt-Rabatt 1 - 2

    [ ccpNetPrice ]                                 Nettopreis

    [ ccpRateValue ]                                Menge(False) / Wert(True)

    [ ccpRateDiscount ]                             Rabatt(False) / Netto(True)

    [ ccpQuantRate, 1..10,                          Rabatt-Staffel 1 - 10

        { Staffel-Menge  oder Wert,

          Staffel-Rabatt oder Netto

        }

    ]

    [ ccpNetPriceQuant ]                            Kalk. Netto-Preis,

    [ ccpD040RecNo ]                                Dab040-Datensatz-Nr.

    [ ccpExtra, 1..3,                               Zuschläge 1 - 3

        { ccpExtraText,                             Zuschlag-Text

          ccpExtraMode,                             Zuschlag-Art (Kennzeichen)

          ccpExtraCost,                             Betrag in Eigenwährung

          ccpExtraCostFW,                           Betrag ggf. in Fremdwährung

          ccpExtraDisplayText                       Zuschlag-Art (Text)

        }

    ]

}

Beispiel

| oDM, oDab050, oDab000, aRes, cStr, i |

Function PrintCurr(nCurrID)

  Result:= Str(nCurrID) + ' - ' +

           CurrSign(nCurrID)    +

           IIf(CurrConvSales(nCurrID) = 'J', '*', '')

End,

Function PrintStaffelTyp(bTyp)

  Result:= If(bTyp, 'ab Wert', 'ab Menge')

End,

Function PrintStaffelRabattTyp(bRabattTyp)

  Result:= If(bRabattTyp, 'Rabatt', 'Netto-Preis')

End,

Function PrintStaffelArray(bTyp, bRabattTyp, aArray)

| i |

  Result:= PadR(PrintStaffelTyp(bTyp), 11) + PrintStaffelRabattTyp(bRabattTyp)    + CrLf,

  For i:= 1 to ALen(aArray) do

      Result += Space(19) + PadR(aArray[i, 1], 10) + ' ' + Str(aArray[i, 2]) + CrLf

  Next

End,

//---------

oDM:= CreateObject('TBeDBGet'),

StartSeq

   aRes:= KundPreisCalcAll2(oDM, 10006, 'TEST-20', 1),

   cStr:= 'Währung          : ' + PadR(PrintCurr(aRes[ccpCurrID]), 25) +

                                  ' (Kundenwährung oder Währung des Auftrags)'               + CrLf +

          'Brutto-Preis     : ' + PadR(Str(aRes[ccpSinglePrice]), 25) +

                                  ' (in o.a. Währung)'                                       + CrLf +

          'Preis-Einheit    : ' + PadR(Str(aRes[ccpPriceUnit]), 25) +

                                  ' (aus Artikelstamm)'                                      + CrLf +

          ' Pos.-Rabatte  1 : ' + PadR(Str(aRes[ccpDiscount, 1]), 25) +

                                  ' (aus Sonderkondition Dab040, falls vorhanden)'           + CrLf +

          '               2 : ' + Str(aRes[ccpDiscount, 2])                                  + CrLf +

          '               3 : ' + Str(aRes[ccpDiscount, 3])                                  + CrLf +

          ' Ges.-Rabatte  1 : ' + PadR(Str(aRes[ccpTotalDiscount, 1]), 25) +

                                  ' (aus Kundenstamm)'                                       + CrLf +

          '               2 : ' + Str(aRes[ccpTotalDiscount, 2])                             + CrLf +

          'Netto-Preis      : ' + PadR(Str(aRes[ccpNetPrice]), 25) +

                                  ' (Netto-Preis, Positions- und Gesamt-Rabatte verrechnet)' + CrLf +

          'Staffel          : ' + PrintStaffelArray(aRes[ccpRateValue],

                                                    aRes[ccpRateDiscount],

                                                    aRes[ccpQuantRate]) +

          'kalk.Netto-Preis : ' + PadR(Str(aRes[ccpNetPriceQuant]), 25) +

                                  ' (kalkulierter Preis für die angegebene Menge)',

   If !Empty(aRes[ccpD040RecNo]) then

       For i:= 1 to 3 do

          cStr:= cStr       + CrLf + CrLf +

          'Zuschlag-Text  ' + Str(i) + ' : ' + aRes[ccpExtra,     i, ccpExtraText]        + CrLf +

          'Zuschlag-Art   ' + Str(i) + ' : ' + aRes[ccpExtra,     i, ccpExtraMode]        + CrLf +

          'Zuschlag in EW ' + Str(i) + ' : ' + Str(aRes[ccpExtra, i, ccpExtraCost])       + CrLf +

          'Zuschlag in FW ' + Str(i) + ' : ' + Str(aRes[ccpExtra, i, ccpExtraCostFW])     + CrLf +

          'Beschreibung   ' + Str(i) + ' : ' + aRes[ccpExtra,     i, ccpExtraDisplayText] + CrLf

      Next,

   EndIf,

Always

  DestroyObject(oDM)

StopSeq,

WriteLn(cStr)

Siehe auch:

KundPreisCalc2()


KundRab_Sperr()

KundRab_Sperr() – Kunden Rabatt-Sperre

Beschreibung

Die Funktion führt die Formel der Rabatt-Sperre in den allgemeinen Parametern aus, und gibt das Ergebnis zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Logisch / Boolean - Formel Rabatt-Sperre

Beispiel

KundRab_Sperr()

Kontakt zum Support | www.dontenwill.de


KundSperrUpd()

KundSperrUpd() – Aktualisierung des Kundensperrkennzeichens

Beschreibung

Die Funktion aktualisiert das Kundensperrkennzeichen.

Parameter

cNewValue:C

Neuer Wert

Rückgabewert

Alphanumerisch - Neues Kundensperrkennzeichen


Lager()

Lager() – Lagerbestand abfragen

Beschreibung

Die Funktion summiert die Bestände aller Lager, die in den Festwerten als verfügbar definiert wurden. oDab010 muss auf entsprechenden Artikel positioniert werden.

Parameter

cStore:C | Einzelnes Lager oder '' für alle in den Festwerten definierte verfügbaren Lager
oDab010:O | Tabellenobjekt DAB010; default = Standard Dab010
lPhysisch:L | Reservierungen berücksichtigen; default = false true - Reservierungen ignorieren false - Reservierungen miteinberechnen

Rückgabewert

Numerisch - Lagerbestand

Beispiel

Lager()

Siehe auch:

HLager()

RLager()


LagerOrt2Array()

LagerOrt2Array() – Lager

Beschreibung

Die Daten eines Lagerorts werden als zweidimensionales Array ausgegeben. Jeder Datensatz und jeder Feldwert des Lagerorts werden ausgegeben.

Parameter

aText:C

LagerOrt

Rückgabewert

Array -       { {Field1,Field2,Field3,...,Fieldn},     //Datensatz 1

                {Field1,Field2,Field3,...,Fieldn},     //Datensatz 2

                (...),

                {Field1,Field2,Field3,...,Fieldn}      //Datensatz n

              }

Beispiel

| oDab055:DB := 'waDAB055, DAB056' |

LagerOrt2Array(oDab055:LAG_ORT)


LagName()

LagName() – Lagerbezeichnung

Beschreibung

Funktion zum Ermitteln der Bezeichnung einer Lager-Nr eines Standorts.

Parameter

uLagerNr:U | Lagernummer
nStandort:N | Für Standort-Nr., default = -1 = aktueller Standort

Rückgabewert

Alphanumerisch - Lagerbezeichnung

Beispiel

LagName(0)


LagOrtArray()

LagOrtArray() – Umwandlung eines LAG_ORT-Feldes ins Array-Format

Beschreibung

Die Funktion konvertiert das bis business express Version 5.7 gültige Speicherungsformat in LAG_ORT-Feldern (Dab055:LAG_ORT, Dab160:LAG_ORT, etc.) in das ab Version 5.8. gültige Array-Format.

Hinweis

Falls das Array per Codeblock ausgelesen werden soll, muss der Zugriff über die registrierten Index-Konstanten (loa_Quantity, loa_Store, etc) geschehen.

Parameter

cLagOrt:C

Inhalt von LAG_ORT im 5.7 Format

Rückgabewert

Array

Beispiel

| cOldLAG_ORT, aNewLagORT, i |

// 5.7. LAG_ORT - Format, z.B. aus Dab055:LAG_ORT

cOldLAG_ORT := '          -10¦A7B2D   ¦CHARGE1      ¦21.01.08' +

               '          -20¦A7C4E   ¦CHARGE2      ¦21.01.08' +

               '          -30¦--      ¦CHARGE3      ¦21.01.08',

// Konvertierung in neues Format

aNewLagORT  := LagOrtArray(cOldLAG_ORT),

// Ausgabe als Zeilen-Arrays

for i := 1 to ALen(aNewLagORT) do

   WriteLn( ArrToStr(aNewLagORT[i])),

next,

writeln(crlf + crlf),

// Ausgabe als lesbarer Text

for i := 1 to ALen(aNewLagORT) do

   WriteLn( ' ----------------------- ' ),

   WriteLn( ' Menge:       ' + padl(     aNewLagORT[i, loa_Quantity],  10) + crlf +

            ' Lager:       ' + padl(     aNewLagORT[i, loa_Store],     10) + crlf +

            ' Platz:       ' + padl(     aNewLagORT[i, loa_Place],     10) + crlf +

            ' Behälter:    ' + padl(     aNewLagORT[i, loa_Container], 10) + crlf +

            ' Charge/Ser.: ' + padl(     aNewLagORT[i, loa_Commiss],   10) + crlf +

            ' Datum:       ' + padl(DToC(aNewLagORT[i, loa_Date]),     10) ),

next,


LagReserv()

LagReserv() – Lagerreservierung

Beschreibung

Die Funktion liefert den Bestand aller reservierten Mengen zu einem Artikel.

Parameter

cArtNr:C | Artikelnummer
cLagerList:C | Liste der Lagerorte; default = Leerstring
cTermIndexVon:C | Von Termin; default = Leerstring
cTermIndexBis:C | Bis Termin; default = Leerstring
nStandort:N | Standort; default = -1
lAsArray:L | Ergebnis als Array ausgeben; default = false

Rückgabewert

Reservierungsmenge oder Array - je nach Parameter lAsArray

Wird die Array-Rückgabe gewählt, besteht die Rückgabe aus einem Array mit einem Element je Lagernr. (1. Element = Lager 0, 2. Element = Lager 1, usw.)

Beispiel

LagReserv('LS-200')


LBuch()

LBuch() – Lagerbuchung

Beschreibung

Funktion zur Lagerbuchung.

Je nach Buchungsart muss unter anderem

- Der entsprechende Dab020-Eintrag "von Hand" erstellt werden.

- Wird eine übergebene Kommissions- oder Platz-Nr. u.U. nicht berücksichtig

- Wie bei allen BE-Lagerbuchungsfunktionen muss sichergestellt sein, dass bei

Übergabe einer Platz-Nr. im Kommiss.Array, die für die Lager-Nr. gültig und verfügbar ist.

- Wird eine Größenklasse angegeben, muss diese mit der Lagerort-Größenklasse übereinstimmen.

- Wird eine Reservierungs-ID angegeben, muss ein entsprechend reservierter Lagerort existieren.

Ist ein Lagerort bereits für eine abweichende ID reserviert, wird eine Exception ausgelöst.

- Sollte der Buchungsdialog oder alternativ die Kommissions- und Platz-Vorgabe über

das "vor Lagerbuchung"-Ereignis erfolgen

Hinweis

Die Funktion LUmlag() ermöglicht mit einfachen Mitteln vollständige Ein-/Aus- und Umlagerungen per Codeblock.

Im Gegensatz zu LBuch() schreibt LUmlag() die Lagerkartei (DAB020) selbständig fort.

Parameter

oAdsConnect:O | AdsConnection für äußere Transaktion (erforderlich, z.B. Dab010.AdsConnection)
cArtnr:C | Artikel-Nr.
cLager:C | Lager-Nr.
nMenge:N | Menge (+/-)
dDatum:D | Buchungsdatum
cBuArt:C | Buchungsart
cBelegnr:C | Belegnr
uKommiss:U | Kommission (leer erlaubt)
nPersnr:N | Kd./Lief.Nr. (Null erlaubt)
cText:C | Buchungs-Text (leer erlaubt)
cLagort:C | Vorgabe-Lagerort (nur bei Abgang)
oDab010:O | Dab010
lNoCardPrint:L | Keinen Lagerschein drucken; default = false
lQuietMode:L | Keinen Buchungsdialog anzeigen; default = false
lRaiseError:L | Im Fehlerfall Laufzeitfehler auslösen; default = false
lShowDlgOnErr:L | Bei ungültiger Platzvorgabe (u.ä.) Buchungsdialog anzeigen; default = false
oDab055:O | Tabellenobjekt DAB055; default = Standard Dab055
oDab610:O | Tabellenobjekt DAB610; default = Standard Dab610
oDab720:O | Tabellenobjekt DAB720; default = Standard Dab720
oDab020:O | Tabellenobjekt DAB020; default = Standard Dab020
oDab710:O | Tabellenobjekt DAB710; default = Standard Dab710
oDab730:O | Tabellenobjekt DAB730; default = Standard Dab730
oDab050:O | Tabellenobjekt DAB050; default = Standard Dab050
oDab255:O | Tabellenobjekt DAB255; default = Standard Dab255
oDab250:O | Tabellenobjekt DAB250; default = Standard Dab250
cProgID:C | Freie Zeichenfolge zur Übergabe an BE-Events; default = Leerstring
nGroeKlasse:N | Größenklasse; default = 0
nReservID:N | Reservierungs-ID; default = 0
nEntnSchNr:N | Entn.Schein-Nr.; default

Rückgabewert

Logisch / Boolean - Lager-Buchungs-Fenster

Beispiel

| oDab010:DB := 'waDAB010, DAB011' |

LBuch(oDab010.AdsConnection,

      "01-0015", "00", 10, mbdatum,

      "E",

      "", "", 0, "", "", oDab010, false, true, false, true)


Lief_Sperr()

LiefSperr() – Liefersperre

Beschreibung

Die Funktion dient der Abfrage des Sperrkennzeichens im Kundenstamm.

Parameter

nKdNr:N | Kundennr.
oDab000:O | Tabellenobjekt DAB000; default = Standard Dab000

Rückgabewert

Logisch / Boolean - Liefersperre

Beispiel

| oDab000:DB := 'waDAB000, 1' |

Lief_Sperr(900, oDab000)

Siehe auch:

Auf_Sperr()


LiefDiffBuch()

LiefDiffBuch() – Lieferdifferenzen buchen

Beschreibung

Die Funktion bucht Lieferdifferenzen für einen Auftrag bzw. eine Lieferung.

Parameter

aDelivNo:N

Lieferscheinnr.

aOrderNo:N

Auftragsnr.

aChgOrdQuant:L

Anpassung der Bestellmengen (bzw. Löschung Position bei Storno)

aDiffStore:C

Differenz-Menge ggf. auf dieses Lager buchen

aDiffArray:A

Array:

{

{ Auftragsposition, { { Kommiss, Platz, Menge }, { Kommiss, Platz, Menge }, (...) }},

{ Auftragsposition, { { Kommiss, Platz, Menge }, { Kommiss, Platz, Menge }, (...) }},

(...)

}

Wird das Array { Kommiss, Platz, Menge } leer {} übergeben, wird die entsprechende Auftragsposition storniert!

aStornoAll:L

Total-Storno

aShowMsg:L

(Fehler-)Meldungen werden als Meldung angezeigt

aErrMsg:R

Fehlermeldung; default = null

Rückgabewert

Logisch / Boolean - Buchung erfolgreich

Beispiel

LiefDiffBuch(280942, 0, false, "4", {

                                    {"187789  1", {{"400000", "",1}, {"400002", "", 1}}},

                                    {"187789  2", {}}

                                    },

                                    false,

                                    true)


LiefNr()

LiefNr() – Lieferantennummer

Beschreibung

Die Funktion ermittelt die Lieferantennummer zu dem jeweiligen Satz der übergebenen Tabelle. In einem Funktionsaufruf muss immer genau eine Tabelle übergeben werden!

Parameter

oDab010:O | Tabellenobjekt des Artikelstamms; default = nil
oDab510:O | Tabellenobjekt der Artikelzulieferer; default = nil
oDab100:O | Tabellenobjekt des Zuliefererstamms; default = nil
oDab210:O | Tabellenobjekt der Stückliste; default = nil

Rückgabewert

Undefiniert

Beispiel

| oDAB010:DB := 'waDAB010, DAB011' |

DBGoTop(oDAB010),

DBSkip(2, oDAB010),

LiefNr(oDAB010)


LocationActive()

LocationActive() – Standortprüfung

Beschreibung

Die Funktion prüft, ob der aktuelle Standort aktiv ist.

Parameter

keine Parameter erwartet

Rückgabewert

Logisch / Boolean - Standort aktiv

Beispiel

LocationActive()

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationCompany()

LocationCustNo()

LocationExists()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


LocationCompany()

LocationCompany() – Firmenzugehörigkeit

Beschreibung

Die Funktion gibt die Firmenzugehörigkeit/Standort-Nummer eines Standortes zurück. Diese Nummer ist in den Allgemeinen Parametern unter dem jeweiligen Standort zu finden.

Parameter

aLocation:N

Nummer des Standortes (mstandort = aktueller Standort)

Rückgabewert

Numerisch - Standort. Falls Standort-Nummer ungültig ist: -1

Beispiel

LocationCompany(mstandort)

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCustNo()

LocationExists()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


LocationCustNo()

LocationCustNo() – Kundennummer des Standorts

Beschreibung

Die Funktion gibt die KundenNr. eines Standortes zurück. Unter dieser Nummer ist der Standort als Kunde vorhanden. Diese Nummer ist in den Allgemeinen Parametern unter dem jeweiligen Standort zu finden.

Parameter

aLocation:N

Nummer des Standortes (mstandort = aktueller Standort)

Rückgabewert

Numerisch - Kundennummer des Standorts. Falls Standort-Nummer ungültig ist: -1

Beispiel

LocationCustNo(mstandort)

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCompany()

LocationExists()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


LocationExists()

LocationExists() – Standort-Prüfung

Beschreibung

Die Funktion prüft, ob ein Standort existiert.

Parameter

aLocation:N

Nummer des Standortes (mstandort = aktueller Standort)

Rückgabewert

Logisch / Boolean

Beispiel

LocationExists(mstandort)

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


LocationInfo()

LocationInfo() – Standort-Informationen

Beschreibung

Die Funktion gibt ein TLocationInfo-Objekt mit allen Informationen eines Standortes zurück.

Parameter

aLocation:N

Nummer des Standortes (mstandort = aktueller Standort)

Rückgabewert

Objekt - TLocationInfo-Objekt. Falls die Nummer des Standortes ungültig ist: NIL

Objekt-Eigenschaften:

- allowed // Erlaubnis

- company // Firmenzugehörigkeit Standort

- custdepart // VK-Abteilung für sto.Umlagerung

- custno // Kundennr. Standort

- custtype // Empfängertyp für sto.Umlagerung

- locname // Mandanten/Abteilungs-Name

- locno // Standort-Nummer

- ordtypeext // Auftragsart für Lieferung firmenextern

- ordtypeint // Auftragsart für Lieferung firmenintern

- suppdepart // EK-Abteilung. für sto.Umlagerung

- suppno // Lieferantennr. Standort

Beispiel

| oLocInfo |

oLocInfo := LocationInfo(mstandort),

WriteLn(oLocInfo.custno),

WriteLn(oLocInfo.suppno),

WriteLn(oLocInfo.company),

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationExists()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


LocationName()

LocationName() – Standortname

Beschreibung

Die Funktion gibt den Namen / Mandanten eines Standortes zurück. Dieser Name ist in den Allgemeinen Parametern unter dem jeweiligen Standort zu finden.

Parameter

aLocation:N

Nummer des Standortes (mstandort = aktueller Standort)

Rückgabewert

Alphanumerisch - Standortname. Falls Standort-Nummer ungültig ist: keiner

Beispiel

LocationName(mstandort)

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationExists()

LocationInfo()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


LocationSuppNo()

LocationSuppNo() – Lieferantennummer eines Standortes

Beschreibung

Die Funktion gibt die LieferantenNr. eines Standortes zurück. Unter dieser Nummer ist der Standort als Lieferant vorhanden. Diese Nummer ist in den Allgemeinen Parametern unter dem jeweiligen Standort zu finden.

Parameter

aLocation:N

Nummer des Standortes (mstandort = aktueller Standort)

Rückgabewert

Numerisch - Lieferantennummer des Standorts. Falls Standort-Nummer ungültig ist: -1

Beispiel

LocationSuppNo(mstandort)

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationExists()

LocationInfo()

LocationName()

SuppLocationCompany()

SuppLocationInfo()

SuppLocationNo()


LUmlag()

LUmlag() – Lagerumbuchung

Beschreibung

Die Funktion dient dem manuellen Umlagern von Waren.

Wie bei allen BE-Lagerbuchungsfunktionen muss sichergestellt sein, dass bei Übergabe einer Platz-Nr. im Kommiss.Array, diese für die Lager-Nr. gültig und verfügbar ist!

Wird eine Größenklasse angegeben, muss diese mit der Lagerort-Größenklasse übereinstimmen.

Wird eine Reservierungs-ID angegeben, muss ein entsprechend reservierter Lagerort existieren.

Ist ein Lagerort bereits für eine abweichende ID reserviert, wird eine Exception ausgelöst.

Parameter

oDM:O | Datenmodul (TBeDBGet)
cArtnr:C | Artikelnummer
cLagerVon:C | Quell-Lagernr.
aKommissArrVon:A | Quell-Komiss./Platz-Array. Format: { { <Kommission>, <Menge> [,<Platz> [,<Verfallsdatum> [,<BehälterNr>; [,<EinwegBehälterTyp>]]]]}, { ... }; }
nMengeVon:N | Abgangsmenge
cLagerAn:C | Ziel-Lager-Nr.
aKommissArrAn:A | Ziel-Komiss./Platz-Array. Format: { { <Kommission>, <Menge> [,<Platz> [,<Verfallsdatum> [,<BehälterNr>; [,<EinwegBehälterTyp>]]]]}, { ... }; }
nMengeAn:N | Zugangsmenge
cBuart:C | Buchungsart; default = 'U'
cBelegnr:C | Belegnummer; default = Leerstring
cText:C | Buchungstext; default = Leerstring
lNoCardPrint:L | Keine Lagerkarte drucken; default = false
lQuietMode:L | Kein Buchungsdialog; default = qmQuiet
lShowDlgOnErr:L | Fehler im Dialog zeigen; default = false
cProgID:C | Indiv.Progamm-ID; default = 'Codeblock RestoreAccounting'
nGroeKlasse:N | Geforderte Größenkklasse (0 = Gr.Klasse ignorieren); default = 0
nReservID:N | Lagerort-Reservierungs-ID (hat Priorität vor <Platz>-Angabe in aKommissArrAn !!); default = 0
nEntnSchNr:N | Entn.Schein-Nr.; default = 0
lIgnAuftrRes:L | Auftragsreservierungen vollständig ignorieren (entspricht manueller Inventur-Korrektur); default = false
cKommissVon:C | Abgangs-Kommission zum Eintrag in die Lagerkartei; default = Leerstring
cKommissAn:C | Zugangs-Kommission zum Eintrag in die Lagerkartei; default = Leerstring; Wichtig: Für Erstellung neuer Einwegbehälter <BehälterNr> 0 übergeben

Rückgabewert

Keiner

Beispiel

| oDM, aCommissVon, aCommissAn |

oDM := CreateObject('TBeDBGet'),

// Auslagern Charge R15 von Platz 001C04D3, Behälter 500001

aCommissVon := {{'R15', 20, '001C04D3', 500001}},

// Einlagern Charge R15 auf Platz 001C04D4, neuer EinwegBehälter Typ 30

aCommissAn  := {{'R15', 20, '001C04D4', , 0, 30}},

LUmlag(oDM, 'GRKL1',

       '04', aCommissVon, 20,

       '03', aCommissAn,  20,

       'U',  'TEST', 'Test-Text',

       true, true, false, 'UML_TEST',

       0, 0)


m2Verfueg()

m2Verfueg() – Verfügbarkeit Minus2 Artikel

Beschreibung

Die Funktion gibt die Anzahl an verfügbaren Artikeln für einen minus2 Artikel zurück.

Parameter

oDab240:O | Tabellenobjekt DAB240
oDab010:O | Tabellenobjekt DAB010
oDab055:O | Tabellenobjekt DAB055
cLager:C | Nur für diese Lager-Nr (Verkauf)
lFertigung:L | Berechnung für Produktions-Bedarf

Rückgabewert

Numerisch - Anzahl verfügbarer Artikel

Beispiel

| oDab240:DB := 'waDAB240', oDab010:DB := 'waDAB010', oDab055:DB := 'waDAB055' |

m2Verfueg(oDab240, oDab010, oDab055, "00", false)


MailAttDelete()

MailAttDelete() – Attachement löschen

Beschreibung

Mit MailAttDelete() kann eine gespeicherte Datei über Ihren Dateinamen aus einem Blob-Feld gelöscht werden (das Blob-Feld kann mehrere Dateien enthalten). Die Funktion wird hauptsächlich dafür genutzt, eine angehängte Datei eines Memos zu löschen. Die übergebene Tabelle muss vor dem Aufruf der Funktion in den Edit-Modus versetzt und der Datensatz positioniert werden. Zum Speichern der Änderungen in der Tabelle muss anschließend ein Post ausgeführt werden.

Hinweis

- Die Dateien werden in dem Blob-Feld in gepackter Form (ZIP-komprimiert) gespeichert.

- Es ist nicht möglich, das Blob-Feld für andere Zwecke als der Speicherung von Dateien zu verwenden.

- Es ist nicht möglich direkt auf die Dateiinhalte zuzugreifen, einen Volltextindex auf das Blob-Feld zu erstellen oder ähnlich direkte Operationen durchzuführen

- Operationen, welche Dateien dem Blob-Feld hinzufügen bzw. aus dem Blob-Feld löschen arbeiten relativ langsam, da immer das gesamte Blob-Feld neu aufgebaut werden muss.

Parameter

oTable:O | Tabelle, die das Attachement enthält
cField:C | Name des Feldes
cDeleteFile:C | Name der zu löschenden Datei
lIsCID:L | Name ist eine CID

Rückgabewert

Keiner

Beispiel

| oDab065:DB := 'waDAB065, DAB066', cFileName |

// Anhang löschen

DBEdit(oDab065),

cFileName := InputBox('LÖSCHEN', 'Anhang:', ''),

MailAttDelete(oDab065, "DATA", cFileName, false),

DBPost(oDab065),


MailAttLoadFromFile()

MailAttLoadFromFile() – Attachement laden

Beschreibung

Mit MailAttLoadFromFile() kann eine Datei mit Ihrem Dateinamen einem Blob-Feld hinzugefügt werden (das Blob-Feld kann mehrere Dateien enthalten). Die Funktion wird hauptsächlich dafür genutzt, einem Memo einen Anhang hinzuzufügen. Die übergebene Tabelle muss vor dem Aufruf der Funktion in den Edit-Modus versetzt und der Datensatz positioniert werden. Zum Speichern der Änderungen in der Tabelle muss anschließend ein Post ausgeführt werden.

Hinweis

- Die Dateien werden in dem Blob-Feld in gepackter Form (ZIP-komprimiert) gespeichert.

- Es ist nicht möglich, das Blob-Feld für andere Zwecke als der Speicherung von Dateien zu verwenden.

- Es ist nicht möglich direkt auf die Dateiinhalte zuzugreifen, einen Volltextindex auf das Blob-Feld zu erstellen oder ähnlich direkte Operationen durchzuführen

- Operationen, welche Dateien dem Blob-Feld hinzufügen bzw. aus dem Blob-Feld löschen arbeiten relativ langsam, da immer das gesamte Blob-Feld neu aufgebaut werden muss.

Parameter

oTable:O | Tabelle, die das Blob-Feld enthält
cField:C | Name des Feldes
cSourceFile:C | Name der zu ladenden Datei
lSaveLinkOnly:L | LadeModus; False = Datei in das Feld kopieren; True = Nur Verweis auf die Datei speichern

Rückgabewert

keiner

Beispiel

| oDab065:DB := 'waDAB065, DAB066', cFileName |

// Anhang laden

DBEdit(oDab065),

cFileName := InputBox('Laden', 'Datei:', ''),

MailAttLoadFromFile(oDab065, "DATA", cFileName, false),

DBPost(oDab065),


MailAttLoadList()

MailAttLoadList() – Liste und Eigenschaften Attachement

Beschreibung

Mit MailAttLoadList() können die gespeicherten Dateien und deren Eigenschaften eines Blob Feldes ermittelt werden. (Das Blob-Feld kann mehrere Dateien enthalten). Die Funktion wird hauptsächlich dafür genutzt, den Anhang eines Memos zu untersuchen. Die übergebene Tabelle muss vor dem Aufruf der Funktion auf dem entsprechenden Datensatz positioniert werden.

Hinweis

Sind die optionalen Parameter bSkipLinks und bSkipEmbedded aktiviert, so enthält die Rückgabeliste nur "echte" Datei-Anhänge . Für den Zugriff auf Memo-Anhänge Klassen-Methode von TBeMemoBo benutzen.

Parameter

oTable:O | Tabelle, die das Blob-Feld enthält
cField:C | Name des Feldes
bSkipLinks:L | Links ignorieren
bSkipEmbedded:L | Eingebettete Dateien (von Mails) ignorieren

Rückgabewert

Array - Aufbau des Arrays:

{ { Index[1]:N, Offset[2]:N, ZipSize[3]:N, FileSize[4]:N, FileName[5]:C, FileType[6]:N, ContentID[7]:C }, { ... }, ... }

Beispiel

| aAtt, i, cRes, oDab065:DB := 'waDAB065, DAB06B' |

// Anhänge auflisten

cRes := 'Anhänge:' + crlf,

aAtt := MailAttLoadList(oDab065, "DATA"),

if not Empty(aAtt) then

   for i := 1 to Len(aAtt) do

      WriteLn(aAtt[i]),

      cRes := cRes +

             'Nummer: '  + Str(aAtt[i,1]) +

             ' Name: '   + aAtt[i,5] +

             ' Typ: '    + Str(aAtt[i,6]) +

             ' Größe: '  + Str(aAtt[i,4]) + crlf,

   next,

endif,

Meld(cRes),


MailAttSaveFullHtmlToFile()

MailAttSaveFullHtmlToFile() – HTML-Attachement speichern

Beschreibung

Mit MailAttSaveFullHTMLToFile() kann eine gespeicherte HTML-Datei in einem Zielverzeichnis bzw. -datei gespeichert werden.

Die Funktion wird hauptsächlich dafür genutzt um HTML-Seiten zu speichern, die als Anhang an ein Memo angehängt wurden. Die übergebene Tabelle muss vor dem Aufruf der Funktion auf dem entsprechenden Datensatz positioniert werden.

Die Funktion speichert eine vollständige Kopie der gespeicherterten HTML-Datei (im BE-Memo heißt diese immer "ORIGINAL.HTM") inkl. aller Bilder und sonstiger eingebetteter Objekte. Eingebettete Objekte werden im Zielverzeichnis in einem Unterverzeichnis mit dem Namen der Zieldatei ohne Extension zzgl. der Zeichenfolge ".files" gespeichert; z.B. zusätzlich zur gespeicherten HTML-Datei "ORIGINAL.HTM" würde ein Unterverzeichnis namens "ORIGINAL.files" mit den Bildern der HTML-Datei generiert. Die HTML-Datei beinhaltet anschließend relative Pfade, die auf die entsprechenden Bilder verweisen.

Parameter

oTable:O | Tabelle, die das Blob-Feld enthält
cField:C | Name des Feldes
cSourceFile:C | Name bzw. Content-ID der gespeicherten Datei
cDestPath:C | Name des Zielverzeichnisses
cDestFile:C | Name der Ziel-HTML-Datei

Rückgabewert

Keiner

Beispiel

| oDab065:DB := 'waDAB065, DAB066', cFileName |

// Anhang speichern

cFileName   := InputBox('Speichern','Anhang:',''),

if cFileName = 'ORIGINAL.HTM' and JN('Komplette HTML-Datei speichern?') then

   MailAttSaveFullHTMLToFile(oDab065, "DATA", cFileName, 'c:\Temp\', cFileName),

else

   MailAttSaveToFile(oDab065, "DATA", cFileName, false, 'c:\Temp\' + cFileName),

endif,


MailAttSaveToFile()

MailAttSaveToFile() – Attachement speichern

Beschreibung

Mit MailAttSaveToFile() kann eine gespeicherte Datei über Ihren Dateinamen aus einem Blob-Feld geladen, und in einer Zieldatei gespeichert werden. (Das Blob-Feld kann mehrere Dateien enthalten). Die Funktion wird hauptsächlich dafür genutzt, eine angehängte Datei eines Memos zu speichern. Die übergebene Tabelle muss vor dem Aufruf der Funktion auf dem entsprechenden Datensatz positioniert werden.

Parameter

oTable:O | Tabelle, die das Blob-Feld enthält
cField:C | Name des Feldes
cSourceFile:C | Name bzw. Content-ID der gespeicherten Datei
LisCID:L | Name ist eine Content-ID
cDestFile:C | Name der Zieldatei

Rückgabewert

keiner

Beispiel

| oDab065:DB := 'waDAB065, DAB066', cFileName |

// Anhang speichern

cFileName := InputBox('Speichern', 'Anhang:', ''),

MailAttSaveToFile(oDab065, "DATA", cFileName, false, 'c:\Programme\' + cFileName),


MailChkAddAccount()

MailChkAddAccount() – MailAccount zu MailChecker hinzufügen

Achtung:

Diese Funktion wird ab Version 6.0 nicht mehr unterstützt.

Bitte verwenden Sie für Mail-Zugriffe künftig das Objekt TBeCbMailMemoReceiver.

Beschreibung

Die Funktion fügt den übergebenen Mail-Account zum MailChecker hinzu.

Hinweis

Z.Zt. können nur POP3-Email-Konten abgerufen werden.

Mit der Funktion MailChkExecute() werden die Emails aller Accounts abgerufen, die sich im MailChecker befinden.

Parameter

cName:C | Account-Name
cHost:C | Host
cUser:C | User
cPass:C | Passwort
cBeUser:C | Be-User
lDelFromServer:L | True = abgerufene Emails löschen, False = Emails auf dem Server belassen

Rückgabewert

Logisch / Boolean - Hinzufügen erfolgreich

Beispiel

MailChkAddAccount(M_EMAILNAM, DABPAR:EMAIL_POP, M_POPUSER, M_POPPW, C_USR, true),

MailChkExecute(),

Siehe auch:

MailChkExecute()


MailchkDeleteAccount()

MailChkDeleteAccount() – MailAccount aus MailChecker löschen

Achtung:

Diese Funktion wird ab Version 6.0 nicht mehr unterstützt.

Bitte verwenden Sie für Mail-Zugriffe künftig das Objekt TBeCbMailMemoReceiver.

Beschreibung

Die Funktion löscht den übergebenen Mail-Account aus dem MailChecker. Mit der Funktion MailChkExecute() werden die Emails aller Accounts abgerufen, die sich im MailChecker befinden.

Parameter

cName:C

Accountname

Rückgabewert

Logisch / Boolean - Löschen erfolgreich

Beispiel

MailChkDeleteAccount('Acc01')

Siehe auch:

MailChkAddAccount()

MailChkExecute()


MailChkDirect()

MailChkDirect() – Mails direkt abrufen

Achtung:

Diese Funktion wird ab Version 6.0 nicht mehr unterstützt.

Bitte verwenden Sie für Mail-Zugriffe künftig das Objekt TBeCbMailMemoReceiver.

Beschreibung

Die Funktion ruft die EMails für einen Account direkt ab.

Hinweis

Wird der Paramater oMemResultTable nicht angegeben, werden die empfangenen Emails mit der Standardlogik in der Dab065 abgelegt.

Wird der Paramater oMemResultTable angegeben, werden die empfangenen Emails nicht in der Dab065 sondern in der übergebenen Memory-Tabelle abgelegt.

Die Struktur der Tabelle wird von der Funktion automatisch der Dab065 angepasst.

Alle Email-Events werden ausgeführt.

Parameter

cName:C | Account-Name
cHost:C | Host
cUser:C | User
cPass:C | Passwort
cBeUser:C | Be-User
lDelFromServer:L | Abgerufene Emails können vom Server gelöscht werden
oResultMemTable:O | Mem-Table für die Ergebnisse; default = nil
lNoContent:L | Keinen Content abrufen; default = false
cUidOnly:C | Uid verwenden; default = Leerstring

Rückgabewert

Logisch / Boolean - Abrufen erfolgreich

Beispiel

| oMailTemp, i, aAtt, cImpPath |

oMailTemp := CreateObject("TMemCalcTable"),

MailChkDirect(M_EMAILNAM,

              DABPAR:EMAIL_POP,

              M_POPUSER,     // Username

              M_POPPW,       // Password

              C_USR,         // BE-User

              TRUE,          // Delete Mail from Server

              oMailTemp  ),

DBGoTop(oMailTemp),

while not EoF(oMailTemp) do

   aAtt  := MailAttLoadList(oMailTemp,"DATA"),

   for i := 1 to ALen(aAtt) do

      if Lower(RTrim(aAtt[i,5])) = 'zezeiten.bez' then

         MailAttSaveToFile(oMailTemp, "DATA", aAtt[i,5], false, cImpPath+aAtt[i,5]),

      endif,

   next,

   DBSkip(1, oMailTemp),

end,


MailChkExecute()

MailChkExecute() – MailChecker abrufen

Achtung:

Diese Funktion wird ab Version 6.0 nicht mehr unterstützt.

Bitte verwenden Sie für Mail-Zugriffe künftig das Objekt TBeCbMailMemoReceiver.

Beschreibung

Die Funktion ruft die EMails für alle Accounts ab, die zum MailChecker hinzugefügt wurden.

Hinweis

Es wird ein permanentes Kommunikationslog in der Datei "BeMailCheck.log" geführt.

Erfolgt für mehr als 30 Sek. keine Kommunikation mit dem Server beendet sich der Dialog selber. Wird der Abruf modal per Taskplaner ausgeführt wird in diesem Fall auch der Task beendet.

Parameter

lModal:L | Abrufen modal starten; default = False
lRaiseError:L | Fehlermeldungen / Exceptions nicht unterdrücken; default = True

Rückgabewert

Logisch / Boolean - Abrufen erfolgreich

Beispiel

| oDabPal:DB := 'waDABPAL, DABPAL' |

// Modaler Email-Check, der z.B. regelmäßig per Taskplaner aufgerufen werden könnte

DbGoTop(oDabPal),

while not EoF(oDabPal) do

   if oDabPal:USER $ "065/" then

      MailChkAddAccount(oDabPal:M_EMAILNAM,

                        DABPAR:EMAIL_POP,

                        oDabPal:M_POPUSER,

                        oDabPal:M_POPPW,

                        oDabPal:USER,

                        true),

   endif,

   DBSkip(1,oDabPal),

end,

MailChkExecute(true), // Modales Abruf-Fenster anzeigen

Siehe auch:

MailChkAddAccount()

MailchkDeleteAccount()


Min_Term()

Min_Term() – Früheren Termin ermitteln

Beschreibung

Die Funktion gibt den früheren von 2 Terminen zurückgeben, jedoch mindestens akt. Woche.

Parameter

aTermin1:U | Termin 1
aTermin2:U | Termin 2

Rückgabewert

Alphanumerisch - Früherer Termin

Beispiel

Min_Term(Date(), Date() + 10)


Mind_Best()

Mind_Best() – Mindestbestand

Beschreibung

Die Funktion gibt ohne Parameter den von BE automatisch errechneten Mindestbestand wieder. Die Parameter können dazu benutzt werden den Mindestbestand mit anderen Vorgaben alternativ zu berechnen.

Parameter

lIgnVKCount:L | Berechnet die Mindestbestandsberechnung auch für -2 und -1 Artikel; default = false
cMode:C | Mindestbestand auf Basis Verkaufsverbrauch; default = "V"; "VP" die Berechnung berücksichtigt auch die Produktionsverbräuche; "P" die Berechnung berücksichtigt nur die Produktionsverbräuche
cBewertung:C | Durch Verwendung dieses Parameters können Sie die Berechnung variieren; default = (Bewertung Vormonate 1-12 gemäß Einstellung in den Festwerten)
nGlaettPos:N | default = (Positive Glättung aus Festwerten)
nGlaettNeg:N | default = (Negative Glättung aus Festwerten)
nEinsPunkt:N | N1 bis N3 können beliebig variiert werden; default = (Berechnung ab wievieltem Monat aus den Festwerten)
oDab010:O | Artikelstamm Dab010 (Datei 2); default = Standard Dab010
lUpRound:L | Rundung auf Nachkommastellen für Mengen aus den Festwerten, Ausgabe mit 4 Kommastellen; default = true

Rückgabewert

Numerisch - Mindestbestand

Beispiel

| o010:DB := 'waDAB010' |

Mind_Best( , , , , , , o010)


MonatsEndeStat()

MonatsEndeStat() – Artikel-Statistik Monatsende

Beschreibung

Die Funktion erstellt eine Artikel-Statistik für das Monatsende (Füllt Dab520).

Parameter

keine Parameter erwartet

Rückgabewert

Keiner

Beispiel

MonatsEndeStat()

Kontakt zum Support | www.dontenwill.de


NewArticle()

NewArticle() – Neuen Artikel erstellen

Beschreibung

Die Funktion erstellt einen neuen Artikel.

Parameter

oDab010:O | Tabellenobjekt DAB010
cNewArtNo:C | Neue Artikel Nr.
cSourceArtNo:C | Quellartikel
lAutoNo:L | Nr. automatisch vergeben
lCopyExisting:L | Existierenden Artikel kopieren
lCopySupp:L | Hauptlieferanten kopieren
lCopySuppCompl:L | Alle Lieferanten kopieren
lCopyLang:L | Fremdsprachen kopieren
lCopyPartList:L | Stückliste kopieren
lShowMsg:L | Meldungsfenster anzeigen
oCalc010:O | Tabelleobjekt Calc010; default = nil
aInsertByInUse:L | Im Insertmodus bleiben; default = false

Rückgabewert

Numerisch - Neue Artikelnummer

Beispiel

| m_oDM, m_oDab010 |

//******************************************************************************

function CreateNewArticle(cArticleNo)

| nReturnCode, cErrorText |

   nReturnCode := NewArticle(m_oDab010, cArticleNo, '', true, false, false, false, false, false, false),

   case nReturnCode

      of 0 :: cErrorText := 'ncGenError',

      of 1 :: cErrorText := 'ncOK',

      of 2 :: cErrorText := 'ncExists',

      of 3 :: cErrorText := 'ncInvalidNo',

      of 4 :: cErrorText := 'ncWasInUse',

      of 5 :: cErrorText := 'ncInvalidSource',

      of 6 :: cErrorText := 'ncErrRecall',

   endcase,

   if nReturnCode = 1 then

      m_oDab010.CBPost(),

   else

      WriteLn("Es ist ein Fehler beim Aufruf von NewArticle aufgetreten. Fehlercode: " + cErrorText),

   endif,

end,

m_oDM := CreateObject('TBeDBGet', 'DM'),

startseq

   m_oDab010               := CreateObject('TBeSemaphorTable'),

   m_oDab010.Workarea      := waDab010,

   m_oDab010.AdsConnection := m_oDM.ADSConnection,

   m_oDab010.Active        := True,

   m_oDM.CbTransaction_Begin(),

   startseq

      CreateNewArticle('NEWARTICLE'),

      m_oDM.CbTransaction_Commit(),

   always

      m_oDM.CbTransaction_TryRollback(),

   stopseq,

always

   DestroyObject(m_oDM),

stopseq,


PersSollMin()

PersSollMin() – Sollanwesenheitszeit

Beschreibung

Die Funktion berechnet die Sollanwesenheitszeit einer Person in Minuten, entsprechend den eingetragenen täglichen Stundenzeiten im Personalstamm ohne die Berücksichtigung von Feiertags- oder anderen Nichtanwesenheitsbuchungen.

Parameter

aDab262:O | DAB262 BDE-Personen/Mitarbeiter (Datei 40)
aDateFrom:D | Datum von
aDateTo:D | Datum bis
aPersNo:N | Personalnummer; default = -1

Rückgabewert

Numerisch - Sollanwesenheitszeit

Beispiel

| oDAB262:DB := 'waDAB262' |

PersSollMin(oDab262, ctod("01.05.07"), ctod("06.05.07"), 55)


Preis1Check()

Preis1Check() – Preis1 Prüfung

Beschreibung

Nur für interne Zwecke!

Parameter

oDab010:O

Tabellenobjekt DAB010

Rückgabewert

Logisch / Boolean


PrepareTextForFTSSearch()

PrepareTextForFTSSearch() – Optimiert einen Suchtext für die Suche anhand eines FTS-Index

Beschreibung

Diese Funktion optimiert einen übergebenen Text für eine Volltextsuche (Full-Text-Search = FTS). Dabei werden die Einzelnen Suchbegriffe anhand des für den FTS-Index definierten Trennzeichen getrennt.

Hinweis

- Tabulatoren, doppelte Leerzeichen, Zeilenumbrüche, ignorierte Wörter (Noise-Words) und Format-Tags werden entfernt

- als Basis dient die FTS-Index-Definition des übergebenen Feldes (s. Datenbank-Verwaltung / Indexdefinitionen)
oder der mit cFTSIndexName vorgegebene FTS-Index

Parameter

nWorkArea:N | Workarea der Tabelle oder Null, falls ein Feld-Objekt übergeben wird
uFieldName:U | Feldname oder Feld-Objekt (Workarea = 0)
cText:C | Original-Text
cFTSIndexName:C | Vorgabe für den FTS-Index, dann wird dieser nicht anhand des Feld-Namens ermittelt
lLeadingWildcard:L | Platzhalter (*) am Anfang jedes Suchbegriffes anhängen
lTrailingWildcard:L | Platzhalter (*) am Ende jedes Suchbegriffes anhängen
cOperator:C | Verknüpfungsoperator (AND & OR erlaubt, leer entspricht AND)
lResultAsContains:L | Rückgabe als ferigen Contains-Ausdruck ( CONTAINS(FELD, 'SUCHE') )

Rückgabewert

Alphanumerisch

Beispiel

| oDAB065:DB:='waDAB065, DAB066', oText, cSeachText|

DbLocate('Memo_ID', 17466, , oDAB065),

cSeachText := 'Suche <nach Test* und ABC!?',

oText := PrepareTextForFTSSearch(waDAB065,                  // Für Tabelle 9 = Memos

                                 'SUCHE',                   // Für Ziel-Feld "SUCHE"

                                 cSeachText,                // Suchtext

                                 'SUCHE_FTS',               // FTS-Index

                                 False,                     // Platzhalter am Anfang

                                 True,                      // Platzhalter am Ende

                                 'AND',                     // Verknüpfungsoperator

                                 True),                     // Rückgabe als CONTAINS

// CONTAINS(SUCHE, 'ABC* AND nach* AND Suche* AND Test* AND und*')

WriteLn(oText),

Siehe auch:

PrepareTextForFTS()


PrinterInfos()

PrinterInfos()

Beschreibung

Die Funktion stellt Informationen zu allen verfügbaren Drucker zur Verfügung.

Hinweis

Ab 7.1

Rückgabewert

oPrinterInfos:O (TbeCbPrinterInfos)

Beispiel

|oPrinterInfos, oPrinterInfo, i, j|

oPrinterInfos := PrinterInfos(),

writeln('Standard Drucker', oPrinterInfos.DefaultPrinterName),

for i := 0 to oPrinterInfos.PrinterCount - 1 do

  oPrinterInfo := oPrinterInfos.Printer(i),

  writeln('--------------------------------'),

  writeln('Druckername', oPrinterInfo.PrinterName),

  writeln('---Verfügbare Schächte----------'),

  for j := 0 to oPrinterInfo.BinCount - 1 do

    writeln(oPrinterInfo.BinName(j)),

  next,

next,


ProdAKADruck()

ProdAKADruck() – Produktionsauftrag mit AKA-Druck

Beschreibung

Die Funktion druckt eine AKA und startet einen (Teil-)Produktionsauftrag. Wird cProdAbt angegeben, werden die zu dieser Abteilung gehörenden Positionen als gestartet markiert. Ein Auftrag gilt als komplett gestartet (kommissioniert), sobald alle Positionen gestartet wurden. Eine Position kann bebucht werden, sobald sie gestartet wurde.

Parameter

oPd_ProdFileCard:O | Kontainer-Objekt (TPd_ProdFileCard-Object), darf leer bleiben
nAufNr:N | Auftragsnummer
nAufPos:N | Unter-Auftragsposition
lAutoBuch:L | Mengen automatisch buchen
cProdAbt:C | Druck nur für Prod.Abteilung; default = Leerstring (alle)
nLager:N | Primär abbuchen von Lager-Nr. (nur wenn lAutoBuch); default = -1 (Default-Produktionslager)
nPickList:N | Pickliste drucken; default = 0; 0 = keine Pickliste drucken; 1 = Pickliste sofort drucken; 2 = Pickliste später drucken

Hinweis

Keine Transaktion verwenden. Da intern sich die Tabellen gegenseitig sperren.

Rückgabewert

keiner

Beispiel

|oAKA, nFANummer, nFAPosNummer|

nFANummer    := 368540,

nFAPosNummer := 0,

oAKA         := CreateObject('TPd_ProdFileCard', 'AKAPRINT'),

startseq

   ProdAKADruck(oAKA, nFANummer, nFAPosNummer, true, , 0),

always

   DestroyObject(oAKA),

stopseq,

Siehe auch:

ProdAufDelete()

ProdAufEdit()

ProdAufNew()

ProdAufPost()

ProdAufStart()

ProdOrdFinish()

ProdPosBuch()

ProdPosDelete()

ProdPosEdit()

ProdPosNew()

ProdPosPost()


ProdAufDelete()

ProdAufDelete() – Produktionsauftrag löschen

Beschreibung

Die Funktion löscht einen Produktionsauftrag.

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
nAufNr:N | Auftragsnummer; default = 0
nAufPos:N | Unter-Auftragsposition; default = 0

Rückgabewert

keiner

Beispiel

| oDM, nProdAufNo |

oDM        := CreateObject('TBeDBGet', 'PROD_AUF_DELETE'),

nProdAufNo := 367653, // Nummer des Produktionsauftrags

startseq,

   startseq,

      DBStartTrans(oDM.AdsConnection),

      ProdAufDelete(oDM, nProdAufNo),

      DBCommit(oDM.AdsConnection),

      MessageDlg('Produktions-Auftrag [' + Str(nProdAufNo) + '] wurde erfolgreich

                 gelöscht.', mtInformation),

   onerror,

      if DBInTrans(oDM.AdsConnection) then

         DBRollBack(oDM.AdsConnection),

         DBCancelAll(oDM),

      endif,

      MessageDlg('Fehler beim Löschen des Produktions-Auftrags [' + Str(nProdAufNo) +

                 ']:' + crlf + crlf + GetErrorText(), mtError),

   stopseq,

always,

   DestroyObject(oDM),

stopseq,

Siehe auch:

ProdAKADruck()

ProdAufEdit()

ProdAufNew()

ProdAufPost()

ProdAufStart()

ProdOrdFinish()

ProdPosBuch()

ProdPosDelete()

ProdPosEdit()

ProdPosNew()

ProdPosPost()


ProdAufEdit()

ProdAufEdit() – Produktionsauftrag bearbeiten

Beschreibung

Die Funktion versetzt einen Produktionsauftrag in den Bearbeitungs-Modus.

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
nAufNr:N | Auftragsnummer
nAufPos:N | Unter-Auftragsposition

Rückgabewert

keiner

Beispiel

siehe ProdAufNew()

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufNew()

ProdAufPost()

ProdAufStart()

ProdOrdFinish()

ProdPosBuch()

ProdPosDelete()

ProdPosEdit()

ProdPosNew()

ProdPosPost()


ProdAufNew()

ProdAufNew() – Neuen Produktionsauftrag erstellen

Beschreibung

Die Funktion erstellt einen neuen Produktionsauftrag.

Wird nHauptAufNr übergeben, wird ein neuer (leerer!) Unterauftrag zu der Auftragsnr. erstellt.

Bei nHauptAufNr muss es sich um einen existierenden Haupt-Auftrag handeln.

Parameter

oBeDBGet:O | Datenmodul (TBeDBGet-Objekt)
nHauptAufNr:N | Haupt-Auftragsnummer; default = 0

Rückgabewert

Array - Format:

{ nAufNr, nAufPos }

Beispiel

| oDM, oDab035, oDab240, aProductionOrder |

oDM := CreateObject('TBeDBGet', 'PRODDM'),

startseq

   oDab035 := DBGetTable(oDM, waDAB035),

   oDAB240 := DBGetTable(oDM, waDAB240),

   DBStartTrans(oDM.ADSConnection),

   startseq

      aProductionOrder := ProdAufNew(oDM), // Neuen Produktionsauftrag (Dab035) anlegen

      // Setzen der benötigten Angaben in der Dab035

      oDab035:ARTNR    := 'RUECK_BAUGR',

      oDab035:KOMMISS  := 'TEST', // Achtung: Feld KOMMISS ist bei -2 Artikel

                                  //          nicht editierbar!

      oDab035:TERMIN   := 'KW.' + KW(Date()),

      oDab035:MENGE_EK := 1,

      ProdAufPost(oDM), // Besitzt der angegebene Artikel eine Stückliste, wird diese beim Post aufgelöst

      // Produktionsauftrag editieren

      ProdAufEdit(oDM, aProductionOrder [1], aProductionOrder [2]),

      oDab035:KOMMISS    := "TESTEDIT",

      oDab035:TERMIN     := 'KW.' + KW(Date() + 14),

      oDab035:MENGE_EK   := 20,

      ProdAufPost(oDM),

      // Eine zusätzliche Position zum Produktionsauftrag hinzufügen.

      ProdPosNew(oDM, aProductionOrder[1]),

      oDAB240:ARTNR_E := 'BOHREN', // Arbeitswert

      oDAB240:R_S     := 'S',

      oDAB240:SOLL    := 2, // 2 Minuten

      ProdPosPost(oDM),

      ProdAufStart(oDM, aProductionOrder[1]), // Nur Positionen mit eingetragener SOLL-Menge werden hier "kommissioniert" (B_DATUM befüllt)

      DBCommit(oDM.AdsConnection),

      MessageDlg('Neuer Produktionsauftrag: ' + ArrToStr(aProductionOrder) + ' angelegt', mtInformation),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollback(oDM.ADSConnection),

      endif,

   stopseq,

always

   DestroyObject(oDM),

stopseq,

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufEdit()

ProdAufPost()

ProdAufStart()

ProdOrdFinish()

ProdPosBuch()

ProdPosDelete()

ProdPosEdit()

ProdPosNew()

ProdPosPost()


ProdAufPost()

ProdAufPost() – Produktionsauftrag speichern

Beschreibung

Die Funktion speichert einen durch ProdAufEdit() oder ProdAufNew() im Änderungsmodus befindlichen Produktionsauftrag.

Hinweis:

Die Dab035:MENGE_EK darf nicht 0 sein, sonst wird der Auftrag nicht gespeichert.

Parameter

oBeDBGet:O

Datenmodul (TBeDBGet-Objekt)

Rückgabewert

keiner

Beispiel

siehe ProdAufNew()

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufEdit()

ProdAufNew()

ProdAufStart()

ProdOrdFinish()

ProdPosBuch()

ProdPosDelete()

ProdPosEdit()

ProdPosNew()

ProdPosPost()


ProdAufStart()

ProdAufStart() – Produktionsauftrag starten

Beschreibung

Die Funktion startet einen (Teil-)Produktionsauftrag ohne AKA-Druck.

Wird cProdAbt angegeben, werden die zu dieser Abteilung gehörenden Positionen als gestartet markiert.

Ein Auftrag gilt als komplett gestartet (kommissioniert), sobald alle Positionen gestartet wurden.

Ein nachträgliches Drucken der AKA ist für gestartete Positionen nicht möglich.

Eine Position kann bebucht werden, sobald sie gestartet wurde.

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
nAufNr:N | Auftragsnummer; default = 0
nAufPos:N | Unter-Auftragsposition; default = 0
cProdAbt:C | Produktionsabteilung; default = Leerstring (alle)

Rückgabewert

keiner

Beispiel

| oBeDBGet, oDab035 |

oBeDBGet := CreateObject("TBeDBGet"),

startseq,

   DBStartTrans(oBeDbGet.AdsConnection),

   ProdAufStart(oBeDBget, 405627, 0, ""),

   DBCommit(oBeDbGet.AdsConnection),

onerror,

   DBRollBack(oBeDbGet.AdsConnection),

   WriteLn("ERROR:" + GetErrorText()),

stopseq,

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufEdit()

ProdAufNew()

ProdAufPost()

ProdOrdFinish()

ProdPosBuch()

ProdPosDelete()

ProdPosEdit()

ProdPosNew()

ProdPosPost()


ProdDemPlanDelete()

ProdDemPlanDelete() – Produktions-Bedarfsplanung löschen

Beschreibung

Die Funktion löscht einen Datensatz aus der Produktions-Bedarfsplanungs Tabelle (Dab220).

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
nAutoInc:N | Wert des Feldes "AutoInc" der Tabelle Dab220

Rückgabewert

Keiner

Beispiel

| oDab220, oDBGet |

oDBGet  := CreateObject('TBeDBGet'),

oDab220 := DBGetTable(oDBGet, waDAB220),

startseq,

   DBStartTrans(oDBGet.AdsConnection),

   startseq,

      DBGoTop(oDab220),

      ProdDemPlanDelete(oDBGet, oDab220:AUTOINC),

      DBCommit(oDBGet.AdsConnection),

   onerror,

      DBRollBack(oDBGet.AdsConnection),

      WriteLn('Fehler: ' + GetErrorText()),

   stopseq,

always,

   DestroyObject(oDBGet),

stopseq,

Siehe auch:

ProdDemPlanNew()

ProdDemPlanEdit()

ProdDemPlanPost()


ProdDemPlanEdit()

ProdDemPlanEdit() – Produktions-Bedarfsplanung bearbeiten

Beschreibung

Die Funktion setzt einen Produktions-Bedarfsplanungs-Datensatz (Dab220) in den Bearbeitungs-Modus.

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
nAutoInc:N | Wert des Feldes "AutoInc" der Tabelle Dab220

Rückgabewert

Keiner

Beispiel

| oDab220, oDBGet |

oDBGet  := CreateObject('TBeDBGet'),

oDab220 := DBGetTable(oDBGet, waDAB220),

startseq,

   DBStartTrans(oDBGet.AdsConnection),

   startseq,

      DBGoBottom(oDab220),

      ProdDemPlanEdit(oDBGet, oDab220:AUTOINC),

      oDab220:TERMIN := DToC(Date()),

      ProdDemPlanPost(oDBGet),

      DBCommit(oDBGet.AdsConnection),

   onerror,

      DBRollBack(oDBGet.AdsConnection),

      WriteLn('Fehler: ' + GetErrorText()),

   stopseq,

always,

   DestroyObject(oDBGet),

stopseq,

Siehe auch:

ProdDemPlanNew()

ProdDemPlanPost()

ProdDemPlanDelete()


ProdDemPlanNew()

ProdDemPlanNew() – Neue Produktions-Bedarfsplanung

Beschreibung

Die Funktion erzeugt einen neuen Produktions-Bedarfsplanungs-Datensatz (Tabelle Dab220).

Parameter

oBeDBGet:O

Kontainer-Objekt (TBeDBGet-Objekt)

Rückgabewert

Keiner

Beispiel

| oDab220, oDBGet |

oDBGet  := CreateObject('TBeDBGet'),

oDab220 := DBGetTable(oDBGet, waDAB220),

startseq,

   DBStartTrans(oDBGet.AdsConnection),

   startseq,

      ProdDemPlanNew(oDBGet),

      oDab220:ARTNR  := 'TESTARTIKEL',

      oDab220:MENGE  := 5,

      oDab220:TERMIN := DToC(Date()),

      ProdDemPlanPost(oDBGet),

      DBCommit(oDBGet.AdsConnection),

   onerror,

      DBRollBack(oDBGet.AdsConnection),

      WriteLn('Fehler: ' + GetErrorText()),

   stopseq,

always,

   DestroyObject(oDBGet),

stopseq,

Siehe auch:

ProdDemPlanEdit()

ProdDemPlanPost()

ProdDemPlanDelete()


ProdDemPlanPost()

ProdDemPlanPost() – Produktions-Bedarfsplanung speichern

Beschreibung

Die Funktion schreibt die nach ProdDemPlanNew() oder ProdDemPlanEdit() zugewiesenen Werte in die Produktions-Bedarfsplanungs-Tabelle (Dab220).

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
lShowMsg:L | Anzeige von Meldungen

Rückgabewert

Keiner

Beispiel

siehe ProdDemPlanNew() und ProdDemPlanEdit()

Siehe auch:

ProdDemPlanNew()

ProdDemPlanEdit()

ProdDemPlanDelete()


ProdOrdFinish()

ProdOrdFinish() – Produktionsauftrag Fertigmeldung

Beschreibung

Die Funktion dient zur Teil-/Fertigmeldung von Produktionsaufträgen.

Parameter

oBeDBGet:O

Kontainer-Objekt (TBeDBGet-Objekt)

nAufNr:N

Auftragsnummer

nAufPos:N

Unter-Auftragsposition

lKomplett:L

Art der Fertigmeldung

true - End-Fertigmeldung

false - Teil-Fertigmeldung

nMenge:N

Fertigzumeldende Menge

nLager:N

Ziel-Lager des Fertigproduktes

nAusMenge:N

Ausschuss-Menge; default = 0

dDatum:D

Fertigmelde-Datum; default = mBDatum

caFertigSerNr:U

Seriennummer/Charge des Fertigteils oder Array mit Seriennummer/Charge, Menge, Platz; default = Null()

caAusSerNr:U

Seriennummer/Charge des Ausschussteils oder Array mit Seriennummer/Charge, Menge; default = Null()

Array-Format:

 {

   { <Kommission>, <Menge>,

     [,<Platz> [,<Verfallsdatum> [,<BehälterNr> [,<EinwegBehälterTyp> ]]]]},

   { ... }

 }

Wichtig: Für Erstellung neuer Einwegbehälter <BehälterNr> 0 übergeben

oCallbackInfo:O

Callbackobjekt für folgende Abfragen (MessageId):

1 Die fertiggemeldete Variante weicht vom Kunden-Auftrag ab !

Wollen Sie trotzdem die fertiggemeldete Variante für den Kunden-Auftrag X freigeben ?

(Default = mrYes)

2 Fertigmeldung ohne vollständige Verbrauchs-/Zeitbuchungen ?
(nur bei Parameter lKeinCallbackID2 = False)

(Default = mrYes)

3 Kunden-Auftrag X (X) um X X erhöhen / reduzieren ?

(Default = mrYes)

4 Auftragskarten-Quittung-Belegscan durchführen?
In der Callback-Prozedur kann der Beleg-Scan explizit zu- oder abgeschaltet werden.
Eine zusätzliche Abfrage (wie bei ID 1-3) erfolgt defaultmäßig nicht.

5 Lagerschein drucken?
Der Druck des Lagerscheins kann falls nötig verhindert werden.

(Default = mrYes)
Eine zusätzliche Abfrage (wie bei ID 1-3) erfolgt defaultmäßig nicht.

6 Freigabe Kd.Rück. Fertigmeldung ?
Die Zuteilung der Fertigungsmenge auf Kundenrückstände kann verhindert werden.

(Default = mrYes)
Eine zusätzliche Abfrage (wie bei ID 1-3) erfolgt defaultmäßig nicht.

7 Freigabe-Dialog für Produktionsrückstände der fertig gemeldeten Menge anzeigen?
Die Anzeige der Produktionsrückstände kann verhindert werden mit einem Result <> mrYes und Result <> mrOk (im Standard gibt es keine Abfrage der Dialog öffnet sich immer falls der lokale Parameter "M_ZUGPFREI" auf Ja gesetzt ist)

(Default = mrYes)

lKeinCallbackID2:L

Callback-Event mit MessageId 2 nicht ausführen; default = True

lAllowEmptyPlaces:L

Buchung auf einen leeren Lagerplatz erlaubt; nur relevant wenn nLager ein Lagerplatzverwaltetes Lager ist;(Default = false)

Rückgabewert

keiner

Beispiel

| oBeDbGet, oDab240, oCallback |

//************************************************************************************

// Callback-Funktion, der Rückgabewert wird autom. in oCallbackFunc.Result gespeichert

//************************************************************************************

function CallbackFunc(oCallback:O)

  Result:= EmptyValue(),              // als Standard die be-Defaultwerte übernehmen

  Case oCallback.MessageID

    of 3:: Meld('Text: ' +            // Frage  : Kunden-Auftrag an Menge anpassen ?

                oCallback.MsgText + Chr(13) +

                'Vorgabe für ID ' + Str(oCallback.MessageID) + ': ' +

                IIf(oCallback.Result = mrNo, 'Nein', 'Ja')),

           Result:= mrNo,             // Antwort: Nein

    of 5:: Result:= mrNo,             // Frage  : Lagerschein drucken ?

                                      // Antwort: Nein

    of 6:: Result:= mrNone,           // Frage  : Zuteilung Menge auf Kundenrückstände ?

                                      // Antwort: Bestätigung per Dialog anfordern

  EndCase,

End,

//************************************************************************************

oBeDBGet:= CreateObject("TBeDBGet"),

oDab240 := DBGetTable(oBeDBget, waDAB240),

DBStartTrans(oBeDBGet.AdsConnection),

StartSeq

   oCallback:= CallbackInfo('CallbackFunc'), // Erzeugen des Callback-Objekts

   ProdOrdFinish( oBeDBget, 405627, 0, true,

                  3, 00, 0, 0,

                  {{"123456", 3, "TOLVE"}},,

                  oCallback), // optionaler Parameter für die Behandlung von "Rückfragen"

   DBCommit(oBeDBGet.AdsConnection),

OnError

   DBRollBack(oBeDBGet.AdsConnection),

   WriteLn("ERROR:" + GetErrorText()),

StopSeq

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufEdit()

ProdAufNew()

ProdAufPost()

ProdAufStart()

ProdPosBuch()

ProdPosDelete()

ProdPosEdit()

ProdPosNew()

ProdPosPost()


ProdPlanAuto()

ProdPlanAuto() – Automatische Produktionsplanung

Beschreibung

Die Funktion startet die automatische Bedarfsermittlung in der Produktion.

Parameter

cArtNrVon:C | Von Artikelnummer
cArtNrBis:C | Bis Artikelnummer
cProdAbtVon:C | Von Produktionsabteilung
cProdAbtBis:C | Bis Produktionsabteilung

Rückgabewert

keiner

Beispiel

ProdPlanAuto('A', 'Z', '00', '00'),


ProdPosBuch()

ProdPosBuch() – Produktionsauftragsposition buchen

Beschreibung

Die Funktion dient zum manuellen Buchen von Material auf eine Produktionsauftrags-Position.

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
nAufNr:N | Auftragsnummer
nAufPos:N | Unter-Auftragsposition
nPosNr:N | Positions-Nr.
nMenge:N | Zu buchende Menge (Positiv oder Negativ)
nLager:N | Material kommt von Lager
cHauptSerNr:C | Seriennummer des Fertigteils (nur bei Vorabvergabe von Fertigteil-Seriennummer); default = Leerstring
caTeileSerNr:U | Seriennummer/Charge des Materials oder Array mit Seriennummer/Charge, Menge, Platz; default = Leerstring; Array-Format: {; { <Kommission>, <Menge>, [,<Platz> [,<Verfallsdatum> [,<BehälterNr> [,<EinwegBehälterTyp> ]]]]}, { ... }; }; Wichtig: Für Erstellung neuer Einwegbehälter <BehälterNr> 0 übergeben
lKeinLS:L | kein Lagerschein drucken; default = false
lReserv:L | Menge wieder reservieren (nur bei Rückbuchung von Material); default = false
cProgID:C | individuelle Prog.ID; default = 'ProdPosBuch'

Rückgabewert

keiner

Beispiel

| m_oDM |

m_oDM := CreateObject("TBeDBGet"),

startseq

   DBStartTrans(m_oDM.ADSConnection),

   startseq

      ProdPosBuch(m_oDM, 405595, 0, 2, 2, 4, "",

                  {{"213170", 1, "PLATZ1"}, {"100003", 1, "PLATZ2"}},

                  False, True, 'XXX'),

      ProdPosBuch(m_oDM, 405627, 0, 5, -5, 4, "",

                  {{"04052284003", -5, "TOLVE"}},

                  False, True, 'XXX'),

      ProdPosBuch(m_oDM, 600631, 0, 1, 1, 0),

      DBCommit(m_oDM.ADSConnection),

   always

      if DBInTrans(m_oDM.ADSConnection) then

         DBRollBack(m_oDM.ADSConnection),

      endif,

   stopseq,

always

   DestroyObject(m_oDM),

stopseq,

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufEdit()

ProdAufNew()

ProdAufPost()

ProdAufStart()

ProdOrdFinish()

ProdPosDelete()

ProdPosEdit()

ProdPosNew()

ProdPosPost()


ProdPosDelete()

ProdPosDelete() – Produktionsauftragsposition löschen

Beschreibung

Die Funktion löscht eine Position aus einem Produktionsauftrag.

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
nAufNr:N | Auftragsnummer; default = 0
nAufPos:N | Unter-Auftragsposition; default = 0
nPosNr:N | Positionsnummer; default = 0

Rückgabewert

keiner

Beispiel

| oBeDbGet, oDab035 |

oBeDbGet := CreateObject("TBeDBGet"),

oDab035  := DBGetTable(oBeDBget, waDAB035),    //erforderlich!

startseq,

   DBStartTrans(oBeDbGet.AdsConnection),

   ProdPosDelete(oBeDBget, 405627, 0, 5),

   DBCommit(oBeDbGet.AdsConnection),

onerror,

   DBRollBack(oBeDbGet.AdsConnection),

   WriteLn("ERROR:" + GetErrorText()),

stopseq,

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufEdit()

ProdAufNew()

ProdAufPost()

ProdAufStart()

ProdOrdFinish()

ProdPosBuch()

ProdPosEdit()

ProdPosNew()

ProdPosPost()


ProdPosEdit()

ProdPosEdit() – Produktionsauftragsposition bearbeiten

Beschreibung

Die Funktion setzt eine Produktionsauftrags-Position in den Editier-Modus.

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
nAufNr:N | Auftragsnummer; default = 0
nAufPos:N | Unter-Auftragsposition; default = 0
nPosNr:N | Positionsnummer; default = 0

Rückgabewert

keiner

Beispiel

siehe ProdPosNew()

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufEdit()

ProdAufNew()

ProdAufPost()

ProdAufStart()

ProdOrdFinish()

ProdPosBuch()

ProdPosDelete()

ProdPosNew()

ProdPosPost()


ProdPosNew()

ProdPosNew() – Neue Produktionsauftragsposition

Beschreibung

Die Funktion erstellt eine neue Position für einen Produktionsauftrag.

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
nAufNr:N | Auftragsnummer; default = 0
nAufPos:N | Unter-Auftragsposition; default

Rückgabewert

Array - Format:

{ Produktionsauftragsnummer, Unterauftragsnummer, Positionsnummer }

Beispiel

| oBeDbGet, oDab240 |

oBeDbGet := CreateObject("TBeDBGet"),

oDab240  := DBGetTable(oBeDBget, waDAB240),

startseq,

   DBStartTrans(oBeDbGet.AdsConnection),

   ProdPosNew(oBeDBget, 405627, 0),

   oDab240:ARTNR_E := 'BTK-005',

   oDab240:SOLL    := 2,

   oDab240:R_S     := '',

   ProdPosPost(oBeDBget),

   ProdPosEdit(oBeDBget, 405627, 0, 4),

   oDab240:PROD_ABT := "LN2",

   ProdPosPost(oBeDBget),

   DBCommit( oBeDbGet.AdsConnection),

onerror,

   DBRollback( oBeDbGet.AdsConnection),

   WriteLn("ERROR:" + GetErrorText()),

stopseq,

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufEdit()

ProdAufNew()

ProdAufPost()

ProdAufStart()

ProdOrdFinish()

ProdPosBuch()

ProdPosDelete()

ProdPosEdit()

ProdPosPost()


ProdPosPost()

ProdPosPost() – Produktionsauftragsposition speichern

Beschreibung

Die Funktion speichert eine durch ProdPosEdit() oder ProdPosNew() im Änderungsmodus befindliche Produktionsauftragsposition.

Parameter

oBeDBGet:O

Kontainer-Objekt (TBeDBGet-Objekt)

Rückgabewert

keiner

Beispiel

siehe ProdPosNew()

Siehe auch:

ProdAKADruck()

ProdAufDelete()

ProdAufEdit()

ProdAufNew()

ProdAufPost()

ProdAufStart()

ProdOrdFinish()

ProdPosBuch()

ProdPosDelete()

ProdPosEdit()

ProdPosNew()


ProdRechAuto()

ProdRechAuto() – Fertigungssekundärbedarfsrechnung

Beschreibung

Funktion zum dialogfreien Start der automatischen Fertigungssekundärbedarfsrechnung.

Parameter

nRechMode:N | Berechnungsmodus; 0 Nachfragen; 1 Standard-Planung; 2 Vollplanung; 3 Bruttoplanung
lLoeschRech:L | Existierende Bedarfsrechung löschen
cFreigabeFilter:C | Positionen die dem Filter entsprechen vorab freigeben; default = Leerstring (alle Planungs-Positionen vorab freigeben)
lQuietMode:L | Fenster nicht anzeigen
lFreigabeAuslauf:L | Auslaufartikel mit berechnen; default = true (alle Auslaufartikel werden berechnet)

Rückgabewert

Keiner

Beispiel

ProdRechAuto(1, true, 'ARTNR = "GPL1"', false, false),   // Standardplanung ohne                                                                  //Rückfragen, existierende                                                          // Planung löschen,

                                                         // nur Art.Nr. GPL1


ProdRueckCalc()

ProdRueckCalc() – Produktionsrückstandsberechnung

Beschreibung

Die Funktion ermittelt den Produktionsrückstand zu einem Artikel. Der Datensatz muss in der Dab010 vor Aufruf der Funktion auf dem entsprechenden Artikel positioniert werden.

Parameter

oDab010:O | Tabellenobjekt DAB010
oDab035:O | Tabellenobjekt DAB035; default = Standard Dab035
oDab240:O | Tabellenobjekt DAB240; default = Standard Dab240

Rückgabewert

Numerisch - Produktionsrückstand

Beispiel

| oDAB010:DB := 'waDAB010, DAB011' |

DBSeek('TestArt1', oDab010),

ProdRueckCalc(oDab010)


ProfInv()

ProvInv() – Proforma-Rechnung über Codeblock drucken

Beschreibung

Die Funktion öffnet das Fenster zum Druck einer Proforma-Rechnung

Parameter

aDocNo:N | Auftragsnummer
aModal:L | Modales Fenster oder MDI-Child => Default ist modal

Rückgabewert

Fenster vom Typ TBeProForma


PruefVorgang()

PruefVorgang() – Prüfungserfassung anzeigen

Beschreibung

Die Funktion zeigt das Fenster zur Prüfungserfassung an.

Parameter

oBeDBGet:O | Kontainer-Objekt (TBeDBGet-Objekt)
cWEPNummer:C | Wareneingangs-Positions Nummer
nDab240_ID:N | Produktions-Auftragsstücklisten (Dab240) ID
cChargenNr:C | Chargen-Nummer leer = im Fenster können alle Chargen ausgewählt werden ansonsten wird die übergebene Chargen-Nr. gewählt und diese; Auswahl kann nicht geändert werden
lReadOnly:L | Default = True; True : im Fenster können keinerlei Bearbeitungen durchgeführt werden; False : Fenster entspricht dem Aufruf aus business express (Bearbeitung ist möglich)

Rückgabewert

Keiner

Beispiel

| oDBGet |

oDBGet := CreateObject('TBeDBGet'),

startseq,

   PruefVorgang(oDBGet, '00000001001'),

always,

   DestroyObject(oDBGet),

stopseq,


PVerf_Dat()

PVerf_Dat() – Verfallsdatum der Baugruppe

Beschreibung

Die Funktion ermittelt das Verfallsdatum einer Baugruppe in Abhängigkeit des zeitlich naheliegendsten Verfallsdatums der Positionen der Auftragsstückliste. Hierbei wird als Minimum sowohl die hinterlegte Verfallszeit aus dem Artikelstamm berücksichtigt als auch das kleinste Verfallsdatum der verbauten Bauteile.

Parameter

oDab240:O | DAB240 Fertigungsauftragsstücklisten (Datei 26)
oDab720:O | DAB720 Kommissions-/Chargenverfolgung (Datei 42)
cArtNo:C | Artikelnummer
cProdOrder:C | Produktionsauftragsnummer

Rückgabewert

Datum - Verfallsdatum der Baugruppe

Beispiel

| oDab240:DB := 'waDAB240', oDab720:DB := 'waDAB720' |

PVerf_Dat(oDab240, oDab720, 'LS-200', '47911')


Rast_Abw()

Rast_Abw() – Abweichungen im Terminraster

Beschreibung

Die Funktion deckt Abweichungen (Minusentwicklungen) im Terminraster auf.

Parameter

nWBZ:N | Zeitraum; default = -1
cArtNr:C | Artikel; default = Leerstring (aktueller Artikel der DAB010)
oDab010:O | Tab. Objekt der DAB010; default = Standard Dab010
oDab410:O | Tab. Objekt der DAB410; default = Standard Dab410

Rückgabewert

Logisch / Boolean - Abweichung

Beispiel

| oDAB010:DB := 'waDAB010, DAB011' |

Rast_Abw(, 'TestArt1', oDab010,)


RefreshReadOnlyColor()

RefreshReadOnlyColor() – ReadOnly-Status / Farbe aktualisieren

Beschreibung

Die Funktion aktualisiert den ReadOnly-Status eines Edit-Feldes.

Parameter

TBeEdit:O

TBeEdit-Objekt

Rückgabewert

Objekt - Aktualisiertes Edit-Feld

Beispiel

// <Im Maskeneditor>

| oTBeEdit |

oTBeEdit               := FindObject(GetOwner(self), 'TBeEdit_Feld'),

oTBeEdit.readonlycolor := 255,

RefreshReadOnlyColor(oTBeEdit),


RLager()

RLager() – Bestand in allen Rohwarenlagern

Beschreibung

Die Funktion summiert die Mengen alle Lager, die in den Festwerten als Rohwarenlager definiert wurden.

Parameter

cPlatz:C | Lagerort; default = Leerstring (alle Lager)
oDab010:O | DAB010 Artikelstamm (Datei 2); default = Standard Dab010

Rückgabewert

Numerisch - Bestand der Rohwarenlager

Beispiel

| oDab010:DB := 'waDAB010' |

RLager(, oDab010)

Siehe auch:

HLager()


SachKtoChk()

SachKtoChk() – Sachkonto-Check

Beschreibung

Die Funktion dient der Prüfung auf ein gültiges Sachkonto.

Parameter

nKtoNr:N | Kontonummer
cMode:C | gültige Konto-Typen
lNullErl:L | Null erlaubt (als Kontonummer)
cMandant:C | FIBU-Mandant, für den die Kontonummer geprüft werden soll; Default = '000'

Rückgabewert

Logisch / Boolean - Ist gültiges Sachkonto

Beispiel

// nur mit dem Standard-Mandant ('000')

SachKtoChk(900, 'S', false)

// für den aktuell zugeordneten FIBU-Mandanten

SachKtoChk(900, 'S', false, mFirma)


SetBeParam()

SetBeParam() – Globaler BE Parameter

Beschreibung

Die Funktion setzt einen globalen BE Parameter.

Parameter

aKey:C | Keyschlüssel / Parametername
aValue:C | Wert

Rückgabewert

keiner

Beispiel

SetBeParam('Param1', '1')

Siehe auch:

GetBEParam()


ShowArtBest()

ShowArtBest() – Lagerbestandsfenster anzeigen

Beschreibung

Die Funktion öffnet das Fenster für den Lagerbestand.

Parameter

Dab010:O

Tabellenobjekt DAB010

Rückgabewert

keiner

Beispiel

| oDab010:DB := 'waDAB010' |

ShowArtBest(oDab010)

Siehe auch:

ShowTermRast()


ShowBeWindow()

ShowBeWindow() – BE Fenster

Beschreibung

Die Funktion ruft ein bestimmes be-Fenster oder -Funktion auf (z.B. Auftragsverwaltung, Kundenstamm) und gibt es als Objekt zurück. Beim Aufruf muss man sich im jeweiligen be-Modul des Fensters befinden.

Hinweis

Wenn der der zweite Parameter leer ist wird das Fenster in angezeigt, ohne dass eine Datensatz-Positionierung oder Vorbelegung durchgeführt wird.

Parameter

nWindowID:N

be Fenster ID

Beschreibung

cParams:C
Parameterübergabe für Aufruf; Optional

0

bwNone

Aktuell aktives Fenster

1

bwArticle

Artikel-Daten

<Art.Nr.>

2

bwCustomer

Kunden-Daten

<Pers.Nr.>;FC;<Art.Nr.>;<Woche>

3

bwSupplier

Lieferanten-Daten

<Lief. Nr.>

4

bwAgent

Vertreter-Daten

<Pers.Nr.>;FC;<Art.Nr.>;<Woche>

5

bwCustOrders

Auftragsverwaltung-Kunden

<Knd.Nr:8><Auftr.Nr:6><Pos.Nr:3>

6

bwSuppOrders

Auftragsverwaltung-Lieferanten

<Knd.Nr:8><Ap.Nr.:9>

7

bwProduction

Produktion / Offene Aufträge

<Auftr.Nr:6+2> (wie DAB035:BESTPOSNR)

8

bwPhoneCall

Anrufen

<Telefon.Nr.>;<Amtskennziffer>

9

bwArtPartList

Stückliste

<Art.Nr.>

10

bwArtUsedInPart

Stückliste-Verwendung

<Art.Nr.>

11

bwArtUsedInEnd

Stückliste-Verwendung in Endprodukt

<Art.Nr.>

12

bwSerialNo

Seriennummern-Verwaltung

<Serien Nr.>
A<Art.Nr.>;<Serien Nr.>

C<Knd.Nr.>;<Serien Nr.>

13

bwPrintPL

Stücklisten-Druck

<Art.Nr.>

14

bwChargeTrace

Chargen-Verfolgung

Bis 7.2: nicht nutzbar

Ab 7.2:

<Art.Nr.>;<Serien/Chargen Nr.>;<Modus 0 = Teileverwendung, 1 = Produktauflösung>

15

bwSuppBackOrdAcc

Bestellrückstände buchen

gegenwärtig nicht nutzbar

16

bwStockReceive

Wareneingang

<Wep.Nr.8+3>;%BlockBegin%<Code-Block>%BlockEnd%

17

bwShippNotes

Versandpapiere

18

bwProdPostCalc

Nachkalkulation-Fertigungsauftrag

<Auftr.Nr.:6><Split.Nr.:2>

19

bwDelivDiffAcc

Lieferschein-Differenzen buchen

<Liefersch.Nr.>;<Auftrag.Nr.>

20

bwServiceMain

Serviceaufträge-Verwaltung

<Knd.Nr.:8><Auftr.Nr.:6>

21

bwSuppAccCtrl

Rechnungskontrolle

gegenwärtig nicht nutzbar

22

bwDf000

Sachkonten

<Konto Nr.>

23

bwDfZaA

Zahlarten

24

bwSQLBrowser

SQL-Browser

25

bwSQLSelection

SQL-Selektion

26

bwDfAGr

Anlagekonten / Anlagegruppen

27

bwDfInv

Inventar (Anlagegüter)

28

bwDfASt

Standorte (Inventar)

29

bwDfGAb

Gebäude-AfA

30

bwDfSoA

Sonder-AfA

31

bwDfAZe

Anlagezeiten

32

bwProdCapa

Kapazitätsanalyse

<Auftr.Nr.>;<ShowComplete:L>

33

bwGroupWare

Memo-System

Terminkalender:

<Workarea:DABTRM>;<EventID>;<StartDate>;<EndDate>;<NewPage:L>

Workarea | 210
EventID | ID des Termins welcher angezeigt werden soll
StartDate | Datums-Start-Bereich der vor der Anzeige geladen wird um den Termin auch finden zu können
EndDate | Datums-Ende-Bereich (siehe StartDate)
NewPage | Immer auf einer neuen Tab-Seite anzeigen

Memo-System:
<Workarea:DAB065>;<MemoID>;<ViewID>;<MaskOnly:L>;<NewPage:L>;<ForceOpen:L>

Workarea | 9
MemoID | MemoID die angezeigt werden soll
ViewID | Ansicht-GUID
MaskOnly | Memo als Single-Tab öffnen (default=False)
NewPage | Memo immer in neuen Tab öffnen (default=False)
ForceOpen | Wenn Memo mit den angegebenen Einstellungen nicht angezeigt werden kann, ohne Rückfrage als Single-Tab öffnen (default=False)
RefreshCurrentView | True - ViewID wird neu ausgewertet (Default = False)
RefreshAllViews | True - Der komplette Ansichtsbaum wird neu aufgebaut (Default = False)

34

bwPersManagment

<Personal Nr.:DAB262>

35

bwResources

Ressourcen bearbeiten

<Ressourcen Nr.:DAB330>

36

bwParameterAdministration

Festwerte

<Unterbereich>;<weitereParameter>

Es existieren folgende Unterbereiche:

30 Benutzerverwaltung:

<30>;<UserNo>

33 Zugriffsberechtigungen Formulare:

<33>;<FormularKlassenNamen>;<FormularKlassenNamen.ActionNamen>

In diesem Kontext wird eine Aktion des aktiven Formulars angesprungen. Zu beachten ist, dass das entsprechende Formular geöffnet und der Supervisor Modus aktiv sein muss:

Beispiele:

Aktion "Personalstamm aufrufen":

'TFormMain;TFormMain.A_TMPersManage'

Aktion "Neu" im Personalstamm: 'TFormPersManage;TFormPersManage.A_New'

37

bwProdDemand

Produktions-Bedarfs-Planung

38

bwProdDispoPlan

Produktions-Dispositions-Planung

39

bwProdDisposition

Bestelldisposition Produktion

40

bwMemos

Memos

<MemoID>;<ViewID>;<MaskOnly:L>;<NewPage:L>;<ForceOpen:L>

MemoID | MemoID die angezeigt werden soll
ViewID | Ansicht-GUID
MaskOnly | Memo als Single-Tab öffnen (default=False)
NewPage | Memo immer in neuen Tab öffnen (default=False)
ForceOpen | Wenn Memo mit den angegebenen Einstellungen nicht angezeigt werden kann, ohne Rückfrage als Single-Tab öffnen (default=False)

41

bwCalendar

Terminkalender

<EventID>;<StartDate>;<EndDate>;<NewPage:L>

EventID | ID des Termins welcher angezeigt werden soll
StartDate | Datums-Start-Bereich der vor der Anzeige geladen wird um den Termin auch finden zu können
EndDate | Datums-Ende-Bereich (siehe StartDate)
NewPage | Immer auf einer neuen Tab-Seite anzeigen

42

bwCustomerContact

Kontakte in den Kunden

<Kunden-Nummer>;<Kontakt-ID>

43

bwSupplierContact

Kontakte in den Lieferanten

<Lieferanten-Nummer>;<Kontakt-ID>

44

bwAgentContact

Kontakte in den Vertretern

<Vertreter-Nummer>;<Kontakt-ID>

45

bwProg

gegenwärtig nicht nutzbar

Rückgabewert

oForm:O

Beispiel

// Artikel-Stamm öffnen und auf Testartikel positionieren

ShowBeWindow(bwArticle, "Testartikel"),

// Vertreter-Stamm öffnen auf Vertreter 1000 positionieren

// dann Abstatzplanung für Vertreter öffnen und auf Testartikel und KW40 filtern

ShowBeWindow(bwAgent, "1000;FC;Testartikel;40"),

// Auftragsverwaltung für Kunde 100100 öffnen zu Auftrag 17271 Postion 3 wechseln

ShowBeWindow(bwCustOrders, "100100  17271   3"),

// Erweiterte Verwendung der ShowBeWindow Funktion in der das von ShowBeWindow

// zurückgelieferte Fenster-Objekt weiterverwendet wird.

function AktiviereKontakt(nKunde, nKontakt)

|oSelf, oAct, oForm, oTable|

  Startseq,

  // Kundenstamm öffnen

  oSelf := ShowBeWindow(bwCustomer, Str(nKunde) + ';'),

  // Aktion für Kunden-Kontakte suchen

  oAct  := FindObject(oSelf, "A_Contacts"),

  // Aktion ausführen

  if not Empty(oAct) and ActionExecute(oAct) then

     // Kunden-Kontakte Fenster suchen

     oForm := FindObjByClass(oSelf, "TFormEditContacts"),

     // Wenn Fenster vorhanden dann zu Kontakt springen

     if not Empty(oForm) then

        oForm.ExecRefresh,

        oTable := FindObject(oForm, "MainTable"),

        DbLocate("ID", nKontakt, 0, oTable),

     endif,

  endif,

  Always

  Stopseq,

end,

AktiviereKontakt(9127, 381716)


ShowDiff()

ShowDiff() - Texte vergleichen

Beschreibung

Die Funktion bekommt zwei beliebige Texte übergeben und vergleicht diese mittels eines externen File-Differs.

Zuerst wird ermittelt ob Beyond Compare installiert wurde um dieses zu verwenden, falls es jedoch nicht vorhanden ist so wird

die Applikation, die im BE32-Verzeichnis liegt und 'DiffTool.exe' heißt (z.B. die FreeWare "CSDiff.exe") verwendet.

Die übergebenen Texte werden auf der lokalen Festplatte gespeichert und an die externe Applikation per Parameter übergeben.

Parameter

cInput1:C | Vergleichstext 1
cInput2:C | Vergleichstext 2
cName1:C | Dateiname der ersten Datei; Default = 'Text1'
cName2:C | Dateiname der zweiten Datei; Default = 'Text2'
lModal:L | True: DiffTool.exe wird modal angezeigt. Default=true;

Rückgabewert

Boolean

True: Kein Fehler

False: Fehler (z.B. 'DiffTool.exe' konnte nicht gefunden werden)

Beispiel

| cText1, cText2 |

cText1 := 'Dies ist Text 1' + crlf +

          'und die zweite Zeile',

cText2 := 'Dies ist Text 2' + crlf +

          'und die zweite',

ShowDiff(cText1, cText2, 'Text1', 'Text2', false)


ShowTermRast()

ShowTermRast() – Terminraster Fenster

Beschreibung

Die Funktion öffnet das Fenster Termin-Raster.

Parameter

Dab010:O

Tabellenobjekt DAB010

Rückgabewert

keiner

Beispiel

| oDab010:DB := 'waDAB010' |

ShowTermRast(oDab010)

Siehe auch:

ShowArtBest()


SL_Calc()

SL_Calc() – Varianten-Stückliste erzeugen

Beschreibung

Die Funktion erzeugt für einen übergebenen Varianten-Artikel und einen übergebenen "SL_MEMO"-Text eine Varianten-Stückliste und führt die Kalkulation der Preise durch.

Parameter

cArtNr:C | Artikel-Nummer der Varianten. Die Artikelnummer muss eine Varianten-Stückliste besitzen.
nPreisNr:N | Kunden-Preisnummer als Basis für die Preis-Kalkulation
nEPreis:N | Verkaufspreis-Basis des Hauptprodukts. Bei Übergabe von 0 wird die Verkaufspreis-Basis aus dem der übergebenen Preisnummer entsprechenden VK-Preis-Feld des Artikels cArtNr:C übernommen.
cSLText:C | "SL_MEMO"-Text entsprechend z.B. Dab055:SL_MEMO. Wird als Basis für die Erzeugung der Stückliste verwendet.
nEkPreis:R | Referenz-Parameter: Errechneter Einkaufs-Preis
nVkPreis:R | Referenz-Parameter: Errechneter Verkaufs-Preis
oMemTable:O | TMemCalcTable-Objekt, welches mit der errechneten Stückliste befüllt wird. Die übergebene Tabelle wird strukturell von der Funktion angepasst.
lCopyMemos:L | Varianten-Mengenfelder "SL_Memo" und "SL_FixMemo" mit Basis-Werten aus der zugrunde liegenden Variantenstückliste füllen. Default=false

Rückgabewert

Logisch - Varianten-Stückliste wurde erfolgreich berechnet / erzeugt

Beispiel

| nEkPreis, nVkPreis, oMemTable |

// ohne SL-Ausgabe

if SL_Calc('45520040', , , , nEkPreis, nVkPreis) then

   WriteLn('EK: ' + FormatFloat('#,##0.00', nEkPreis)),

   WriteLn('VK: ' + FormatFloat('#,##0.00', nVkPreis)),

else

   WriteLn('Kalkulationsfehler!')

endif,

WriteLn(),

// mit SL-Ausgabe, Preis-Nr 2

oMemTable := CreateObject('TMemCalcTable'),

startseq,

   if SL_Calc('45520040', 2, , , nEkPreis, nVkPreis, oMemTable) then

      WriteLn('EK: ' + FormatFloat('#,##0.00', nEkPreis)),

      WriteLn('VK: ' + FormatFloat('#,##0.00', nVkPreis)),

      WriteLn('Stückliste: '),

      DBGoTop(oMemTable),

      while !EoF(oMemTable) do

         WriteLn('- ' + Trim(oMemTable:ArtNr1) + ' x ' + Str(oMemTable:Menge)),

         DBSkip(1, oMemTable)

      end,

   else

      WriteLn('Kalkulationsfehler!')

   endif,

always,

  DestroyObject(oMemTable),

stopseq

Siehe auch:

SL_Spalten()

TVarCalcPanel


SL_Check()

SL_Check() – Terminraster Fenster

Beschreibung

Stücklisten-Check. Nur noch aus Kompatibilitätsgründen verfügbar. Anstattdessen SL_Menu() verwenden!

Parameter

uDummy1:U | Stückliste
uDummy2:L | default = true

Rückgabewert

Logisch / Boolean - Check erfolgreich


SL_Menu()

SL_Menu() – Auswahlfenster Stückliste

Beschreibung

Die Funktion ruft ein Auswahlfenster einer Stückliste auf und listet die einzelnen Stücklistenpositionen auf, die entsprechend markiert und ausgewählt werden können. Die Funktion wird üblicherweise in einer Varianten-Definition verwendet.

Parameter

uArtList:U | Artikelnummer der Stückliste
lDummy:L | default = true; true = Stückliste anzeigen, false = Baugruppe anzeigen

Rückgabewert:

Logisch / Boolean - Anzeige Fenster


SL_Spalten()

SL_Spalten() – Varianten-Stücklisten-Memo als druckbare Spalten

Beschreibung

Die Funktion erzeugt aus einen Varianten-Stücklisten-Memo ein Array mit druckbaren Spalten in der angegebenen Sprache. Das Ergebnis kann im Report-Designer verwendet werden, um Memo-Felder spaltenweise zu füllen.

Parameter

cSLMemo:C | Varianten-Stücklisten-Memo
cSLMemoFs:C | Varianten-Stücklisten-Memo in Fremdsprache; default = Leerstring
nLang:N | Sprach-ID; default = aktuelle BE-Sprache

Rückgabewert

Array. Format:

{<Caption in entspr. Sprache> ,<eingegebener Text> , <leer>}

Siehe auch:

SL_Calc()

TVarCalcPanel


StatActive()

StatActive() – Statistikprüfung

Beschreibung

Die Funktion kontrolliert, ob eine Statistik ausgeführt wird.

Parameter

aDab420Rec:N

Statistik-Nr.

Rückgabewert

Logisch / Boolean - Statistik wird ausgeführt

Beispiel

| aStat1:N := 1, aStat2:N := 2, aLastTime |

WriteLn('Start von Statistik 1 ...'),

StatExec(aStat1, .F.),

WriteLn('Start von Statistik 2 ...'),

StatExec(aStat2, .F.),

aLastTime := Time(),

while StatActive(aStat1) or StatActive(aStat2) do

   ProcessMsg(),

   if Right(aLastTime, 2) <> Right(Time(), 2) then

      aLastTime := Time(),

      WriteLn(aLastTime),

   endif,

end,

Siehe auch:

StatExec()


StatExec()

StatExec() – Statistik Eingabefenster

Beschreibung

Die Funktion öffnet das Eingabefenster einer Statistik und startet sie, falls angegeben.

Die Eingabefelder können über die Parameter 'aParameter', 'cStandorte', 'cAbteilungen' und 'nMandant' vorbelegt werden.

Die Verarbeitung kann auch ohne Anzeige des Fensters erfolgen.

Hinweis

Wird einer der Aufbereitungs-Parameter (Eingabeparameter, Standorte, Abteilungen, Mandant) nicht übergeben dann wird die letzte Einstellung dieses Parameters wieder hergestellt. Wenn die Aufbereitung im lQuietMode geschieht sollten daher immer alle Parameter vorbelegt werden.

Parameter

nDab420Rec:N | Statistik-Nr.
lWait:L | Wartemodus; Default = True; im Quiet-Mode immer True; True - Programm wartet bis Statistikaufbereitung beendet ist; False - Programm arbeitet weiter
aParameter:A | Liste der Eingabeparameter als Array; kann ausgelassen werden
cStandorte:C | Standorte; kann ausgelassen werden
cAbteilungen:C | Abteilungen; kann ausgelassen werden
nMandant:N | Fibu-Mandant; kann ausgelassen werden
lAutoPrint:L | Druck nach Verarbeitung starten; Default = False (nur sinnvoll iVm. lAutoStart = true)
lShowInfo:L | Benachrichtigung beim Beenden anzeigen; Default = False
lAutoStart:L | Aufbereitung sofort starten; Default = False
lQuietMode:L | Fenster nicht anzeigen (nur mit AutoStart); Default = False

Rückgabewert

keiner

Beispiel

StatExec(36,                                     // Statistik 36 starten

         True,                                   // Warten (im Quiet-Mode immer True)

         {21, 22, '83' , '89999', 3},            // Parameterliste

         '000/001',                              // Auswertung für Standorte 000 und 001

         '12345',                                // Abteilungen 1 bis 5 berücksichtigen

         ,                                       // Mandant (hier nicht relevant)

         False,                                  // kein automatischer Druck

         False,                                  // keine Meldung, wenn Verarbeitung beendet ist

         True,                                   // Parameter validieren und sofort Verarbeitung starten

         True)                                   // Fenster nicht anzeigen

// Mit StatExport() kann eine aufbereitete Statistik, gedruckt oder exportiert werden.

// Export in eine Grafik.

StatExport(36,                                   // Statistik 36 auswählen (muss aufbereitet sein)

           statExpExport,                        // Exportart: Druck-Export

           'C:\test\Export36',                   // Pfad (optional) und Dateiname

           statFmtJPEG)                          // speichert Statistik 36 als JPEG-Grafik

// Anschließend soll auf dem Standarddrucker gedruckt werden.

StatExport(36,                                   // Statistik 36 auswählen

           statExpPrint,                         // Drucken ohne Dialog

           ,                                     // Pfad und Name kann ausgelassen werden

           ,                                     // kein Exporttyp gewünscht

           ,                                     // Name des Druckers (leer = Standard)

           'Statistik 36 Querformat')            // Name des Drucklayouts

Siehe auch:

StatActive()


StatExport()

StatExport() – Reportergebnis exportieren

Beschreibung

Mit der Funktion kann das Ergebnis eines bereits aufbereiteten Reports exportiert werden. Hierfür stehen die auch über die Oberfläche wählbaren Exportformate zur Verfügung.

Hinweis

Die Funktion arbeitet "still" und erzeugt im Fehlerfall eine Exception. Eine bestehende Datei im Ziel-Verzeichnis mit gleichem Dateinamen wird ohne Rückfrage überschrieben. Der Dateiname ist ohne Datei-Endung anzugeben.

Parameter

nDab420No: N | Nummer des Reports
nAction: N | auszuführende Aktion, Zahl oder Konstantenname; 0 :statExpDialog - Druckdialog wird angezeigt (Default); 1 :statExpPrint - Drucken ohne Dialog; 2 :statExpPreview - Druckvorschau; 3 :statExpExport - Druck-Export im angegebenen Dateiformat; 4 :statExpExcelExp - Excel-Export der Rohdaten in Datei
cFileName: C | Name und Pfad der Exportdatei (ohne Datei-Endung). Default: "". Falls kein Pfad angegeben wird, erfolgt die Ausgabe auf den Desktop.
nExportType: N | Export-Format, Zahl oder Konstantenname verfügbare Werte im Modus nAction = statExpExport; 0 :statFmtDefault (von be vorgegebener bzw. letzter Wert) (Default); 1 :statFmtPDF; 2 :statFmtRTF; 3 :statFmtHTML; 4 :statFmtXLS; 5 :statFmtGIF; 6 :statFmtJPEG; 7 :statFmtBMP; 8 :statFmtEMF; 9 :statFmtWMF verfügbare Werte im Modus nAction = statExpExcelExp; 10 :n/a; 11 :n/a; 12 :statFmtExpCSV; 13 :statFmtExpDBF; 14 :statFmtExpExcel -> Export nach XLS oder XLSX abhängig vom Startparameter
cPrinterName: C | Name des Druckers; (Default: be-Standarddrucker)
cLayoutName: C | nur wenn nAction = statExpDialog / statExpPrint; Name des Layouts (Default: von be vorgegebener bzw. letzter Wert)
cSendToName: C | nur wenn nAction = statExpExport; Hier kann die Bezeichnung eines "Senden-An" Menüpunkts angegeben werden. Die exportierte Datei wird dann anschließend an das gewählte Fremdprogramm übergeben; (Default: Desktop). Achtung: Die Bezeichnungen sind system-spezifisch.

Beispiel

siehe StatExec()

Siehe auch:

StatExec()


SuppLocationCompany()

SuppLocationCompany() – Statistik Eingabefenster

Beschreibung

Die Funktion gibt die Firmenzugehörigkeit / Standort-Nummer einer LieferantenNr. zurück.

Parameter

aSuppNo:N

LieferantenNr. des Standortes

Rückgabewert

Numerisch - Lieferantennummer. Falls Lieferantennummer ungültig: -1

Beispiel

SuppLocationCompany(75000)

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationExists()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationInfo()

SuppLocationNo()


SuppLocationInfo()

SuppLocationInfo() – Standort Information

Beschreibung

Die Funktion gibt ein Objekt zu einem Standort zurück, das zu einer Lieferantenummer eines Standortes gehört.

Parameter

aSuppNo:N

LieferantenNr. des Standortes

Rückgabewert

Objekt - Falls LieferantenNr. ungültig ist: null()

Objekt Eigenschaften

- allowed // Erlaubnis

- company // Firmenzugehörigkeit Standort

- custdepart // VK-Abteilung für sto.Umlagerung

- custno // Kundennr. Standort

- custtype // Empfängertyp für sto.Umlagerung

- locname // Mandanten/Abteilungs-Name

- locno // Standort-Nummer

- ordtypeext // Auftragsart für Lieferung firmenextern

- ordtypeint // Auftragsart für Lieferung firmenintern

- suppdepart // EK-Abteilung. für sto.Umlagerung

- suppno // Lieferantennr. Standort

Beispiel

| oSuppLocInfo |

oSuppLocInfo := SuppLocationInfo(75000),

WriteLn(oSuppLocInfo.custno),

WriteLn(oSuppLocInfo.suppno),

WriteLn(oSuppLocInfo.company),

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationExists()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationNo()


SuppLocationNo()

SuppLocationNo() – Standort Information

Beschreibung

Die Funktion gibt die Standorts-Nummer zurück, die zu einer Lieferantenummer gehört.

Parameter

aSuppNo:N

LieferantenNr. des Standortes

Rückgabewert

Numerisch - Falls LieferantenNr. ungültig ist: -1

Beispiel

SuppLocationNo(75000)

Siehe auch:

CustLocationCompany()

CustLocationInfo()

CustLocationNo()

LocationActive()

LocationCompany()

LocationCustNo()

LocationExists()

LocationInfo()

LocationName()

LocationSuppNo()

SuppLocationCompany()

SuppLocationInfo()


TeilRech()

TeilRech() – Teilrechnung aufrufen / drucken

Beschreibung

Die Funktion ruft das Fenster zur Eingabe einer Teilrechnung auf oder gibt das Fenster als Objekt zurück.

Parameter

nAnummer:N | Auftragsnummer
lModal:L | Modale Anzeige des Fensters ( Default = True )
lVisible:L | Fenster sichtbar / unsichtbar ( Default = True )

Rückgabewert

Keiner, für lModal = True, ansonsten das Fenster-Objekt (Klasse: TBePartInvWin)

Hinweis lModal = True ist nur zulässig, wenn lVisible ebenfalls True ist.

Eigenschaften des Rückgabe-Objekts 'TBePartInvWin':

Dab050 Memory-Tabelle, Kopie von Dab050

Dab055 Memory-Tabelle, Kopie von Dab055

Funktionen des Rückgabe-Objekts 'TBePartInvWin':

ExecPrint:L Aufruf der Druckausgabe.

Falls die Anzeige des Druckdialogs nicht erwünscht ist, muss die Druckerzuweisung für "Teilrechnung" entsprechend angepasst werden ("kein Druckdialog").

Diese Anpassung könnte auch vorübergehend durch ein Codeblock-Programm geschehen.

ExecDelete:L Satz aus Memory-Tabelle Dab055 löschen

Zusätzliche Datenfelder in der Memory-Tabelle Dab055:

TLFDNR Zähler (lfd. Nummer)

TLF_NR entspricht LF_NUMMER aus Dab020

TLF_DAT entspricht DATUM aus Dab020

TLF_DATEX entspricht LF_DATUM aus Dab020

TLF_MENGE entspricht MENGE aus Dab020

TMENGE In dieses Feld muss die Teilrechnungs-Menge der Position eingetragen werden.

Wird versucht, eine größere als die aktuell berechenbare Menge einzutragen, so wird die maximal berechenbare Menge gesetzt.

Beispiel

| oTRWin, oDab055, lDoPrint |

if !Empty(oTRWin := TeilRech(171282, false, false)) then

   startseq,

      lDoPrint := false,

      oDab055  := oTRWin.Dab055,

      DBGoTop(oDab055),

      while !EoF(oDab055) do

         if Trim(oDab055:ArtNr) <> '@@@@@' and DBEdit(oDab055) then

            oDab055:TMenge := oDab055:TLF_Menge,

            if DBPost(oDab055) then

               lDoPrint := true

            endif,

         endif,

         DBSkip(1, oDab055),

      end,

      if lDoPrint and oTRWin.ExecPrint then

         WriteLn('Ok')

      endif,

   always

      DestroyObject(oTRWin)

   stopseq,

else,

   WriteLn('Teilrechnung kann nicht ausgeführt werden !')

endif


Term_Start()

Term_Start() – Berrechne Produktions-Starttermin

Beschreibung

Die Funktion errechnet den Produktions-Starttermin ausgehend von einem Fertigstellungs-Termin.

Parameter

uTermin:U | Fertigstellungs-Termin
nTage:N | Anzahl Produktionstage

Rückgabewert

Datum - Produktions-Starttermin

Beispiel

DToC(Term_Start(Date() +10, 4))


TerminDelete()

TerminDelete() – Termin löschen

Beschreibung

Vorhandenen Termin löschen.

Parameter

oBeDBGet:O | Datenmodul
nEventID:N | ID des Termins welcher gelöscht werden soll

Rückgabewert

Logisch/Boolean - Termin wurde gelöscht

Beispiel

|oDBGet, oDabTRM, nEventID:N := 36613|

oDBGet := CreateObject('TBeDBGet'),

startseq

   oDabTRM := DbGetTable(oDBGet, waDABTRM),

   DbStartTrans(oDBGet.AdsConnection),

   // Termin löschen

   if TerminDelete(oDBGet, nEventID) then

      meld('Termin wurde erfolgreich gelöscht'),

   endif,

   DbCommit(oDBGet.AdsConnection),

onerror

   DbRollBack(oDBGet.AdsConnection),

   meld(GetErrorText()),

stopseq,

DestroyObject(oDBGet),

Siehe auch:

TerminTeilnehmerDelete()

TerminNew()

TerminEdit()

TerminPost()

TerminMeetingDelete()

TerminTeilnehmerNew()

TerminTeilnehmerPost()

TerminTeilnehmerEdit()


TerminEdit()

TerminEdit() – Termin bearbeiten

Beschreibung

Bearbeitungsmodus für einen vorhanden Termin aktivieren.

Parameter

oBeDBGet:O | Datenmodul
nEventID:N | ID des zu bearbeiteten Termins

Rückgabewert

Logisch/Boolean - Termin ist im Bearbeitungsmodus

Beispiel

|oDBGet, oDabTRM, nEventID:N := 36613|

oDBGet := CreateObject('TBeDBGet'),

startseq

   oDabTRM := DbGetTable(oDBGet, waDABTRM),

   DbStartTrans(oDBGet.AdsConnection),

   // Termin bearbeiten und speichern

   if TerminEdit(oDBGet, nEventID) then

      oDabTRM:ORT := 'Konferenzraum 3',

      TerminPost(oDBGet, nEventID),

      // Teilnehmer müssen nicht angepasst werden da dies automatisch passiert

   endif,

   DbCommit(oDBGet.AdsConnection),

onerror

   DbRollBack(oDBGet.AdsConnection),

   meld(GetErrorText()),

stopseq,

DestroyObject(oDBGet),

Siehe auch:

TerminTeilnehmerDelete()

TerminNew()

TerminPost()

TerminDelete()

TerminMeetingDelete()

TerminTeilnehmerNew()

TerminTeilnehmerPost()

TerminTeilnehmerEdit()


TerminMeetingDelete()

TerminMeetingDelete() – Besprechung löschen

Beschreibung

Alle Termine einer Besprechung löschen.

Parameter

oBeDBGet:O | Datenmodul
nMeetingID:N | Besprechungs-ID welche gelöscht werden soll
nIgnoreEventID:N | ID eines Termins der Besprechung welcher nicht gelöscht werden soll

Rückgabewert

Logisch/Boolean - Besprechung wurde gelöscht

Beispiel

|oDBGet, oDabTRM, nMeetingID:N := 36613|

oDBGet := CreateObject('TBeDBGet'),

startseq

   oDabTRM := DbGetTable(oDBGet, waDABTRM),

   DbStartTrans(oDBGet.AdsConnection),

   // Besprechnung löschen

   if TerminMeetingDelete(oDBGet, nMeetingID) then

      meld('Besprechung wurde erfolgreich gelöscht'),

   endif,

   DbCommit(oDBGet.AdsConnection),

onerror

   DbRollBack(oDBGet.AdsConnection),

   meld(GetErrorText()),

stopseq,

DestroyObject(oDBGet),

Siehe auch:

TerminTeilnehmerDelete()

TerminNew()

TerminEdit()

TerminPost()

TerminDelete()

TerminTeilnehmerNew()

TerminTeilnehmerPost()

TerminTeilnehmerEdit()


TerminNew()

TerminNew() – Termin Neuanlage

Beschreibung

Neuen Termin anlegen und im Bearbeitungs-Modus lassen.

Parameter

oBeDBGet:O | Datenmodul
nResWA:N | WorkArea für welche der Termin angelegt werden soll; 40 - BDE Personen/Mitarbeiter; 54 - Ressourcenstamm
nResID:N | ID des Datensatzes der Tabelle mit der WorkArea = nResWA für WorkArea = 40 das Feld PERSNR für WorkArea = 54 das Feld ID
oMemTRM:O | optional - Tabelle aus welcher bei der Neuanlage (vor Auswertung der Feld-Rechte) der Inhalt in den neuen Termin übernommen wird

Rückgabewert

Numerisch - ID des neuen Termins (-1 falls Neuanlage fehlgeschlagen ist)

Beispiel

|oDBGet, oDabTRM, nEventID, nResID|

oDBGet := CreateObject('TBeDBGet'),

startseq

   oDabTRM := DbGetTable(oDBGet, waDABTRM),

   DbStartTrans(oDBGet.AdsConnection),

   // Termin anlegen und speichern

   nEventID := TerminNew(oDBGet, waDAB262, 2),

   if nEventID > -1 then

      oDabTRM:START   := Now(),

      oDabTRM:ENDE    := oDabTRM:START + 1/24, // 1 Stunde

      oDabTRM:BETREFF := 'neuer Termin',

      TerminPost(oDBGet, nEventID),

      // und jetzt noch einen Teilnehmer hinzufügen

      // hier kann gleich die nEventID als Besprechungs-ID verwendet werden

      // da ein Termin bei Neuanlage immer als Besprechungs-ID die Termin-ID hat

      nResID := TerminTeilnehmerNew(oDBGet, nEventID, waDAB262, 8),

      if nResID > -1 then

         TerminTeilnehmerPost(oDBGet, nEventID, waDAB262, 8),

      endif,

      nResID := TerminTeilnehmerNew(oDBGet, nEventID, waDAB262, 6),

      if nResID > -1 then

         oDabTRM:ANWESHEIT := 'E', // Anwesenheit erforderlich

         TerminTeilnehmerPost(oDBGet, nEventID, waDAB262, 6),

      endif,

   endif,

                              writeln(nEventID),

   DbCommit(oDBGet.AdsConnection),

onerror

   DbRollBack(oDBGet.AdsConnection),

   meld(GetErrorText()),

stopseq,

DestroyObject(oDBGet),

Siehe auch:

TerminTeilnehmerDelete()

TerminEdit()

TerminPost()

TerminDelete()

TerminMeetingDelete()

TerminTeilnehmerNew()

TerminTeilnehmerPost()

TerminTeilnehmerEdit()


TerminPost()

TerminPost() – Termin speichern

Beschreibung

Termin der sich im Bearbeitungsmodus (durch TerminNew() oder TerminEdit()) befindet speichern.

Parameter

oBeDBGet:O | Datenmodul
nEventID:N | ID des Termin der sich im Bearbeitungsmodus befindet und gespeichert werden soll
oMemResources:O | Tabelle anhand welcher die Teilnehmer des Termin aktualisiert werden
oMemLinks:O | Tabelle anhand welche manuelle Verknüpfungen aktualisiert werden (noch nicht verfügbar)
aResSyncMode:A | Array mit Synchronisations-Optionen; 0 (sestAutoUpd_IntSearch) - Internes Suchfeld aktualisieren; 1 (sestAutoUpd_InfoText) - Info-Text aktualisieren; 2 (sestAutoUpd_ReadRight) - Leseberechtigungen aktualisieren; 3 (sestSyncRes_Always) - Standard Teilnehmer-Synchronisation durchführen; 4 (sestSyncRes_Request) - nicht verfügbar; 5 (sestSyncRes_New) - Teilnehmer-Synchronisation wie bei Neuanlage eines Teilnehmers durchführen default = alle {0, 1, 2, 3, 4, 5}

Rückgabewert

Logisch/Boolean - Termin wurde gespeichert

Beispiel

siehe TerminNew()

Siehe auch:

TerminTeilnehmerDelete()

TerminNew()

TerminEdit()

TerminDelete()

TerminMeetingDelete()

TerminTeilnehmerNew()

TerminTeilnehmerPost()

TerminTeilnehmerEdit()


TerminTeilnehmerDelete()

TerminTeilnehmerDelete() – Teilnehmer entfernen

Beschreibung

Teilnehmer aus einer bestehenden Besprechung entfernen.

Parameter

oBeDBGet:O | Datenmodul
nMeetingID:N | Besprechungs-ID in welcher sich der Teilnehmer befindet
nResWA:N | WorkArea des Teilnehmers (siehe auch TerminNew())
nResID:N | ID des Teilnehmers (siehe auch TerminNew())

Rückgabewert

Logisch/Boolean - Teilnehmer wurde gelöscht

Beispiel

|oDBGet, oDabTRM, nMeetingID:N := 36613|

oDBGet := CreateObject('TBeDBGet'),

startseq

   oDabTRM := DbGetTable(oDBGet, waDABTRM),

   DbStartTrans(oDBGet.AdsConnection),

   // Teilnehmer löschen

   if TerminTeilnehmerDelete(oDBGet, nMeetingID, waDAB262, 6) then

      meld('Teilnehmer wurde erfolgreich gelöscht'),

   endif,

   DbCommit(oDBGet.AdsConnection),

onerror

   DbRollBack(oDBGet.AdsConnection),

   meld(GetErrorText()),

stopseq,

DestroyObject(oDBGet),

Siehe auch:

TerminNew()

TerminEdit()

TerminPost()

TerminDelete()

TerminMeetingDelete()

TerminTeilnehmerNew()

TerminTeilnehmerPost()

TerminTeilnehmerEdit()


TerminTeilnehmerEdit()

TerminTeilnehmerEdit() – Teilnehmer bearbeiten

Beschreibung

Bearbeitungsmodus für einen bestehenden Teilnehmer aktivieren.

Ein Teilnehmer kann auch über TerminEdit() bearbeitet werden.

Der Unterschied besteht nur bei der Art der Ermittelung

- TerminEdit ermittelt den Eintrag über die Termin-ID

- TerminTeilnehmerEdit ermittelt den Eintrag über die Kombination von WorkArea und ID des Teilnehmers

Parameter

oBeDBGet:O | Datenmodul
nMeetingID:N | Besprechungs-ID in welcher sich der Teilnehmer befindet
nResWA:N | WorkArea des Teilnehmers (siehe auch TerminNew())
nResID:N | ID des Teilnehmers (siehe auch TerminNew())

Rückgabewert

Logisch/Boolean - Teilnehmer ist im Bearbeitungsmodus

Beispiel

|oDBGet, oDabTRM, nMeetingID:N := 36613|

oDBGet := CreateObject('TBeDBGet'),

startseq

   oDabTRM := DbGetTable(oDBGet, waDABTRM),

   DbStartTrans(oDBGet.AdsConnection),

   // Teilnehmer bearbeiten und speichern

   if TerminTeilnehmerEdit(oDBGet, nMeetingID, waDAB262, 8) then

      // nur für den Teilnehmer, wird nicht auf alle Termine der Besprechung übertragen

      oDabTRM:RESP_STAT := 20, // Rückmeldung -> zugesagt

      // Betreff neu setzen, gilt für alle Termine der Besprechung

      oDabTRM:BETREFF   := 'Termin aktualisiert',

      TerminTeilnehmerPost(oDBGet, nMeetingID, waDAB262, 8),

   endif,

   DbCommit(oDBGet.AdsConnection),

onerror

   DbRollBack(oDBGet.AdsConnection),

   meld(GetErrorText()),

stopseq,

DestroyObject(oDBGet),

Siehe auch:

TerminTeilnehmerDelete()

TerminNew()

TerminEdit()

TerminPost()

TerminDelete()

TerminMeetingDelete()

TerminTeilnehmerNew()

TerminTeilnehmerPost()


TerminTeilnehmerNew()

TerminTeilnehmerNew() – Teilnehmer hinzufügen

Beschreibung

Teilnehmer zu einem bestehenden Termin/Besprechung hinzufügen.

Parameter

oBeDBGet:O | Datenmodul
nMeetingID:N | Besprechungs-ID zu der ein Teilnehmer hinzugefügt werden soll
nResWA:N | WorkArea des Teilnehmers (siehe auch TerminNew())
nResID:N | ID des Teilnehmers (siehe auch TerminNew())

Rückgabewert

Numerisch - ID des neuen Termins (-1 falls Neuanlage fehlgeschlagen ist)

Beispiel

siehe TerminNew()

Siehe auch:

TerminTeilnehmerDelete()

TerminNew()

TerminEdit()

TerminPost()

TerminDelete()

TerminMeetingDelete()

TerminTeilnehmerPost()

TerminTeilnehmerEdit()


TerminTeilnehmerPost()

TerminTeilnehmerPost() – Teilnehmer speichern

Beschreibung

Teilnehmer der sich im Bearbeitungsmodus befindet speichern.

Parameter

oBeDBGet:O | Datenmodul
nMeetingID:N | Besprechungs-ID in welcher sich der Teilnehmer befindet
nResWA:N | WorkArea des Teilnehmers (siehe auch TerminNew())
nResID: | ID des Teilnehmers (siehe auch TerminNew())
aResSyncMode:A | Array mit Synchronisations-Optionen siehe TerminPost()

Rückgabewert

Logisch/Boolean - Teilnehmer wurde gespeichert

Beispiel

siehe TerminNew()

Siehe auch:

TerminTeilnehmerDelete()

TerminNew()

TerminEdit()

TerminPost()

TerminDelete()

TerminMeetingDelete()

TerminTeilnehmerNew()

TerminTeilnehmerEdit()


TranslatorItemInfo()

TranslatorItemInfo() – Übersetzungs-Infos

Beschreibung

Die Funktion liefert Informationen über die hinterlegten Übersetzungen zu einem Objekt.

Hinweis

Diese Funktion liefert nur Informationen aus der DabSPR. Es ist nicht möglich "Caption" oder "Hint" Eigenschaften eines Objekts abzufragen welches über keinen Eintrag in der DabSPR verfügt. In diesem Fall ergibt sich eine leere Rückgabe.

Die Klassen- und Objekt-Namen sind identisch mit denen aus dem Translator ("Sprache bearbeiten" - Fenster).

Parameter

aClass:C | Klasse
aObject:C | Objekt
nLanguage:N | Sprach-ID
lCaption:L | Beschriftung anzeigen; default = true
lSystemTrans:L | System Trans; default = false true - System Default Übersetzung anzeigen false - Benutzer Übersetzung anzeigen
lSystemTransOnEmpty:L | System Default Übersetzung anzeigen falls Benutzer Übersetzung leer ist; default = false
lReload:L | Informationen aktualisieren (keine gecachten Werte verwenden); default = true

Rückgabewert

Alphanumerisch - Infos

Beispiel

// 1) Rückgabe der Caption des Hauptfensters

TranslatorItemInfo('TFormMain', 'FormMain', 4)

// 2) BeMessages: Meldungen und dynamische Bezeichnungen

TranslatorItemInfo('BeMessages', '1008', 61)

// 3) BeFields: Alle Datenbank-Felder

TranslatorItemInfo('BeFields', '001.BEZ', 2)

// Für die Datenbank-Verwaltung zum Anzeigen anderer Sprachen

// 1) Tabellen-Liste

TranslatorItemInfo('BeFields', StrZero(MEMTABLE:WorkArea, 3, 0) + '.', 6)

// 2) Feld-Liste

TranslatorItemInfo('BeFields', StrZero(MEMTABLE:WArea, 3, 0) + '.' + AllTrim(MEMTABLE:FName), 6)

// 4) Browser

TranslatorItemInfo('GridSTORSEL'+c_usr, 'Col_0', 1)


VATResultCodeToText()

VATResultCodeToText() – Hilfsfunktion für TBeCbVATVerification-Klasse

Beschreibung

Wandelt die numerische Rückgabe der ResultCode-Eigenschaften der Klasse TBeCbVATVerification in übersetzbaren Text.

Übersetzungskonstanten für fremdsprachige Oberflächen

ResultCode_Valid | = 45700
ResultCode_Invalid | = 45701
ResultCode_NotRequested | = 45702
ResultCode_NotSupported | = 45703

Parameter

VATResultCode:N

ResultCode, wie er in den ResultCode-Eigenschaften steht

Rückgabewert

Alphanumerisch

Beispiel

// siehe TBeCbVATVerification

Siehe auch:

TBeCbVATVerification


Verd_Bed()

Verd_Bed() – Verdachtsbedarf

Beschreibung

Die Funktion berechnet den Verdachtsbedarf eines Artikels.

Parameter

oDab010:O

Tabellenobjekt Dab010; default = Standard Dab010

Rückgabewert

Numerisch - Verdachtsbedarf

Beispiel

| oDab010:DB := 'waDAB010' |

WriteLn(Verd_Bed(oDab010)),


VK_Wert()

VK_Wert() – Verkaufswert

Beschreibung

Die Funktion berechnet den Netto-Verkaufswert je Einheit (Menge * Preis / Preiseinheit abzüglich aller Rabatte).
Ist der Rechnungswert des Dab020-Satzes bereits gefüllt (RE_WERT bzw. RE_WERTFW) so wird direkt dieser Wert verwendet.

Parameter

oDab020:O | Tabellenobjekt DAB020; default = Standard Dab020
lFW:L | gibt Verkaufswert in Fremdwährung zurück; default = false
lRecalcIfNull:L | True - Falls der Rechnungswert gleich 0 ist, so wird die Berechnung ausgeführt; default = True

Rückgabewert

Numerisch - Verkaufswert

Beispiel

| oDab020:DB := 'waDAB020' |

WriteLn(VK_Wert(oDab020)),


VPZ()

VPZ() – Vorplanzeit

Beschreibung

Die Funktion errechnet die Vorplanungszeit eines Produkts in Tagen anhand der eigenen Durchlaufzeit und der Durchlauf- bzw. Wiederbeschaffungszeit aller in der Stückliste enthaltenen Bauteile.

Parameter

cArtNr:C | Artikel-Nummer
nTage:N | Wiederbeschaffungszeit; default = 0 (Wiederbeschaffungszeit aus Artikelstamm)

Rückgabewert

Numerisch - Vorplanzeit in Tagen

Beispiel

VPZ('LS-200')


WCheck()

WCheck() – Währungsüberprüfung

Beschreibung

Die Funktion überprüft, ob eine bestimmte Währung im System / Standort gepflegt ist.

Parameter

nCurrencyID:N

Währungs-ID

Rückgabewert

Logisch / Boolean - Währungs-ID existiert

Beispiel

WCheck(0)


WEBuchen()

WEBuchen() – Wareneingangsbuchung

Beschreibung

Die Funktion bucht einen Wareneingang.

Hinweis

Wie bei allen BE-Lagerbuchungsfunktionen muss beachtet werden, dass bei Übergabe einer Platz-Nr. im Kommiss.Array sichergestellt ist, dass diese (Platz-Nr.) für die Lager-Nr. gültig und verfügbar ist.

Parameter

cWEPNummer:C | Wareingangspositionsnummer
oAdsConnect:O | ADS Connection
oDab000:O | Tab. Objekt DAB000
oDab010:O | Tab. Objekt DAB010
oDab020:O | Tab. Objekt DAB020
oDab035:O | Tab. Objekt DAB035
oDab050:O | Tab. Objekt DAB050
oDab055:O | Tab. Objekt DAB055
oDab100:O | Tab. Objekt DAB100
oDab235:O | Tab. Objekt DAB235
oDab240:O | Tab. Objekt DAB240
oDab250:O | Tab. Objekt DAB250
oDab255:O | Tab. Objekt DAB255
oDab262:O | Tab. Objekt DAB262
oDab310:O | Tab. Objekt DAB310
oDab410:O | Tab. Objekt DAB410
oDab510:O | Tab. Objekt DAB510
oDab520:O | Tab. Objekt DAB520
oDab610:O | Tab. Objekt DAB610
oDab710:O | Tab. Objekt DAB710
oDab720:O | Tab. Objekt DAB720
oDab730:O | Tab. Objekt DAB730
nPersNo:N | Personalnummer
nMengeIst:N | IST Menge (Eingangsmenge in EK-Mengeneinheiten); default = -999999999
nMengeBuch:N | Buchungsmenge (Eingangsmenge in Lager-Mengeneinheiten); default = -999999999
cQSCode:C | Qualitätssicherungscode; default = Leerstring
cLager:C | Zugangs-Lager; default = Leerstring
aKommissArr:A | Array der Kommissionsnummern; default = Leerstring; Format: {; { <Kommission>, <Menge>, [,<Platz> [,<Verfallsdatum> [,<BehälterNr> [,<EinwegBehälterTyp> ]]]]}, { ... }; }
nQSMenge:N | Qualitätssicherungsmenge; default = 0
nArchMenge:N | Archivierte Menge; default = -999999999
lAutoErledigt:L | WE Sendungsdaten automatisch auf "erledigt" stellen, wenn Sendung vollständig (Dab250); default = true
lNoBuchDlg:L | Keinen Buchungsdialog anzeigen; default = true
nGroeKlasse:N | Größenklasse; default = 0; 0 = alle Größenklassen erlaubt bei Platzvorgabe per aKommissArr
nResID:N | Reservierungs-ID des zu buchenden, reservierten Platzes; default = 0

Rückgabewert

keiner

Beispiel

| oAdsConnect,

  oDab000:DB := 'waDAB000, 1'     , oDab010:DB := 'waDAB010, DAB011',

  oDab020:DB := 'waDAB020, DAB021', oDab035:DB := 'waDAB035, DAB036',

  oDab050:DB := 'waDAB050, DAB051', oDab055:DB := 'waDAB055, DAB056',

  oDab100:DB := 'waDAB100, DAB101', oDab235:DB := 'waDAB235, DAB236',

  oDab240:DB := 'waDAB240, DAB241', oDab250:DB := 'waDAB250, DAB251',

  oDab255:DB := 'waDAB255, DAB256', oDab262:DB := 'waDAB262, DAB263',

  oDab310:DB := 'waDAB310, DAB311', oDab410:DB := 'waDAB410, DAB411',

  oDab510:DB := 'waDAB510, DAB511', oDab520:DB := 'waDAB520, DAB521',

  oDab610:DB := 'waDAB610, DAB611', oDab710:DB := 'waDAB710, DAB711',

  oDab720:DB := 'waDAB720, DAB721', oDab730:DB := 'waDAB730, DAB731',

  aCommiss |

oAdsConnect := oDab255.AdsConnection,

aCommiss    := {{'05-753822', 20, 'TG042'}},

WEBuchen('06030056001',

         oAdsConnect, oDab000, oDab010, oDab020, oDab035, oDab050, oDab055,

         oDab100, oDab235, oDab240, oDab250, oDab255, oDab262, oDab310,

         oDab410, oDab510, oDab520, oDab610, oDab710, oDab720, oDab730,

         7, 20, , '', '04', aCommiss)

Siehe auch:

WEBuchen2()


WEBuchen2()

WEBuchen2() – Wareneingangsbuchung

Beschreibung

Die Funktion bucht einen Wareneingang mit Verwendung eines Datenmoduls, übernimmt also die gleiche Aufgabe wie WEBuchen(). Die Parameterübergabe wurde allerdings vereinfacht, so dass anstatt der Tabellen nur noch ein Datenmodul übergeben werden muss.

Parameter

oDM:O | Datenmodul
cWEPNummer:C | Wareingangspositionsnummer
nPersNo:N | Personalnummer
nMengeIst:N | IST Menge (Eingangsmenge in EK-Mengeneinheiten); default = -999999999
nMengeBuch:N | Buchungsmenge (Eingangsmenge in Lager-Mengeneinheiten); default = -999999999
cQSCode:C | Qualitätssicherungscode; default = Leerstring
cLager:C | Zugangs-Lager; default = Leerstring
aKommissArr:A | Array der Kommissionsnummern; default = Leerstring; Format: {; { <Kommission>, <Menge>, [,<Platz> [,<Verfallsdatum> [,<BehälterNr> [,<EinwegBehälterTyp> ]]]]}, { ... }; }
nQSMenge:N | Qualitätssicherungsmenge; default = 0
nArchMenge:N | Archivierte Menge; default = -999999999
lAutoErledigt:L | WE Sendungsdaten automatisch auf "erledigt" stellen, wenn Sendung vollständig (Dab250); default = true
lNoBuchDlg:L | Keinen Buchungsdialog anzeigen; default = true
nGroeKlasse:N | Größenklasse; default = 0; 0 = alle Größenklassen erlaubt bei Platzvorgabe per aKommissArr
nResID:N | Reservierungs-ID des zu buchenden, reservierten Platzes; default = 0

Rückgabewert

Keiner

Beispiel

| oAdsConnect, oDM, aCommiss |

oDM         := CreateObject('TBeDBGet'),

aCommiss    := {{'05-753822', 20, 'TG042'}},

WEBuchen2(oDM, '06030056001', 7, 20, , '', '04', aCommiss),

Siehe auch:

WEBuchen()


WEGewichtAnz()

WEGewichtAnz() – Wareneingangs Gewichtseingabe nötig / möglich

Beschreibung

Die Funktion prüft, ob eine Gewichtseingabe im Wareneingang möglich / erforderlich ist. .

Parameter

oDM:O | Datenmodul
oDab255:O | Tabellenobjekt Dab255
lPruefErford:L | Prüfungsmodus; default = false; True - prüfen, ob Eingabe zwingend erforderlich; False - prüfen, ob Eingabe möglich/erwünscht

Rückgabewert

Logisch / Boolean - Gewichtseingabe nötig/möglich

Beispiel

| oDM, oDab255:DB := 'waDAB255' |

oDM := CreateObject('TBEDBGet'),

WEGewichtAnz(oDM, oDab255, false)


beas Funktionen

Siehe auch:

CbRegisterParameterType()

CbRegisterService()

CbUnregisterParameterType()

CbUnregisterService()


CbRegisterParameterType()

CbRegisterParameterType() – Registriere Parametertypen

Beschreibung

Registriert den übergebenen Parametertypen für die Verwendung im Codeblock.

Liefert als Ergebnis den Wert True, falls erfolgreich.

Parameter

aParameterTypeInfo:O | Objekt der Klasse TBeasCbArrayParameterTypeInfo oder TBeasCbCompositeParameterTypeInfo mit der Beschreibung des zu registrierenden Typen.

Rückgabewert

Keiner

Beispiel

//******************************************************************************

// Registriert und deregistriert den Array-Parametertypen TCb_MyIntegerArray.

// Die Elemente des Arrays sind vom Typ Integer.

//******************************************************************************

| oParamRegTypeInfo |

oParamRegTypeInfo := CreateObject("TBeasCbArrayParameterTypeInfo"),

Startseq,

  oParamRegTypeInfo.CbTypeName        := "TCb_MyIntegerArray",

  oParamRegTypeInfo.CbTypeDescription := "My Array of Integer",

  oParamRegTypeInfo.CbTypeVisibility  := beasDocumented,

  oParamRegTypeInfo.CbElementTypeName := "Integer",

  CbRegisterParameterType(oParamRegTypeInfo),

Always,

   DestroyObject(oParamRegTypeInfo),

StopSeq,

CbUnregisterParameterType("TCb_MyIntegerArray"),

Siehe auch:

TBeasCbArrayParameterTypeInfo

TBeasCbCompositeParameterTypeInfo

CbUnregisterParameterType()

CbRegisterService()

CbUnregisterService()

TBeasCbServiceRegInfo


CbRegisterService()

CbRegisterService() – Registriere Service-Methode

Beschreibung

Registriert die übergebene Service-Methode zur Laufzeit zur Ausführung im beas.

Liefert als Ergebnis den Wert True, falls erfolgreich.

Parameter

aServiceRegInfo:O | Objekt der Klasse TBeasCbServiceRegInfo mit der Beschreibung der zu registrierenden Service-Methode.

Rückgabewert

Keiner

Beispiel

//******************************************************************************

// Registriert und deregistriert die Servive-Methode

// "cb_RegisteredDynamicCbService".

//******************************************************************************

|oServiceRegInfo|

oServiceRegInfo := CreateObject("TBeasCbServiceRegInfo"),

Startseq,

  oServiceRegInfo.CbMethodName        := "cb_RegisteredDynamicCbService",

  oServiceRegInfo.CbMethodDescription := "Methode cb_RegisteredDynamicCbService",

  oServiceRegInfo.CbServiceTypes      := _OR(beasServiceTypeStandard, beasServiceTypeHttp),

  oServiceRegInfo.CbContextClass      := beasContext,

  oServiceRegInfo.CbVisibility        := beasDocumented,

  oServiceRegInfo.CbProgramName       := "beas\dynamic_services\TestServices\Database",

  oServiceRegInfo.CbAddParameterInfo("Param0", "Dies ist Parameter 0", "Integer", beasResult, beasRequired ),

  oServiceRegInfo.CbAddParameterInfo("Param1", "Dies ist Parameter 1", "TCb_MyIntegerArray", beasIn, beasRequired ),

  oServiceRegInfo.CbAddParameterInfo("Param2", "Dies ist Parameter 2", "TCb_CompositeField", beasIn, beasOptional ),

  CbRegisterService(oServiceRegInfo),

Always,

  DestroyObject(oServiceRegInfo),

StopSeq,

CbUnregisterService("RegisteredDynamicCbService"),

Siehe auch:

TBeasCbArrayParameterTypeInfo

TBeasCbCompositeParameterTypeInfo

CbRegisterParameterType()

CbUnregisterParameterType()

CbUnregisterService()

TBeasCbServiceRegInfo


CbUnregisterParameterType()

CbUnregisterParameterType() – deregistriere Parametertypen

Beschreibung

Deregistriert den Parametertypen dessen Name als Parameter übergeben wurde.

Liefert als Ergebnis den Wert True, falls erfolgreich.

Hinweis

Das Deregistrieren eines nicht (mehr) vorhandenen Parametertypen ist kein Fehler.

Parameter

aParameterTypeName:C | Name des zu deregistrierenden Parametertypen.

Rückgabewert

Keiner

Beispiel

//******************************************************************************

// Registriert und deregistriert den Array-Parametertypen TCb_MyIntegerArray.

// Die Elemente des Arrays sind vom Typ Integer.

//******************************************************************************

| oParamRegTypeInfo |

oParamRegTypeInfo := CreateObject("TBeasCbArrayParameterTypeInfo"),

Startseq,

  oParamRegTypeInfo.CbTypeName        := "TCb_MyIntegerArray",

  oParamRegTypeInfo.CbTypeDescription := "My Array of Integer",

  oParamRegTypeInfo.CbTypeVisibility  := beasDocumented,

  oParamRegTypeInfo.CbElementTypeName := "Integer",

  CbRegisterParameterType(oParamRegTypeInfo),

Always,

   DestroyObject(oParamRegTypeInfo),

StopSeq,

CbUnregisterParameterType("TCb_MyIntegerArray"),

Siehe auch:

TBeasCbArrayParameterTypeInfo

TBeasCbCompositeParameterTypeInfo

CbRegisterParameterType()

CbRegisterService()

CbUnregisterService()

TBeasCbServiceRegInfo


CbUnregisterService()

CbUnregisterService() – deregistriere Service-Methode

Beschreibung

Registriert die Service-Methode deren Name als Parameter übergeben wurde.

Liefert als Ergebnis den Wert True, falls erfolgreich.

Hinweis

Das Deregistrieren einer nicht (mehr) vorhandenen Service-Methode ist kein Fehler.

Parameter

aServiceName:C | Name der zu deregistrierenden Service-Methode.

Rückgabewert

Keiner

Beispiel

//******************************************************************************

// Registriert und deregistriert die Servive-Methode

// "cb_RegisteredDynamicCbService".

//******************************************************************************

|oServiceRegInfo|

oServiceRegInfo := CreateObject("TBeasCbServiceRegInfo"),

Startseq,

  oServiceRegInfo.CbMethodName        := "cb_RegisteredDynamicCbService",

  oServiceRegInfo.CbMethodDescription := "Methode cb_RegisteredDynamicCbService",

  oServiceRegInfo.CbServiceTypes      := _OR(beasServiceTypeStandard, beasServiceTypeHttp),

  oServiceRegInfo.CbContextClass      := beasContext,

  oServiceRegInfo.CbVisibility        := beasDocumented,

  oServiceRegInfo.CbProgramName       := "beas\dynamic_services\TestServices\Database",

  oServiceRegInfo.CbAddParameterInfo("Param0", "Dies ist Parameter 0", "Integer", beasResult, beasRequired ),

  oServiceRegInfo.CbAddParameterInfo("Param1", "Dies ist Parameter 1", "TCb_MyIntegerArray", beasIn, beasRequired ),

  oServiceRegInfo.CbAddParameterInfo("Param2", "Dies ist Parameter 2", "TCb_CompositeField", beasIn, beasOptional ),

  CbRegisterService(oServiceRegInfo),

Always,

  DestroyObject(oServiceRegInfo),

StopSeq,

CbUnregisterService("RegisteredDynamicCbService"),

Siehe auch:

TBeasCbArrayParameterTypeInfo

TBeasCbCompositeParameterTypeInfo

CbRegisterParameterType()

CbUnregisterParameterType()

CbRegisterService()

TBeasCbServiceRegInfo


ChDir()

ChDir() – Verzeichnis wechseln

Beschreibung

Die Funktion wechselt in ein angegebens Verzeichnis, welches dadurch zum aktuellen Verzeichnis wird.

Parameter

aDirName:C

Verzeichnispfad

Rückgabewert

keiner

Beispiel

ChDir('C:\Temp'),

GetCurrentDir()

Siehe auch:

CreateDir()

DirArray()


CreateDir()

CreateDir() – Dateiverzeichnis anlegen

Beschreibung

Die Funktion legt ein neues Dateiverzeichnis an, wobei das Verzeichnis bis zur darüberliegenden Ebene vorhanden sein muss.

Parameter

aDirName:C

Verzeichnispfad

Rückgabewert

Logisch / Boolean - Verzeichnis konnte erzeugt werden

Beispiel

CreateDir('C:\temp\Dontenwill')


DateTimeToFileDate()

DateTimeToFileDate() – In FileDate umwandeln

Beschreibung

Mit DateTimeToFileDate() kann man einen Wert des Typs D (Codeblock-Datumstyp) in einen DOS-Datums- / Zeitwert konvertieren. Mit DateTimeToFileDate wird z.B. ein Datums-Wert in ein Format konvertiert, das vom Parameter aFileAge von FileSetDate() verwendet werden kann.

Parameter

aDateTime:D

Datumswert

Rückgabewert

Numerisch - Ergebniscode

Beispiel

| nHandle, dDatum, nDatum, nError |

nHandle := FileOpen('C:\TEMP\U_Zahlung.Pas', _OR(fo_ReadWrite, fo_Shared)),

if nHandle > -1 then

   startseq,

      dDatum := FileDateToDateTime(FileGetDate(nHandle)),

      WriteLn(dDatum),

      nDatum := DateTimeToFileDate(Date() + TimeEx()),

      WriteLn(nDatum),

      nError := FileSetDate(nHandle, nDatum),

      if nError <> 0 then

         WriteLn('Fehlercode ' + Str(nError)),

      else

         WriteLn('Neues Datei-Datum ' + DateTimeToStr(FileDateToDateTime(nDatum)))

      endif,

   always,

      FileClose(nHandle),

   stopseq,

endif,


DeleteFile()

DeleteFile() – Datei löschen

Beschreibung

Die Funktion löscht die angegebene Datei.

Parameter

aFileName:C

Pfadangabe

Rückgabewert

Logisch / Boolean – Datei wurde gefunden und gelöscht

Beispiel

DeleteFile('C:\Test.txt')


DirArray()

DirArray() – Verzeichnisinformationen

Beschreibung

Die Funktion gibt ein Array mit Verzeichniseinträgen und weiteren Informationen zurück.

Parameter

aPath:C | Verzeichnis, aus dem die Einträge geholt werden sollen; default = aktuelles Verzeichnis
aFileName:C | Filterausdruck zur Vorauswahl von bestimmten Dateien; default = '*.*'
aAttr:N | Filter für Dateien mit folgenden Attributen (auch kombinierbar!); default = faAnyFile faReadOnly = Schreibgeschützte Datei faHidden = Verborgene Datei faSysFile = Systemdatei faVolumeID = Laufwerks-ID faDirectory = Verzeichnis faArchive = Archivdatei faAnyFile = Beliebige Datei

Rückgabewert

Array - Format:

 aDirArray[File n, 1]  => Name   DOS-Dateinamen sowie die Namenserweiterung

 aDirArray[File n, 2]  => Time   DOS Datums/Uhrzeitstempel

 aDirArray[File n, 3]  => Size   Größe in Byte

 aDirArray[File n, 4]  => Attr   s. Parameter aAttr

 aDirArray[File n, 5]  => ---    interner Gebrauch

 aDirArray[File n, 6]  => ---    interner Gebrauch

Beispiel

| aDir, i |

aDir := DirArray('C:\TEMP'),

for i := 1 to ALen(aDir) do

   WriteLn('Die '+ Str(i) +'. Datei heißt '''+ aDir[i, 1] + ''' und hat ' +

           Str(aDir[i, 3]) + ' Bytes.')

next


DirectoryExists()

DirectoryExistst() – Prüft Dateiverzeichnis

Beschreibung

Die Funktion prüft, ob ein bestimmtes Verzeichnis existiert.

Parameter

aDirName:C

Verzeichnispfad

Rückgabewert

Logisch / Boolean - Verzeichnis ist vorhanden

Beispiel

DirectoryExists('C:\Temp')


DiskFree()

DiskFree() – Freie Speicherkapazität

Beschreibung

Die Funktion gibt die freie Speicherkapazität eines Laufwerks zurück.

Parameter

aDriveNo:N

Laufwerksnummer

0 – aktives Laufwerk

1 – Laufwerk A

2 – Laufwerk B

3 – Laufwerk C

4 – Laufwerk D

5 – Laufwerk E usw.

Rückgabewert

Numerisch - Freie Speicherkapazität in Byte

Beispiel

| cMeldText |

cMeldText := ' GByte freie Speicherkapazität auf Laufwerk C:',

Meld(Str(Round(DiskFree(3)/1024/1024/1024, 2)) + cMeldText),


DiskSize()

DiskSize() – Speicherkapazität

Beschreibung

Die Funktion gibt die Gesamtspeicherkapazität eines Laufwerks zurück.

Parameter

aDriveNo:N

Laufwerksnummer

0 – aktives Laufwerk

1 – Laufwerk A

2 – Laufwerk B

3 – Laufwerk C

4 – Laufwerk D

5 – Laufwerk E usw.

Rückgabewert

Numerisch - Speicherkapazität in Byte

Beispiel

| cMeldText |

cMeldText := ' GByte Speicherkapazität auf Laufwerk C:',

Meld(Str(Round(DiskSize(3)/1024/1024/1024, 2)) + cMeldText),


DlgGraphicFilter()

DlgGrahpicfilter() – Filterstring aller Grafikformate für Dialogfeld

Beschreibung

Die Funktion liefert einen Filter-String zurück, der mit der Eigenschaft "Filter" eines Öffnen- oder Speichern-Dialogfeldes kompatibel ist. Der Filterstring enthält alle verfügbaren Grafikformate.

Parameter

keine Parameter erwartet

Rückgabewert

Alphanumerisch - Filterstring mit Grafikformaten

Beispiel

| aDlg, cFilterString |

cFilterString := DlgGraphicfilter(),

aDlg          := OpenDlg('BE-Dateiauswahl', cFilterString, MBEDEFAULT),

aDlg.Active   := true,

if aDlg.Selected then

   WriteLn(aDlg.FileName)

else

   WriteLn('Keine Auswahl getroffen ...')

endif,


ExpandUNCFileName()

ExpandUNCFileName() – Datei-Pfad im UNC-Format (mit Netzlaufwerk)

Beschreibung

Vollständigen Pfad einer Datei im UNC-Format (mit Netzlaufwerk) ermitteln.

Hinweis

Datei-Pfad: c:\Verzeichnis

UNC-Pfad: \\Servername\Verzeichnis

Parameter

cFileName:C

Datei-Name

Rückgabewert

Alphanumerisch

Beispiel

// Laufwerk X verweist auf den Server-Ordner \\Server1\Test

ExpandUNCFileName('x:\Ordner1'),

// -> "\\Server1\Test\Ordner1"


ExtractFileDrive()

ExtractFileDrive() – Laufwerksbuchstaben ermitteln

Beschreibung

Die Funktion ermittelt aus einer Pfadangabe den Laufwerksbuchstaben.

Parameter

aFileName:C

Pfadangabe + Filename

Rückgabewert

Alphanumerisch - Laufwerksbuchstabe

Beispiel

| aFileName |

aFileName := 'C:\Temp\Test\Test.txt',

ExtractFileDrive(aFileName)


ExtractFileExt()

ExtractFileExt() – Dateierweiterung ermitteln

Beschreibung

Die Funktion ermittelt aus einer kompletten Pfadangabe die Dateierweiterung.

Parameter

aFileName:C

Pfadangabe + Dateiname

Rückgabewert

Alphanumerisch - Dateierweiterung

Beispiel

| aFileName |

aFileName := 'C:\Temp\Test\Test.txt',

ExtractFileExt(aFileName)


ExtractFileName()

ExtractFileName() – Dateinamen ermitteln

Beschreibung

Die Funktion ermittelt aus einer kompletten Pfadangabe den Dateinamen.

Parameter

aFileName:C

Pfadangabe + Dateiname

Rückgabewert

Alphanumerisch - Dateinamen

Beispiel

| aFileName |

aFileName := 'C:\Temp\Test\Test.txt',

ExtractFileName(aFileName)


ExtractFilePath()

ExtractFilePath() – Dateipfad ermitteln

Beschreibung

Die Funktion ermittelt aus einer kompletten Pfadangabe den Dateipfad.

Parameter

aFileName:C

Pfadangabe + Dateiname

Rückgabewert

Alphanumerisch - Pfadangabe

Beispiel

| aFileName |

aFileName := 'C:\Temp\Test\Test.txt',

ExtractFilePath(aFileName)


FClose()

FClose() – Datei schließen

Beschreibung

Die Funktion schließt eine geöffnete Datei.

Parameter

aFileObject:O

FileObject

Rückgabewert

Keiner

Beispiel

| oFileObject |

oFileObject := FOpen('C:\Temp\Test\Test.txt', FO_READ),

FClose(oFileObject)


File()

File() – Datei vorhanden

Beschreibung

Die Funktion prüft, ob eine Datei vorhanden ist.

Parameter

aFileName:C

Pfadangabe + Dateiname

Rückgabewert

Logisch / Boolean - Datei vorhanden

Beispiel

| aFileName |

aFileName := 'C:\Temp\Test.txt',

if(File(aFileName), Meld('Datei vorhanden'), Meld('Datei nicht vorhanden')),


FileAge()

FileAge() – Dateidatum- u. Zeit

Beschreibung

Die Funktion ermittelt das Änderungsdatum sowie die Änderungszeit als numerischen Wert, der über eine entsprechende Datums- / Zeitfunktion ausgegeben werden kann.

Parameter

aFileName:C

Pfadangabe + Dateiname

Rückgabewert

Numerisch - Dateidatum- u. zeit

Beispiel

FileDateToDateTime(FileAge('C:\Temp\Test\Dontenwill.txt'))

Siehe auch:

FileDateToDateTime()

FileSetDate()


FileClose()

FileClose() – File Handle freigeben

Beschreibung

Mit FileClose kann eine Datei anhand ihres Handles geschlossen werden. Sie erhalten das Handle beim Öffnen der Datei mit FileOpen().

Wurde mit FileOpen() ein gültiges Handle bezogen, dann MUSS die Datei nach der Bearbeitung über FileClose() geschlossen werden! => Deshalb immer StartSeq ... Always ... StopSeq verwenden!

Parameter

aFileHandle:N

FileHandle

Rückgabewert

Keiner

Beispiel

| nHandle, dDatum, nDatum, nError |

nHandle := FileOpen('C:\TEMP\U_Zahlung.Pas', _OR(fo_ReadWrite, fo_Shared)),

if nHandle > -1 then

   startseq,

      dDatum := FileDateToDateTime(FileGetDate(nHandle)),

      WriteLn(dDatum),

      nDatum := DateTimeToFileDate(Date() + TimeEx()),

      WriteLn(nDatum),

      nError := FileSetDate(nHandle, nDatum),

      if nError <> 0 then

         WriteLn('Fehlercode ' + Str(nError)),

      else

         WriteLn('Neues Datei-Datum ' + DateTimeToStr(FileDateToDateTime(nDatum))),

      endif,

   always,

      FileClose(nHandle),

   stopseq,

endif,

Siehe auch:

FileOpen()


FileDateToDateTime()

FileDateToDateTime() – Umwandlung Dateidatum- u. Zeit

Beschreibung

Die Funktion wandelt das numerische Ergebnis der Funktion FileAge in ein Datums- / Zeitformat um.

Parameter

aFileAge:N

numerischer Wert, der von der Funktion FileAge() zurückgegeben wurde.

Rückgabewert

Datum - umgewandeltes Datum

Beispiel

| aFileDatum |

aFileDatum := FileDateToDateTime(FileAge('C:\Temp\Test\Dontenwill.txt')),

Meld(DateTimeToStr(aFileDatum)),

Siehe auch:

FileAge()


FileGetAttr()

FileGetAttr() – Dateiattribut ermitteln

Beschreibung

Die Funktion gibt numerisch codiert die Dateiattribute einer Datei zurück.

Parameter

aFileName:C

Pfadangabe + Dateiname

Rückgabewert

Numerisch - Codierte Dateiattribute. Bei einer nicht gefundenen Datei: -1

Hinweis

Um auf ein bestimmtest Dateiattribut zu testen muss das Ergebnis der Funktion mit "and" + einer Dateiattributs-Konstante verknüpft werden. Ist das Ergebnis dieser logischen Addition > 0 dann ist das Dateiattribut gesetzt.

Beispiel

FileGetAttr('C:\Temp\Test\Text.txt')

Siehe auch:

FileSetAttr()

FileGetAttrValue()


FileGetAttrValue()

FileGetAttrValue() – Dateiattribut / Information ermitteln

Beschreibung

Die Funktion gibt ein Dateiattribut oder eine Datei-Information zurück.

Parameter

aFileName:C | Pfadangabe + Dateiname
aAttr:N | Index des Dateiattributs / Datei-Information (siehe FileSetAttr())

Rückgabewert

Alphanumerisch

wenn aAttr eine Dateiattributs-Konstante ist, dann

'J' - für Dateiattribut gesetzt

'N' - für Dateiattribut nicht gesetzt

wenn aAttr eine Datei-Informations-Konstate ist, dann ist die Rückgabe der Text der Information

Beispiel

| aFile |

FileGetAttrValue(aFile, faReadOnly) = 'J'

// entspricht: (FileGetAttr(aFile) and faReadOnly) > 0

Siehe auch:

FileGetAttr()

FileSetAttr()


FileGetDate()

FileGetDate() – Datei-Datum ermitteln

Beschreibung

Die Funktion gibt die DOS Datums- und Zeitinformationen einer bestimmten Datei zurück.

Mit FileGetDate() kann der Zeitstempel der Datei mit dem angegebenen Handle ermittelt werden. Bei einem ungültigen Handle wird der Wert -1 zurückgegeben. Der Rückgabewert kann anschließend mit der Funktion FileDateToDateTime() in einen Wert des Typs TDateTime konvertiert werden.

Parameter

aFileHandle:N

FileHandle

Rückgabewert

Numerisch - Dateidatum

Beispiel

| nHandle, dDatum, nDatum, nError |

nHandle:= FileOpen('C:\TEMP\U_Zahlung.Pas', _OR(fo_ReadWrite, fo_Shared)),

if nHandle > -1 then

   startseq,

      dDatum:= FileDateToDateTime(FileGetDate(nHandle)),

      WriteLn(dDatum),

      nDatum:= DateTimeToFileDate(Date() + TimeEx()),

      WriteLn(nDatum),

      nError:= FileSetDate(nHandle, nDatum),

      if nError <> 0 then

         WriteLn('Fehlercode ' + Str(nError))

      else

         WriteLn('Neues Datei-Datum ' + DateTimeToStr(FileDateToDateTime(nDatum)))

      endif,

   always,

      FileClose(nHandle)

   stopseq,

endif


FileOpen()

FileOpen() – File Handle

Beschreibung

Mit FileOpen können Sie eine Datei öffnen und ihr Windows-Datei-Handle abrufen. Der Zugriffsmodus ergibt sich durch eine ODER-Verknüpfung einer fo_Open-Konstante mit einer der fo_Share-Konstanten. Bei Erfolg gibt FileOpen einen positiven Integer-Wert zurück, der als Handle für die geöffnete Datei verwendet werden kann. Der Rückgabewert -1 gibt an, daß ein Fehler aufgetreten ist.

Wurde mit FileOpen() ein gültiges Handle bezogen, dann MUSS die Datei nach der Bearbeitung über FileClose() geschlossen werden! Deshalb immer StartSeq ... Always ... StopSeq verwenden!

Parameter

aFileName:C | File + Pfad
aMode:N | Zugriffsmodus (logische OR-Verknüpfung aus fo_Open Konstante und fo_Share Konstante); Open Konstanten fo_Create Datei erzeugen fo_Read Nur Lesezugriff fo_Write Nur Schreibzugriff fo_ReadWrite Lese- und Schreibzugriff; Share Konstanten fo_Compat Kompatibel zu dem Verfahren, mit dem FCBs geöffnet werden fo_Exclusive Kein Lese- und Schreibzugriff fo_DenyWrite Kein Schreibzugriff fo_DenyRead Kein Lesezugriff fo_Shared Andere haben uneingeschränkten Zugriff

Rückgabewert

Numerisch - FileHandle. Bei Fehler: -1

Beispiel

| nHandle, dDatum, nDatum, nError |

nHandle := FileOpen('C:\TEMP\U_Zahlung.Pas', _OR(fo_ReadWrite, fo_Shared)),

if nHandle > -1 then

   startseq,

      dDatum := FileDateToDateTime(FileGetDate(nHandle)),

      WriteLn(dDatum),

      nDatum := DateTimeToFileDate(Date() + TimeEx()),

      WriteLn(nDatum),

      nError := FileSetDate(nHandle, nDatum),

      if nError <> 0 then

         WriteLn('Fehlercode ' + Str(nError)),

      else

         WriteLn('Neues Datei-Datum ' + DateTimeToStr(FileDateToDateTime(nDatum))),

      endif,

   always,

      FileClose(nHandle),

   stopseq,

endif,

Siehe auch:

FileClose()


FileSearch()

FileSearch() – Datei Suchen

Beschreibung

Die Funktion sucht in einem Verzeichnis nach einer Datei.

Parameter

aFileName:C | Name der Datei, die gesucht wird
aDirList:C | Verzeichnis, das durchsucht wird

Rückgabewert

Alphanumerisch - Pfadangabe der Datei.

Wenn die Datei nicht gefunden wurde: Leerer String

Wenn die Datei im aktuellen Verzeichnis gefunden wurde: Nur Dateiname

Beispiel

FileSearch('Test.txt', 'C:\temp')


FileSetAttr()

FileSetAttr() – Dateiattribut setzen

Beschreibung

Die Funktion setzt die Dateiattribute einer Datei oder die Datei-Informationen.

Parameter

aFileName:C | Pfad + Dateiname
aAttr:N | Numerisches Dateiattribut/Information; Dateiattributs-Konstanten faReadOnly - Schreibgeschützte Datei faHidden - Verborgene Datei faSysFile - Systemdatei faVolumeID - Systemdatei faDirectory - Verzeichnis faArchive - Archivdatei faAnyFile - Beliebige Datei; Datei-Informations-Konstanten faFileTitle - Titel faFileSubject - Beschreibung faFileAuthor - Autor faFileKeyWords - Schlüssel-Wörter faFileComment - Kommentar faFileVersion - Datei-Version
aAttrValue:C | Wert der Datei-Information (nur bei aAttr gleich einer Datei-Informations-Konstante)

Rückgabewert

Logisch - setzen der Dateiattribute/Information erfolgreich

Hinweis

Beim Setzen von mehreren Dateiattributen müssen die Dateiattributs-Konstanten mit einem "or" verknüpft werden.

Beim Setzen von mehreren Datei-Informationen

- darf die Datei nicht schreibgeschützt sein

- muss die Funktion mehrmals aufgerufen werden!

Beim Kopieren von Dateien mit Datei-Informationen gehen diese unter Umständen verloren, da diese auf Windows-Ebene und nicht in der Datei gespeichert werden (Kopieren über den Windows-Explorer kopiert auch die Datei-Informationen)

Beispiel

| aFile, aFileAttr, aTitel, aAutor, aVersion, aReadOnly |

aFile := 'C:\temp\test.txt',

// Datei Schreibschutz aufheben falls gesetzt

aReadOnly := false,

aFileAttr := FileGetAttr(aFile),

if (aFileAttr and faReadOnly) > 0 then

   aReadOnly := true,

   FileSetAttr(aFile, _XOR(aFileAttr, faReadOnly)),

endif,

// alte Datei-Informationen ermitteln

aTitel   := FileGetAttrValue(aFile, faFileTitle),

aAutor   := FileGetAttrValue(aFile, faFileAuthor),

aVersion := FileGetAttrValue(aFile, faFileVersion),

// neue Datei-Informationen schreiben

if FileSetAttr(aFile, faFileTitle,   'Test-Datei') and

   FileSetAttr(aFile, faFileAuthor,  'Mustermann') and

   FileSetAttr(aFile, faFileVersion, 'V1.0') then

   // alte Datei-Information ausgeben

   Meld('Datei-Informationen wurden erneuert.' + CRLF +

        'Alte Werte' + CRLF +

        'Titel: '    + aTitel + CRLF +

        'Autor: '    + aAutor + CRLF +

        'Version: '  + aVersion),

endif,

// Schreibschutz der Datei ggf. wieder setzen

if aReadOnly then

   FileSetAttr(aFile, aFileAttr or faReadOnly),

endif,

Siehe auch:

FileGetAttr()

FileGetAttrValue()


FileSetDate()

FileSetDate() – Datei Datum setzen

Beschreibung

FileSetDate() setzt die DOS Datums- und Zeitinformationen der mit aFileHandle angegebenen Datei auf den Wert von aFileAge. Mit der Funktion DateTimeToFileDate() kann ein TDateTime-Wert in die entsprechenden DOS-Informationen konvertiert werden. Bei Erfolg gibt FileSetDate() den Wert Null, ansonsten einen Windows-Fehlercode zurück.

Parameter

aFileHandle:N | FileHandle
aFileAge:N | Numerischer Wert (wie z.B. von der Funktion FileAge() zurückgeliefert)

Rückgabewert

Numerisch - Neues numerisches Dateidatum

Beispiel

| nHandle, dDatum, nDatum, nError |

nHandle := FileOpen('C:\TEMP\U_Zahlung.Pas', _OR(fo_ReadWrite, fo_Shared)),

if nHandle > -1 then

   startseq,

      dDatum:= FileDateToDateTime(FileGetDate(nHandle)),

      WriteLn(dDatum),

      nDatum:= DateTimeToFileDate(Date() + TimeEx()),

      WriteLn(nDatum),

      nError:= FileSetDate(nHandle, nDatum),

      if nError <> 0 then

         WriteLn('Fehlercode ' + Str(nError))

      else

         WriteLn('Neues Datei-Datum ' + DateTimeToStr(FileDateToDateTime(nDatum)))

      endif,

   always,

      FileClose(nHandle)

   stopseq,

endif,

Siehe auch:

FileAge()

FileDateToDateTime()

FileGetAttr()

FileSetAttr()

FileGetAttrValue()


FileUnZip()

FileUnZip() – Datei entzippen

Beschreibung

Die Funktion entzippt eine gepackte Datei.

Parameter

cZipName:C | Pfadangabe + Filename des ZIP-Archivs
cDestDir:C | Zielverzeichnis
cDestFiles:C | Name der Datei(en), die aus dem ZIP-Archiv entpackt werden sollen; default = Leerstring (Gesamtes ZIP-Archiv entpacken)
cPassword:C | Passwort für ZIP-Archiv

Rückgabewert

Keiner

Beispiel

FileUnZip('C:\temp\test.zip', 'C:\temp\', , 'test')


FileZip()

FileZip() – Datei zippen

Beschreibung

Die Funktion zippt (komprimiert) eine Datei in ein ZIP-Format.

Parameter

cZipName:C | Pfadangabe + Filename des zu erstellenden ZIP-Archivs
cSourceDir:C | Quellverzeichnis
cSourceFiles:C | Name der zu zippenden Datei. Jokerzeichen sind möglich. default = Leerstring (Alle Dateien im Quellverzeichnis zippen); "*.txt" zippt alle Text-Dateien im Quellverzeichnis)
cPassword:C | Datei mit Passwort schützen; default = Leerstring (Kein Passwortschutz)
lRecurse:L | Rekursiv alle in Unterordnern enthaltenen Dateien mitzippen default = true
lPaths:L | Quell-Ordnerstruktur im ZIP-Archiv abbilden (lRelativePaths muss false sein) default = true
lRelativePaths:L | Relative Pfade verwenden; default = true

Rückgabewert

Keiner

Beispiel

FileZip('C:\temp\test.zip', 'C:\temp\', '*.txt', 'Test-PW', false, true, false)


FOpen()

FOpen() – Datei öffnen

Beschreibung

Die Funktion öffnet eine Datei und gibt sie an ein Objekt zurück.

Parameter

aFileName:C | Pfad + Dateiname
aOpenMode:N | Öffnungsmodus; FO_READ nur lesen; FO_WRITE nur schreiben; FO_EXCLUSIVE Datei für andere Benutzer sperren; FO_CREATE Datei anlegen

Rückgabewert

Objekt - Geöffnete Datei

Beispiel

| aFileName, oFileObject |

aFileName   := 'C:\Temp\Test\Text.txt',

oFileObject := FOpen(aFileName, FO_READ),

WriteLn(oFileObject.Active, oFileObject.EoF, oFileObject.FileName,

        oFileObject.Size),


ForceDirectories()

ForceDirectories() – Verzeichnispfad anlegen

Beschreibung

Unter DOS und Windows können Verzeichnisse nur der Reihe nach angelegt werden. Wenn z.B. das Verzeichnis C:\BE\KUNDE\LOKAL angelegt werden soll, müssen die Verzeichnisse BE und KUNDE existieren, bevor LOKAL angelegt werden kann. Mit ForceDirectories() kann ein Verzeichnis und alle übergeordneten Verzeichnisse, die noch nicht existieren, auf einmal angelegt werden.

Parameter

aDirName:C

Verzeichnispfad

Rückgabewert

Logisch / Boolean - alle Verzeichnisse konnten erstellt werden

Beispiel

ForceDirectories('C:\Test1\Test2\Test3\Test4')

Siehe auch:

CreateDir()


FRead()

FRead() – Dateiinhalt lesen

Beschreibung

Die Funktion liest aCount Bytes (in diesem Fall Zeichen) eines FileObjekts und schreibt diese in die referenzierte Variable aBufferVar. Der Anfangspunkt für den Lesevorgang wird über die Eigenschaft Position des aFileObject festgelegt.

Parameter

aFileObject:O | Das Fileobjekt, das eingelesen wird
aBufferVar:R | Die Variable, die den Inhalt erhält
aCount:N | Die Anzahl von Bytes, die gelesen werden

Rückgabewert

Numerisch - Anzahl gelesener Bytes

Beispiel

| aFileName, oFileObject, rBuffer |

aFileName   := 'C:\Temp\Test.txt',

oFileObject := FOpen(aFileName, FO_READ),

FRead(oFileObject, rBuffer, 10),

WriteLn(rBuffer),

oFileObject.Position := 6,

FRead(oFileObject, rBuffer, 8),

WriteLn(rBuffer),


FReadLn()

FReadLn() – Dateizeile einlesen

Beschreibung

Die Funktion liest eine Zeile einer Datei von der aktuellen Position ab aus, und gibt sie zurück. Die Position wird anschließend auf die nächste Zeile verschoben.

Parameter

aFileObject:O

Fileobjekt, welches eingelesen wird

Rückgabewert

Alphanumerisch - Textzeile

Beispiel

| aFileName, oFileObject |

aFileName   := 'C:\Temp\Test.txt',

oFileObject := FOpen(aFileName, FO_READ),

WriteLn(FReadLn(oFileObject)),

WriteLn(FReadLn(oFileObject)),

WriteLn(FReadLn(oFileObject)),


FSeek()

FSeek() – Position in einer Datei verändern

Beschreibung

Die Funktion setzt die aktuelle Position einer Datei um aOffset Bytes weiter vor.

Parameter

aFileObject:O | Fileobjekt, welches positioniert wird
aOffset:N | Anzahl der Bytes die vorgerückt wird
aSeekMode:N | Suchmodus; default = FS_RELATIVE; FS_RELATIVE Position wird ausgehend von aktueller verändert; FS_SET Position wird ausgehend vom ersten Byte verändert; FS_END Position wird ausgehen vom letzten Byte verändert

Rückgabewert

Numerisch - Neue Position

Beispiel

| aFileName, oFileObject, rBuffer, rBuffer2 |

aFileName   := 'C:\Temp\Test.txt',

oFileObject := FOpen(aFileName, FO_READ),

FSeek(oFileObject, 5),

WriteLn(FReadLn(oFileObject)),

FSeek(oFileObject, 9, FS_SET),

WriteLn(FReadLn(oFileObject)),

FSeek(oFileObject, -10, FS_END),

WriteLn(FReadLn(oFileObject)),


FWrite()

FWrite() – In eine Datei schreiben

Beschreibung

Die Funktion schreibt aText in die Datei aFileObject. Falls aCount nicht angegeben ist, wird der ganze Inhalt von aText geschrieben, ansonsten nur die in aCount enthaltene Bytezahl.

Parameter

aFileObject:O | Fileobjekt, in welches geschrieben wird
aText:C | Text der geschrieben werden soll
aCount:N | Bytezahl, für Eingrenzung des Inhaltes; default = -1 (Keine Eingrenzung)

Rückgabewert

Numerisch - Anzahl Zeichen geschriebener Text

Beispiel

| aOutFile |

aOutFile := FOpen('C:\Temp\Outfile.txt', FO_CREATE),

FWrite(aOutFile, OemToAnsi('Dieser Text wurde mit FWrite() geschrieben.'))

Siehe auch:

FWriteLn()


FWriteLn()

FWriteLn() – In eine Datei zeilenweise schreiben

Beschreibung

Die Funktion schreibt den ganzen Text aus aText in die Datei aFileObject und fügt zusätzlich die Zeichenfolge <Cr><Lf> (Zeilenumbruch) an.

Parameter

aFileObject:O | Fileobjekt, in welches geschrieben wird
aText:C | Text der geschrieben werden soll
aCount:N | Bytezahl für Eingrenzung des Inhaltes default = -1 (Keine Eingrenzung)

Rückgabewert

Numerisch - Anzahl der geschriebenen Bytes

Beispiel

| aOutFile |

aOutFile := FOpen('C:\Temp\Outfile.txt', FO_CREATE),

FWriteLn(aOutFile, OemToAnsi('Dieser Text')),

FWriteLn(aOutFile, OemToAnsi('wurde mit')),

FWriteLn(aOutFile, OemToAnsi('FWriteLn() geschrieben.')),

Siehe auch:

FWrite()


GetCurrentDir()

GetCurrentDir() – Aktuelles Verzeichnis

Beschreibung

Die Funktion gibt das aktuelle Verzeichnis zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Alphanumerisch - Aktuelles Verzeichnis

Beispiel

ChDir('C:\Temp'),

GetCurrentDir()

Siehe auch:

ChDir()


GetTempPath()

GetTempPath() – Temporären Windowspfad ermitteln

Beschreibung

Mit dieser Funktion lässt sich für den aktuell angemeldeten User,

der Temporäre Pfad von Windows ermitteln.

Parameter

keine

Rückgabewert

Alphanumerisch

Beispiel

| cText |

cText := GetTempPath(),

writeln(cText),


LoadArray()

LoadArray() – Array aus Datei laden

Beschreibung

Die Funktion lädt ein Array aus einer Datei und übergibt es einer Variablen.

Parameter

aArray:R | Referenziertes Array
aFileName:C | Pfad + Dateiname

Rückgabewert

Logisch / Boolean - Array konnte aus der angegebenen Datei geladen werden

Beispiel

| aFile, aIn, aFileName, cText, nX, aFileArray, i |

aFileName := "C:\Temp\Test.txt",

cText     := "Dontenwill",

nX        := Len(cText),

if !DirectoryExists("C:\temp") then

   CreateDir("C:\Temp"),

endif,

aFile := FOpen(aFileName, FO_CREATE),

while nX >= 0 do

   startseq,

   FWriteLn(aFile, OemToAnsi(SubStr(cText, Len(cText) - nX + 1, 3))),

   onerror,

   stopseq,

   nX := nX - 3,

end,

FClose(aFile),

LoadArray(aFileArray, aFileName),

for i := 1 to Len(aFileArray) do

   WriteLn(aFileArray[i])

end,


LoadFile()

LoadFile() – Objektinhalt aus Datei laden

Beschreibung

Die Funktion läd eine Datei in ein Objekt der Klassen TBlobField, TPicture, TBitmap, TMemoStrings, TStrings ….

Parameter

aObject:O | Objekt
aFileName:C | Pfad + Dateiname

Rückgabewert

Logisch / Boolean - Datei konnte geladen werden

Beispiel

| aForm, aImage, aMemo, aBtn, aBtn2, aDlg, cFilter |

function DoOnClick(sender)

   if sender.name = 'BtnText' then

      cFilter := 'Text Dateien (*.txt)|*.txt',

   else,

      cFilter := 'JPG Dateien (*.jpg)|*.jpg|Bitmap Dateien (*.bmp)|*.bmp|' +

                 'Gif Dateien (*.gif)|*.gif',

   endif,

   aDlg        := OpenDlg('Datei auswählen...', cFilter),

   aDlg.active := true,

   if aDlg.selected then

      if sender.name = 'BtnText' then

         LoadFile(aMemo.lines, aDlg.FileName),

      else,

         LoadFile(aImage.picture, aDlg.FileName),

      endif,

   endif,

   DestroyObject(aDlg),

end,

aForm         := CreateObject('TForm'),

aForm.height  := 150,

aForm.width   := 500,

aForm.caption := 'LoadFile-Beispiel',

aImage        := CreateObject('TImage', 'Image', aForm, aForm),

aImage.left   := 200,

aImage.height := 96,

aImage.width  := 290,

aMemo         := CreateObject('TMemo', 'Memo', aForm, aForm),

aMemo.height  := 96,

aBtn          := CreateObject('TButton', 'BtnText', aForm, aForm),

aBtn.left     := 100,

aBtn.top      := 100,

aBtn.height   := 20,

aBtn.width    := 100,

aBtn.Caption  := 'Text-Datei laden',

aBtn2         := CreateObject('TButton', 'BtnImage', aForm, aForm),

aBtn2.left    := 250,

aBtn2.top     := 100,

aBtn2.height  := 20,

aBtn2.width   := 100,

aBtn2.Caption := 'Bild-Datei laden',

LoadFile(aImage.picture, 'C:\loadfile.jpg'),

LoadFile(aMemo.lines, 'C:\loadfile.txt'),

AssignEvent(aBtn, 'OnClick', 'DoOnClick'),

AssignEvent(aBtn2, 'OnClick', 'DoOnClick'),

ShowModal(aForm)

// Ergebnis: Mit den zwei Buttons können andere Text- oder Bild-Dateien

//           in das Fenster geladen werden.


LoadMemTable()

LoadMemTable() – MemTable laden

Beschreibung

Die Funktion lädt eine MemTable aus einer Datei, die vorher mit SaveMemTable() angelegt wurde.

Parameter

cFileName:C | Pfad + Filename
oMemTable:O | MemTable

Rückgabewert

Keiner

Beispiel

| oMem |

oMem := CreateObject('TMemCalcTable'),

LoadMemTable('C:\Test.txt', oMem),

oMem.Active := true,

Browse(, oMem),


OpenDlg()

OpenDlg() – Dateiauswahlfenster

Beschreibung

Die Funktion öffnet den Standarddialog zur Dateiauswahl.

Parameter

aTitle:C | Titel des Dialogfensters; default = 'Öffnen'
aFilter:C | Filterausdruck; default = Leerstring
aInitialDir:C | Anfangsverzeichnis default = Leerstring (Verzeichnis der zuletzt geöffneten Datei)
aFileName:C | Vorgabe für Pfad + Dateiname; default = Leerstring

Rückgabewert

Objekt - Geöffnete Datei

Beispiel

| aDlg |

aDlg := OpenDlg('BE-Dateiauswahl', 'BE-Programme|*.DWP|Alle Dateien|*.*', MBEDEFAULT),

startseq,

   aDlg.Active := true,

   if aDlg.Selected then

      WriteLn(aDlg.FileName)

   else

      WriteLn('Keine Auswahl getroffen ...')

   endif,

onerror,

stopseq,

DestroyObject(aDlg),


PathCopy()

PathCopy() – Dateipfad kopieren

Beschreibung

Die Funktion durchsucht den angegebenen Pfad nach Dateien, die zur Suchmaske aMask passen und kopiert diese nach cDestPath. Unterverzeichnisse von cSourcePath werden ebenfalls durchsucht. Die Namen der Unterverzeichnisse von cSourcePath werden übernommen und fehlende Verzeichnisse ggf. angelegt. Ist die Zieldatei bereits vorhanden, entscheidet der Parameter nCopyMode, was in der jeweiligen Situation geschehen soll.

Hinweis

Die Verarbeitung dieses Befehls kann u.U. sehr lange dauern.

Achtung: cDestPath darf niemals ein Unterverzeichnis von cSourcePath sein.

Parameter

aMask:U | Suchmaske; kann auch als Array angegeben werden; Platzhalter * bzw. ? sind erlaubt.
cSourcePath:C | Pfad, in dem die Suche ausgeführt werden soll. Leer startet in aktuellen Verzeichnis.
cDestPath:C | Pfad, in den die Dateien kopiert werden sollen. Leer kopiert in das aktuelle Verzeichnis.
nCopyMode:N | Bedeutung von nCopyMode:
 | 0 - nicht kopieren, wenn Datei im Zielverzeichnis bereits vorhanden ist
 | 1 - nur überschreiben, wenn Datei im Quellverzeichnis neuer ist
 | 2 - immer überschreiben

Rückgabewert

Logisch -> True, wenn der Kopiervorgang komplett abgeschlossen wurde, False wenn ein Fehler aufgetreten ist.

Beispiel

// Durchsucht Verzeichnis '\\server\BUILD\' sowie alle darunter liegenden Verzeichnisse

// nach den Dateien 'UPDATE*.RES' und 'DOWN*.RES' und kopiert diese mit Übernahme des

// Teilpfads (unterhalb von '\\server\BUILD\') in das Verzeichnis 'C:\server\BUILD_SAV\'.

// Dateien werden nur überschrieben, wenn die Quelldatei neuer ist als die Zieldatei.

WriteLn(PathCopy({'UPDATE*.RES', 'DOWN*.RES'},   // Suchmaske -> String oder Array

                 '\\server\BUILD\',              // Quell-Verzeichnis

                 'C:\server\BUILD_SAV\',         // Ziel-Verzeichnis

                 1))                             // CopyMode "Nur Neuer"

Siehe auch:

PathSeek()


PathSeek()

PathSeek() – Dateipfad durchsuchen

Beschreibung

Die Funktion durchsucht den angegebenen Pfad nach Dateien, die zur Suchmaske aMask passen. Unterverzeichnisse von cPath werden ebenfalls durchsucht.

Hinweis

Die Verarbeitung dieses Befehls kann u.U. sehr lange dauern.

Parameter

aMask:U | Suchmaske; kann auch als Array angegeben werden; Platzhalter * bzw. ? sind erlaubt.
cPath:C | Pfad, in dem die Suche ausgeführt werden soll. Leer startet in aktuellen Verzeichnis.

Rückgabewert

Array, das alle Dateinamen mit vollständiger Pfadangabe enthält, die zur Suchmaske passen.

Beispiel

// Durchsucht Verzeichnis '\\server\BUILD\' sowie alle darunter liegenden Verzeichnisse

// nach den Dateien 'UPDATE.RES' und 'DOWN.RES' und gibt die vollständigen

// Datei-Namen (inkl. Pfadangabe) in einem Array zurück.

| aFileList |

aFileList := PathSeek({'UPDATE.RES', 'DOWN.RES'},   // Suchmaske -> String oder Array

                      '\\server\BUILD\'),           // Such-Verzeichnis

WriteLn(aFileList)

Siehe auch:

PathCopy()


Pdf2DataSet()

Pdf2DataSet() – PDF in Tabelle speichern

Beschreibung

Die Funktion wandelt die Seite eines PDF-Files in eine Bilddatei um und speichert diese in das BLOB-Feld einer Tabelle. Jeder Funktionsaufruf legt einen neuen Datensatz in aDataSet an, und speichert in das BLOB-Feld aFieldName das JPEG der angegebenen PDF-Seite ab. Wird kein aDataSet übergeben, wird eine MemTable erstellt und ein BLOB-Feld mit dem Name aFieldName angelegt. Bleibt aFieldName leer, wird ein Feld 'JPEG_DATA' angelegt.

Das Programm GhostScript muss auf dem System installiert sein, um diese Funktion ausführen zu können!

Parameter

aPDFFileName:C | Name des PDF-Files
aFieldName:C | Feldname des BLOB-Feldes
aDataset:O | DataSet, in das gespeichert werden soll default = nil (Ein DataSet wird erstellt)
aPage:N | Seite; default = 1
aResolution:N | Auflösung; default = p2j300 (CB-Konstante)
aQuality:N | Qualität; default = 75

Rückgabewert

Objekt - Tabelle, in die gespeichert wurde

Beispiel

| oDS |

oDS := Pdf2DataSet('C:\test.pdf', '',, 1),

Pdf2DataSet('C:\test.pdf', '', oDS, 2),

Browse(, oDS),


Pdf2Jpeg()

Pdf2Jpeg() – PDF in JPEG konvertieren

Beschreibung

Die Funktion wandelt die Seite eines PDF-Files in eine Bilddatei im Format JPEG um.

Das Programm GhostScript muss auf dem System installiert sein, um diese Funktion ausführen zu können!

Parameter

aPDFFileName:C | Pfad + Name des PDF-Files
aJPGFileName:C | Name des generierten JPEG-Files; default = Leerstring
aPage:N | Seite; default = 1
aResolution:N | Auflösung; default = p2j300 (CB-Konstante)
aQuality:N | Qualität; default = 75

Rückgabewert

Alphanumerisch - Pfad + Name des generierten JPEG

Beispiel

Pdf2Jpeg('C:\test.pdf', 'C:\test.jpg', 2)


RemoveDir()

RemoveDir() – Verzeichnis löschen

Beschreibung

Die Funktion löscht ein Verzeichnis.

Parameter

aDirName:C

Verzeichnispfad

Rückgabewert

Logisch / Boolean - Verzeichnis konnte gelöscht werden

Beispiel

RemoveDir('C:\Temp\Test')

Siehe auch:

CreateDir()


RenameFile()

RenameFile() – Datei umbenennen

Beschreibung

Die Funktion ändert den Namen einer Datei.

Parameter

aOldName:C | Alter Pfad + alter Dateiname
aNewName:C | Neuer Pfad + neuer Dateiname

Rückgabewert

Logisch - Datei konnte umbenannt werden

Beispiel

RenameFile('C:\Temp\Test.txt', 'C:\Temp\Ordner1\Test2.txt')


ResizePicture()

ResizePicture() – Skalierung einer Grafik

Beschreibung

Wandelt eine Ausgangsgrafik (Datei, Blob-Feld) im Format BMP, PNG oder JPG in eine Zielgrafik (Datei, Blob-Feld) im PNG-Format um. Der aSize-Parameter gibt dabei den maximalen Wert für Höhe oder Breite an. Die Grafik wird vergrößert oder verkleinert.

Die Funktion ist gedacht für die "Größen-Normalisierung" von Bilddaten, um diese z.B. als Thumbnails in einem Browser anzuzeigen. Ein weiterer Anwendungsfall ist das Drucken von standardisierten Bildgrößen in Belegen.

Hinweis

Zielformat ist immer PNG.

Parameter

aObjectSource:U | Feld-Objekt oder Dateiname der Bild-Quelle
aSize:N | Maximale Höhe oder Breite der Grafik
aObjectTarget:U | Feld-Objekt oder Dateiname des Bild-Ziels

Rückgabewert

Keiner

Beispiel

// Speichern des Inhalts eines Feldes als Vorschau-Bild

// Das Bild ist maximal 100px breit oder 100px breit.

  aField := dbfield("DATA",KDN707),

  Loadfile(aField,aFileName),

  ResizePicture(dbField("DATA"),100,dbField("THUMBNAIL")),


SaveDlg()

SaveDlg() – Dateiauswahlfenster zum Speichern

Beschreibung

Die Funktion öffnet den Standarddialog zur Dateiauswahl.

Parameter

aTitle:C | Titel des Dialogfensters; default = 'Speichern unter'
aFilter:C | Filterausdruck; default = Leerstring
aInitialDir:C | Anfangsverzeichnis; default = Leerstring (Verzeichnis der zuletzt gespeicherten Datei)
aFileName:C | Vorgabe für Pfad + Dateiname; default = Leerstring

Rückgabewert

Objekt - Gespeicherte Datei

Beispiel

| aDlg |

aDlg := SaveDlg('BE-Dateiauswahl', 'BE-Programme|*.DWP|Alle Dateien|*.*',

                MBEDEFAULT, 'File.txt'),

startseq,

   aDlg.Active := true,

   if aDlg.DoSave then

      WriteLn(aDlg.FileName)

   else

      WriteLn('Keine Auswahl getroffen ...')

   endif,

always,

   DestroyObject(aDlg),

stopseq,


SaveFile()

SaveFile() – Objektinhalt speichern

Beschreibung

Die Funktion speichert den Inhalt eines Objekts der Klassen TBlobField, TPicture, TBitmap, TMemoStrings, TStrings, … in einer Datei.

Parameter

aObject:O | Objekt, welches gespeichert werden soll
aFileName:C | Pfad +Dateiname

Rückgabewert

Logisch - Boolean - Speichern erfolgreich

Beispiel

| aForm, aMemo, aBtnS, aBtnC |

function DoOnResize(sender)

  aMemo.height := aForm.height-60,

  aBtnS.top    := aForm.height-50,

  aBtnC.top    := aForm.height-50,

end,

function save()

   | aDlg, cEndung |

   aDlg        := OpenDlg('Datei auswählen...', 'Text Dateien (*.txt)|*.txt|',

                          'Alle Dateien (*.*)|*.*'),

   aDlg.active := true,

   if aDlg.selected then

      if File(aDlg.filename) then

         if JN('Datei schon vorhanden! Überschreiben?') then

            SaveFile(aMemo.lines, aDlg.filename),

         endif,

      else,

         if TokenCount(aDlg.filename,'.') > 1 then

            cEndung := '',

         else,

            cEndung := '.txt',

         endif,

         SaveFile(aMemo.lines, aDlg.filename + cEndung),

      endif,

   endif,

end,

function DoOnClick(sender)

   case sender.name

      of 'save' :: save(),

      of 'exit' :: CloseForm(aForm),

   endcase,

end,

function DoOnClose(sender, canclose)

   if JN('Wirklich beenden?') then

      canclose := true,

   else,

      canclose := false,

   endif,

end,

aForm         := CreateObject('TForm'),

aForm.caption := 'SaveFile()',

aForm.height  := 500,

aForm.width   := 800,

aForm.left    := SCREENWIDTH - aForm.width,

aForm.top     := 200,

aMemo         := CreateObject('TMemo', '', aForm, aForm),

aMemo.align   := altop,

aBtnS         := CreateObject('TButton', 'save', aForm, aForm),

aBtnS.caption := '

aBtnS.height  := 20,

aBtnS.width   := 100,

aBtnS.left    := 10,

aBtnC         := CreateObject('TButton', 'exit', aForm, aForm),

aBtnC.caption := '

aBtnC.height  := 20,

aBtnC.width   := 100,

aBtnC.left    := aBtns.left+115,

AssignEvent(aForm, 'OnResize',     'DoOnResize'),

AssignEvent(aForm, 'OnCloseQuery', 'DoOnClose'),

AssignEvent(aBtnS, 'OnClick',      'DoOnClick'),

AssignEvent(aBtnC, 'OnClick',      'DoOnClick'),

ShowModal(aForm),

// Ergebnis: Eingabefenster mit einem 'Speichern'- und einem 'Beenden'-Button.

//           Der 'Speichern'-Button ruft ein Datenauswahl-Fenster auf,

//           in welchem der Speicherort festgelegt werden kann.

//           Wird eine bereits existierende Datei ausgewählt, wird gefragt,

//           ob diese überschrieben werden soll.


SaveMemTable()

SaveMemTable() – Objektinhalt speichern

Beschreibung

Die Funktion speichert eine MemTable als Text-File ab.

Parameter

cFileName | Pfad der Datei
oMemTable | Memtable Objekt

Rückgabewert

Keiner

Beispiel

| oMem, oDab:DB:='waDAB310, DAB311' |

oMem                   := CreateObject('TMemCalcTable'),

oMem.BorrowFromDataSet := oDab,

oMem.Active            := true,

oMem.LoadFromDataSet   := oDab,

SaveMemTable('C:\Test.txt', oMem),


AddMonth()

AddMonth() – Monat auf Datum addieren

Beschreibung

Die Funktion addiert eine angegebene Anzahl von Monaten auf ein Datum.

Parameter

aDate:D | Beliebiges Datum
aCount:N | Anzahl der Monate

Rückgabewert

Datum - Neues Datum

Beispiel

AddMonth(CToD('28.02.2009'), 10)   // Ergebnis: '28.12.2009'


BoM()

BoM() – Beginn des Monats

Beschreibung

Die Funktion errechnet aus einem Datum den ersten Tag des entsprechenden Monats.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Datum - Erster Tag des Monats

Beispiel

BoM(CToD('28.02.2009'))   // Ergebnis: 01.02.2009

Siehe auch:

BoQ()

BoY()

EoM()

EoQ()

EoY()


BoQ()

BoQ() – Beginn des Quartals

Beschreibung

Die Funktion errechnet aus einem Datum den ersten Tag des entsprechenden Quartals.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Datum - Erster Tag des Quartals

Beispiel

BoQ(CToD('28.02.2009'))   // Ergebnis: 01.01.2009

Siehe auch:

BoM()

BoY()

EoM()

EoQ()

EoY()


BoY()

BoY() – Beginn des Jahres

Beschreibung

Die Funktion errechnet aus einem Datum den ersten Tag des entsprechenden Jahres.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Datum - Erster Tag des Jahres

Beispiel

BoY(CToD('28.02.2009'))   // Ergebnis: 01.01.2009

Siehe auch:

BoM()

BoQ()

EoM()

EoQ()

EoY()


CalculateNextTargetDay()

CalculateNextTargetDay() – Errechnen eines TARGET2-Tages

Beschreibung

Ein TARGET2-Tag ist ein international gültiger Bankarbeitstag. An diesen Tagen werden z.B. Wertstellungen im SEPA-Zahlungsverkehr durchgeführt.

TARGET2-Tage sind Mo-Fr, außer 1. Januar, Karfreitag, Ostermontag, 1. Mai, 25. & 26. Dezember.

Die Funktion errechnet zu einem übergebenem Stichtag den nächsten gültigen TARGET2-Tag. Ob der nächstgültige Tag vor oder nach dem Stichtag liegt, kann über die Angabe der Terminierungsrichtung angegeben werden.
Die Differenz in Tagen wird dazu verwendet, einen Vorlauf zu ermitteln. Fallen in diesen Vorlauf "Nicht-TARGET2-Tage", werden diese übersprungen.

Kann verwendet werden, um zu ermitteln, wann eine SEPA-Zahlung bei der Hausbank eingereicht, werden muss, um den Ausführungstermin einhalten zu können.
Kann ebenso Anwendung finden, wenn für eine SEPA-Vorankündigung das Abbuchungsdatum errechnet werden soll.

Parameter

dDatum:D | Stichtag
nDiffTage:N | absolute Differenz in Tagen; default=0
nRichtung:N | Falls das errechnete Datum kein TARGET2-Tag ist wird so lange ein Tag hinzugezählt oder abgezogen, bis es ein TARGET2-Tag ist; default=1; 1 = hinzuzählen; 2 = abziehen

Rückgabewert

Datum - der nächstgültige TARGET2-Tag

Beispiel

| dDatum |

// Der Stichtag ist Sonntag der 12.01.2014

// Der nächste TARGET2-Tag ist Montag der 13.01.2014

dDatum := StrToDateTime('12.01.2014'),

WriteLn(DToC(CalculateNextTargetDay(dDatum, 0, 1))),

// Der Stichtag ist Montag der 13.01.2014

// Der nächste TARGET2-Tag der 2 Tage vor dem Stichtag liegt ist Donnerstag der 09.01.2014

dDatum := StrToDateTime('13.01.2014'),

WriteLn(DToC(CalculateNextTargetDay(dDatum, 2, 2))),

// Der Stichtag ist Donnerstag der 25.12.2014

// Der nächste TARGET2-Tag ist Montag der 29.12.2014

dDatum := StrToDateTime('25.12.2014'),

WriteLn(DToC(CalculateNextTargetDay(dDatum, 0, 1))),


CMonth()

CMonth() – Monatsname

Beschreibung

Die Funktion gibt den im Datum dargestellten Monat als Zeichenfolge aus.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Alphanumerisch - Monatsname

Beispiel

CMonth(CToD('28.02.2009'))   // Ergebnis: 'Juni'

Siehe auch:

CToD()

Day()

Month()

Year()


ConvertTimeToUTC()

ConvertTimeToUTC() – Umrechnung der lokalen Zeit in UTC-Zeit

Beschreibung

Umrechnung der übergebenen Zeit in die Koordinierte Weltzeit (UTC-Zeit).

Hinweis

TimeZoneIndex ist systemspezifisch! (Eintrag-Reihenfolge kann abweichen)

Die übergebene Zeit muss einem gültigen Datum+Zeit Wert entsprechen

Parameter

dDateTime:D | Datum/Zeit welches umgerechnet werden soll
nTimeZoneIndex:N | Zeitzone (Default = -1, entspricht aktueller System-Zeitzone)

Rückgabewert

Datum

Beispiel

|aTime|

aTime := EncodeDate(2011, 8, 1) + EncodeTime(1, 30, 0, 0),

                                                                       // Deutschland

writeln( aTime ),                                                      // lokale Zeit: 01.08.2011 01:30:00

ConvertTimeToUTC( EncodeDate(2011, 8, 1) + EncodeTime(1, 30, 0, 0) ),  // UTC-Zeit:    31.07.2011 23:30:00 ( -2 Stunden wegen Sommerzeit)

Siehe auch:

TimeZoneBias()

ConvertUTCToTime()


ConvertUTCToTime()

ConvertUTCToTime() – Umrechnung der UTC-Zeit in lokale Zeit

Beschreibung

Umrechnung des übergebenen Zeit von der Koordinierte Weltzeit (UTC-Zeit) in die lokale Zeit.

Hinweis

TimeZoneIndex ist systemspezifisch! (Eintrag-Reihenfolge kann abweichen)

Die übergebene Zeit muss einem gültigen Datum+Zeit Wert entsprechen

Parameter

dDateTime:D | UTC Datum/Zeit welches umgerechnet werden soll
nTimeZoneIndex:N | Zeitzone (Default = -1, entspricht aktueller System-Zeitzone)

Rückgabewert

Datum

Beispiel

|aTime|

aTime := EncodeDate(2011, 8, 1) + EncodeTime(1, 30, 0, 0),

                                                                       // Deutschland

writeln( aTime ),                                                      // UTC-Zeit:    01.08.2011 01:30:00

ConvertUTCToTime( EncodeDate(2011, 8, 1) + EncodeTime(1, 30, 0, 0) ),  // lokale Zeit: 01.08.2011 03:30:00 ( +2 Stunden wegen Sommerzeit)

Siehe auch:

TimeZoneBias()

ConvertTimeToUTC()


CToD()

CToD() – Zeichenkette in Datum konvertieren

Beschreibung

Die Funktion wandelt eine Zeichenkette im Format 'TT.MM.JJJJ' in ein Datum um.

Parameter

aText:C

Alphanumerischer Wert, der datumsrelevant ist

Rückgabewert

Datum - Datumswert. Falls aText ungültig: '00:00:00'

Beispiel

CToD('28.02.2009')   // Ergebnis: 28.02.2009

Siehe auch:

DToC()

SToD()


Date()

Date() – Systemdatum

Beschreibung

Die Funktion gibt das Systemdatum als Datum zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Datum - Systemdatum

Beispiel

Date()   // Ergebnis: 28.02.2009

         // Hinweis:  Als Rückgabewert wird natürlich das

         //           aktuelle Tagesdatum ausgegeben.

Siehe auch:

CMonth()

CToD()

Day()

Month()

Year()


DateChk()

DateChk() – Datumsprüfung

Beschreibung

Die Funktion prüft Datumseingaben auf ihre Gültigkeit und gibt im Falle eines Fehlers eine Meldung aus.

Parameter

cTermin:C | Alphanumerische Datumsangabe; Zulässig Formate sind "TT.MM.JJ" oder "KW.WW.JJ"
nLeerErl:L | Gibt an, ob ein leeres Datum erlaubt ist; default=true

Rückgabewert

Logisch / Boolean - Datum gültig

Beispiel

| i, aDate |

i := 1,

repeat

   case i

      of 1 :: aDate := '',                      // Ergebnis: gültig

      of 2 :: aDate := 'KW.10.09',              // Ergebnis: gültig

// Hinweis: KW-Werte älter als 5 Jahre werden als ungültig eingestuft

      of 3 :: aDate := 'KW.10.03',              // Ergebnis: ungültig

      of 4 :: aDate := '28.02.09',              // Ergebnis: gültig

      of 5 :: aDate := 'Samstag, 2009.02.28',   // Ergebnis: ungültig

   endcase,

   if DateChk(aDate) then

      Meld('''' + aDate + '''' + ' ist gültig'),

   else

      Meld('''' + aDate + '''' + ' ist ungültig'),

   endif,

   i++,

until

   i = 6

end,


Day()

Day() – Tag aus Datum

Beschreibung

Die Funktion gibt den numerischen Wert des im Datum enthaltenen Tages zurück.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Numerisch - Tag des Datums

Beispiel

Day(CToD('13.06.2004'))   // Ergebnis: '13'

Siehe auch:

CMonth()

CToD()

Month()

Year()


Day_Diff()

Day_Diff() – Tage zwischen zwei Datumsangaben

Beschreibung

Die Funktion gibt die Anzahl der zwischen zwei Datumsangaben liegenden Tage zurück.

Parameter

aDate1:U | Von Datum
aDate2:U | Bis Datum

Rückgabewert

Numerisch - Tagesdifferenz der Daten

Beispiel

Day_Diff(CToD('28.02.2009'), CToD('09.03.2009'))   // Ergebnis: '9'

Day_Diff(CToD('28.02.2009'), CToD('01.01.2009'))   // Ergebnis: '-58'


DecodeDate()

DecodeDate() – Datum decodieren

Beschreibung

Die Funktion decodiert ein beliebiges Datum in die Bestandteile Jahr (aYear), Monat (aMonth) und Tag (aDay).

Parameter

aDate:D | Datumswert
aYear:R | Ergebnis-Parameter für das Jahr des Datums
aMonth:R | Ergebnis-Parameter für den Monat des Datums
aDay:R | Ergebnis-Parameter für den Tag des Datums

Rückgabewert

Ergebnis-Parameter - Die Parameter aYear, aMonth und aDay sind referenzierte Ergebnis-Parameter!

Nach Funktionsaufruf enthalten diese Parameter folgende Werte:

aYear - Jahr des Datums

aMonth - Monat des Datums

aDay - Tag des Datums

Beispiel

| aYear, aMonth, aDay |

DecodeDate(CToD('28.02.2008'), aYear, aMonth, aDay),

WriteLn(aYear),    // Ergebnis: '2008'

WriteLn(aMonth),   // Ergebnis: '2'

WriteLn(aDay),     // Ergebnis: '28'

Siehe auch:

DecodeTime()

EncodeDate()

EncodeTime()


DecodeTime()

DecodeTime() – Uhrzeit decodieren

Beschreibung

Die Funktion decodiert eine beliebige Uhrzeit in die Bestandteile Stunden (aHour), Minuten (aMin), Sekunden (aSec) und Millisekunden (aMSec).

Parameter

aDate:D | Datums-/Zeitwert
aHour:R | Ergebnis-Parameter für die Stunden des Datums
aMin:R | Ergebnis-Parameter für die Minuten des Datums
aSec:R | Ergebnis-Parameter für die Sekunden des Datums
aMSec:R | Ergebnis-Parameter für die Millisekunden des Datums

Rückgabewert

Ergebnis-Parameter - Die Parameter aHour, aMin, aSec und aMSec sind Ergebnis-Parameter!

Nach Funktionsaufruf enthalten diese Parameter folgende Werte:

aHour - Stunden des Datums

aMin - Minuten des Datums

aSec - Sekunden des Datums

aMSec - Millisekunden des Datums

Beispiel

| aHour, aMinute, aSecond, aMilliSec |

DecodeTime(Now(), aHour, aMinute, aSecond, aMilliSec),

WriteLn(aHour),       // Ergebnis: '9'

WriteLn(aMinute),     // Ergebnis: '32'

WriteLn(aSecond),     // Ergebnis: '35'

WriteLn(aMilliSec),   // Ergebnis: '750'

// Hinweis: Es wird natürlich die aktuelle Uhrzeit zurückgegeben.

Siehe auch:

DecodeDate()

EncodeDate()

EncodeTime()


DoW()

DoW() – Wochentag als Zahl

Beschreibung

Die Funktion gibt für ein Datum den Wochentag als Zahl zurück.

Parameter

aDate:D

Datumswert

Rückgabewert

Numerisch - ID des Wochentages

1 - Sonntag

2 - Montag

3 - Dienstag

4 - Mittwoch

5 - Donnerstag

6 - Freitag

7 - Samstag

Beispiel

DoW(CToD('28.02.2009'))   // Ergebnis: '7'


DToC()

DToC() – Datum in Zeichenkette

Beschreibung

Die Funktion wandelt ein Datum in einen alphanumerischen Wert um.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Alphanumerisch - Datumsstring

Beispiel

| aDate |

aDate := CToD('28.02.2009'),

DToC(aDate)   // Ergebnis: '28.02.2009'

Siehe auch:

CToD()

DToS()

SToD()


DToS()

DToS() – Datum in Zeichenkette2

Beschreibung

Die Funktion wandelt ein Datum vom Format "TT.MM.JJ" in einen alphanumerischen Wert vom Format "JJJJMMTT" um.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Alphanumerisch - Datumsstring

Beispiel

DToS(EncodeDate(2009, 02 , 28))   // Ergebnis: '20090228'

Siehe auch:

CToD()

DToC()

SToD()


EncodeDate()

EncodeDate() – Datum erzeugen

Beschreibung

Die Funktion erzeugt aus den Parametern ein Datum vom Typ Date.

Parameter

aYear:N | Jahreszahl
aMonth:N | Monat
aDay:N | Tag

Rückgabewert

Datum - Datumswert

Beispiel

EncodeDate(2009, 02 , 28)   // Ergebnis: 28.02.2009

Siehe auch:

DecodeDate()

DecodeTime()

EncodeTime()


EncodeTime()

EncodeTime() – Zeitwert erzeugen

Beschreibung

Die Funktion erzeugt aus den Parametern eine Uhrzeit vom Typ Date.

Parameter

aHour:N | Stunden
aMin:N | Minuten
aSec:N | Sekunden
aMSec:N | Milisekunden

Rückgabewert

Datum - Zeitwert

Beispiel

EncodeTime(9, 20, 25, 554)   // Ergebnis: 09:20:26

Siehe auch:

EncodeDate()


EoM()

EoM() – Ende des Monats

Beschreibung

Die Funktion errechnet aus einem Datum den letzten Tag des entsprechenden Monats.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Datum - Ende des Monats

Beispiel

EoM(CToD('01.02.2009'))   // Ergebnis: 28.02.2009

Siehe auch:

BoM()

BoQ()

BoY()

EoQ()

EoY()


EoQ()

EoQ() – Ende des Quartals

Beschreibung

Die Funktion errechnet aus einem Datum den letzten Tag des entsprechenden Quartals.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Datum - Ende des Quartals

Beispiel

EoQ(CToD('28.02.2009'))   // Ergebnis: 31.03.2009

Siehe auch:

BoM()

BoQ()

BoY()

EoM()

EoQ()

Kontakt zum Support | www.dontenwill.de


EoY()

EoY() – Ende des Jahres

Beschreibung

Die Funktion gibt das Jahres-End-Datum für ein übergebenes Datum zurück.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Datum - Ende des Jahres

Beispiel

EoY(CToD('28.02.2009'))   // Ergebnis: 31.03.2009

Siehe auch:

BoM()

BoQ()

BoY()

EoM()

EoQ()


FridayOfWeek()

FridayOfWeek() – Freitag einer KW

Beschreibung

Die Funktion gibt das Datum des Freitags einer Kalenderwoche zurück.

Parameter

aWeek:C

String im Format 'KW.JJ'

Rückgabewert

Datum - Freitag der Woche

Beispiel

FridayOfWeek('09.09')   // Ergebnis: 27.02.2009

Siehe auch:

FrKW()

KW()


FrKW()

FrKW() – Freitag einer KW

Beschreibung

Die Funktion gibt das Datum des Freitags einer Kalenderwoche zurück.

Parameter

cTermin:C

String im Format 'KW.JJ'

Rückgabewert

Datum - Freitag der Woche

Beispiel

FrKW('09.09')  // Ergebnis: 27.02.2009

Siehe auch:

FridayOfWeek()

KW()


GetAdsServerTime()

GetAdsServerTime() – Sever Datum ausgeben

Beschreibung

Die Funktion gibt das aktuelle Datum und Zeit des ADS-Servers zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Datum - Datum Ads-Server

Beispiel

GetAdsServerTime()   // Ergebnis: 28.02.2009 10:05:15

                     // Hinweis:  Als Rückgabewert wird natürlich das aktuelles Tagesdatum

                     //           und die aktuelle Uhrzeit ausgegeben.


IsLeapYear()

IsLeapYear() – Schaltjahr

Beschreibung

Die Funktion gibt zurück, ob es sich bei einem bestimmten Jahr um ein Schaltjahr handelt.

Parameter

nJahr:D

Beliebiges Jahr

Rückgabewert

Logisch / Boolean - Ist Schaltjahr

Beispiel

IsLeapYear(2008)   // Ergebnis: .T.

IsLeapYear(2009)   // Ergebnis: .F.


KW()

KW() – Kalenderwoche

Beschreibung

Die Funktion berechnet die Kalenderwoche aus einem Datum.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Alphanumerisch - Kalendewoche im Format 'KW.JJ'

Beispiel

KW(CToD('28.02.2009'))   // Ergebnis: 09.09

Siehe auch:

FrKW()


LongDayNames()

LongDayNames() – Wochentagnamen

Beschreibung

Die Funktion gibt den Namen des Wochentags abhängig von dem numerischen Wert dieses Tages zurück.

Parameter

aDayIndex:N

Index des Wochentags

Rückgabewert

Alphanumerisch - Wochentagsnamen

Sonntag (1)

Montag (2)

Dienstag (3)

Mittwoch (4)

Donnerstag (5)

Freitag (6)

Samstag (7)

Beispiel

LongDayNames(DoW(CToD('28.02.2009')))   // Ergebnis: 'Samstag'

Siehe auch:

ShortDayNames()


Month()

Month() – Monat aus Datum

Beschreibung

Die Funktion gibt den numerischen Wert des im Datum enthaltenen Monats zurück.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Numerisch - Monat

Beispiel

Month(CToD('28.02.2009'))   // Ergebnis: '2'

Siehe auch:

CMonth()

CToD()

Day()

DoW()

Year()


Now()

Now() – aktuelles Datum und Zeit

Beschreibung

Die Funktion gibt das aktuelle Systemdatum und die aktuelle Systemzeit zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Datum - aktuelle Zeit

Beispiel

Now()   // Ergebnis: 28.02.2009 10:20:09

        // Hinweis:  Als Rückgabewert wird natürlich das aktuelle Tagesdatum

        //           und die aktuelle Uhrzeit ausgegeben.


Quarter()

Quarter() – Quartal aus Datum

Beschreibung

Die Funktion liefert das Quartal des angegebenen Datums.

Parameter

aDate:D

Datum vom Typ Date

Rückgabewert

Numerisch - Quartal

Beispiel

Quarter(CToD('28.02.2009'))   // Ergebnis: '1'


RoundMinToHour()

RoundMinToHour() – Minuten in Stunden

Beschreibung

Die Funktion rundet anhand von nDiv:N die Anzahl der Minuten in Stunden um.

Parameter

nMinutes:N | Minutenanzahl
nDiv:N | Rundungsparameter: Fließkommazahl zwischen -1 und 1

Rückgabewert

Numerisch - Stundenanzahl

Beispiel

RoundMinToHour(110, 1)   // Ergebnis: '2'


ShortDayNames()

ShortDayNames() – Wochentagsnamen

Beschreibung

Die Funktion gibt den Kurznamen des Wochentags abhängig von dem numerischen Wert dieses Tages zurück.

Parameter

aDayIndex:N

Index des Wochentags

Rückgabewert

Alphanumerisch - Wochentagsnamen

So (1)

Mo (2)

Di (3)

Mi (4)

Do (5)

Fr (6)

Sa (7)

Beispiel

ShortDayNames(DoW(CToD('28.02.2009')))   // Ergebnis: 'Sa'

Siehe auch:

LongDayNames()


SToD()

SToD() – String zu Datum

Beschreibung

Die Funktion wandelt eine alphanumerische Datumsangabe in ein Datum um.

Parameter

aDateStr:C

Datumsangabe im Format 'JJJJMMDD'

Rückgabewert

Datum - Datumswert

Beispiel

SToD('20090228')   // Ergebnis: 28.02.2009

Siehe auch:

CToD()

DToC()

DToS()


TermIndexToStr()

TermIndexToStr() – TerminIndex zu String

Beschreibung

Die Funktion wandelt einen TerminIndex in eine alphanumerische Datumsangabe um.

Parameter

cTermIndex:C

TerminIndex

Format: 'JJJJMMDD'

+ 'W' (W für Ausgabe in KW-Format) + 'T' (T für Ausgabe in Tages-Format)

Rückgabewert

Alphanumerisch - Datumsstring

Beispiel

TermIndexToStr('20090228W')   // Ergebnis: 'KW.09.09'

TermIndexToStr('20090228T')   // Ergebnis: '28.02.09'


Time()

Time() – Systemzeit als String

Beschreibung

Die Funktion gibt die aktuelle Systemzeit als String zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Alphanumerisch - Systemzeit

Beispiel

Time()   // Ergebnis: '10:39:30'

         // Hinweis:  Als Rückgabewert wird natürlich

         //           die aktuelle Systemzeit ausgegeben.

Siehe auch:

Date()

TimeEx()


TimeEx()

TimeEx() – Systemzeit als Datums-/Zeitwert

Beschreibung

Die Funktion gibt die aktuelle Systemzeit als Datums-/Zeitwert zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Datum - Zeitwert

Beispiel

TimeEx()   // Ergebnis: 10:39:30

           // Hinweis:  Als Rückgabewert wird natürlich

           //           die aktuelle Systemzeit ausgegeben.

Siehe auch:

Date()

Time()


TimeValid()

TimeValid() – Zeitprüfung

Beschreibung

Die Funktion prüft, ob der angegebene Wert eine gültige Zeitangabe ist. Gültiges Format ist 'HH:MM:SS'

Parameter

cZeit:C

Zeitangabe

Rückgabewert

Logisch / Boolean - Zeit ist gültig

Beispiel

TimeValid('22:30:05')   // Ergebnis: .T.

TimeValid('23:30:05')   // Ergebnis: .T.

TimeValid('24:30:05')   // Ergebnis: .F.


TimeZoneBias()

TimeZoneBias() – Zeitverschiebung zur UTC-Zeit in Minuten

Beschreibung

Funktion gibt die Zeitverschiebung in Minuten von der übergebenen Zeitzone zur

Koordinierte Weltzeit (UTC-Zeit) an.

Hinweis

TimeZoneIndex ist systemspezifisch! (Eintrag-Reihenfolge kann abweichen)

Parameter

dDateTime:D | Zeit für welche die Zeitverschiebung berechnet werden soll; Ist nicht relevant wenn lIgnoreDaylightSavingTime = True
nTimeZoneIndex:N | Index der Zeitzone (Default = -1, entspricht der aktuellen System-Zeitzone)
lIgnoreDaylightSavingTime:L | Sommerzeit berücksichtigen (Default = False)

Rückgabewert

Numerisch

Beispiel

TimeZoneBias( CToD('01.08.2011'), -1, False )  // -120 für Deutschland

TimeZoneBias( CToD('01.08.2011'), -1, True )   // -60 für Deutschland

Siehe auch:

ConvertTimeToUTC()

ConvertUTCToTime()


Today()

Today() – Systemdatum

Beschreibung

Die Funktion gibt das Systemdatum als Datum zurück. Entspricht der Funktion Date().

Parameter

keine Parameter erwartet

Rückgabewert

Datum- Systemdatum

Beispiel

Today()   // Ergebnis: 27.02.2009

          // Hinweis:  Als Rückgabewert wird natürlich

          //           das aktuelle Tagesdatum ausgegeben.

Siehe auch:

CMonth()

CToD()

Date()

Day()

Month()

Year()


TrmChk()

TrmChk() – Termin Check

Beschreibung

Die Funktion prüft, ob uTermin:U zwischen uTerminVon:U und uTerminBis:U liegt.

Parameter

uTermin:U | Zu prüfender Termin
uTerminVon:U | Datum Untergrenze
uTerminBis:U | Datum Obergrenze
lMeld:L | Meldung ausgeben, wenn Prüfung negativ ausfällt; default = false

Rückgabewert

Logisch / Boolean - Termin liegt im Zeitraum

Beispiel

| i, aResult |

for i := 0 to 1 do

   case i

      of 0 :: aResult := TrmChk('03.02.2009', '05.02.2009', '07.02.2009'),

      of 1 :: aResult := TrmChk(Date(), Date()-1, Date()+1),

   endcase,

   if aResult = true then

      Meld('Termin '+ Str(i) + ' liegt im gesuchten Zeitraum.'),

   else

      Meld('Termin '+ Str(i) + ' liegt nicht im gesuchten Zeitraum.'),

   endif,

next,

// Ergebnis: 'Termin 0 liegt nicht im gesuchten Zeitraum.'

//           'Termin 1 liegt im gesuchten Zeitraum.'


WToD()

WToD() – Woche zu Datum

Beschreibung

Die Funktion gibt den Freitag der angegebenen Kalenderwoche zurück (bei KW-Übergabe als String) oder das Tagesdatum (bei Datums-Übergabe als String).

Parameter

aWeek:C

Woche im Format <KW.WW.JJ> oder Datumsstring im Format <TT.MM.JJ>

Rückgabewert

Datum - Freitag der Woche oder Tagesdatum

Beispiel

WToD('KW.09.09')   // Ergebnis: 27.02.2009


Year()

Year() – Jahr aus Datum

Beschreibung

Die Funktion gibt den numerischen Wert des im Datum enthaltenen Jahres an.

Parameter

aDate:D

Beliebiges Datum

Rückgabewert

Numerisch - Jahreszahl

Beispiel

Year(CToD('28.02.2009'))   // Ergebnis: '2009'

Siehe auch:

CMonth()

CToD()

Day()

Month()


AttachmentAdd()

AttachmentAdd() – Anhang einem Email-Objekt hinzufügen

Beschreibung

Die Funktion fügt einen Anhang an ein Email-Objekt an.

Parameter

oBatchMail:O | TBatchMail-Objekt
cFileName:C | Dateiname
lAddToDocument:O | True - Die Datei wird auch dem Beleg hinzugefügt; default = False

Rückgabewert

-1 falls die Datei nicht hinzugefügt werden konnte ansonsten die Index-ID des hinzugefügten Anhangs

Beispiel

// Event vor Email-Versand

| nEvtNo:P1, aInfo:P2, aText:P3, aNote:P4, oBatchMail:P5 |

AttachmentAdd(oBatchMail, 'c:\temp\anhang1.txt'),

AttachmentAdd(oBatchMail, 'c:\temp\anhang2.jpg', true),


AttachmentDelete()

AttachmentDelete() – Entfernt einen Anhang aus einem Email-Objekt

Beschreibung

Die Funktion entfernt einen Anhang eines Email-Objekts.

Hinweis

Nachdem ein Anhang entfernt wurde, rücken automatisch alle folgenden Anhänge eine Position nach vorne, d.h. die Attachment-ID wird um 1 reduziert.

Parameter

oBatchMail:O | TBatchMail-Objekt
nAttachmentID:N | Attachment-ID

Rückgabewert

True falls der Anhang gelöscht wurde, ansonsten False

Beispiel

// Event vor Email-Versand

| nEvtNo:P1, aInfo:P2, aText:P3, aNote:P4, oBatchMail:P5 |

// Alle Anhänge entfernen

for i := 1 to ALen(oBatchMail.AttachmentList) do

   AttachmentDelete(oBatchMail, 1)

next,


CallStdWebService()

CallStdWebService() – Webservice ausführen

Beschreibung

Mit dieser Funktionen kann ein Webservice ausgeführt werden.

Hinweis

Einschränkung:

Die Webservice Funktionen muss "ExecuteServiceStr" heißen und über die Eingabeparameter cId:C und cParam:C verfügen.

Das Ergebnis wird unter executeServiceStrReturn:C erwartet.

Die Verwendung im BEAS ist nur mit Startparameter CALL_STD_WEB_SERVICE_RO möglich.

Durch Setzen des Startparameters CALL_STD_WEB_SERVICE_RO wird eine stabilere Neuimplementierung der Funktion verwendet.

Parameter

cServiceURL:C | Adresse des Webservices (steht im WSDL-Dokument des Webservices)
cNamespace:C | Namespace des Webservices (steht im WSDL-Dokument des Webservices); (wenn nicht angegeben kann u.U. der Webservice nicht ausgeführt werden)
cServiceID:C | Individuelle Service-ID
cParam:C | Sonstiger Parameter
lBeWebService:L | Verwende abweichende Signatur des be-Webservice (id, param, Result); Muss der Wert True haben, wenn der Standard be-Webservice aufgerufen wird. Default: False; Hinweis: Wirkt sich nur aus, wenn der Startparameter CALL_STD_WEB_SERVICE_RO gesetzt ist.

Rückgabewert

Alphanumerisch - Ergebnis des aufgerufenen Webservices

Beispiel

//****************************************************************

// 1. CB-Programm mit Event "bei WebService-Anforderung" erstellen

| nEvtNo:P1, cServiceID:P2, uParam:P3, uRes |

if cServiceID = '1' then

   uRes := 'Ihre Eingabe lautet: ' + uParam,

else

   uRes := 'Service-ID <' + cServiceID + '> ist nicht definiert!',

endif,

uRes

//****************************************************************

// 2. BE als "Webservice Server" starten (mit Parameter /webservice)

//****************************************************************

// 3. "eigenen" Webservice aufrufen

CallStdWebService('http://localhost:2446/soap/', 'urn:Dontenwill.de/IBeCBService', '1', 'Hallo BE!', True)

//****************************************************************

// Beispiel für den Aufruf eines externen Web-Service

//****************************************************************

CallStdWebService('http://192.168.10.11:8080/ProductionSrv/services/LabelService', '', 'LABEL_INIT', '')

Siehe auch:

Event "bei WebService-Anforderung"


DBWaitLocked()

DBWaitLocked() – Datensatzsperre

Beschreibung

Die Funktion dient dem Sperren von Datensätzen mit TimeOut. Der User muss über die entsprechenden Rechte auf der Tabelle verfügen.

Parameter

oTable:O | Tabellenobjekt; default = nil
nTimeOutSec:N | Timeout in Sekunden; default = 0 (wartet unbeschränkt)
cLockText:C | Infotext, der angezeigt werden soll; default = Leerstring
lAbortLocked:L | Zeitüberschreitung erzeugt ein Abort(); default = true
lAdsLockOnly:L | Lock über Funktion AdsLockRecord(); default = false

Rückgabewert

Logisch / Boolean - Sperren erfolgreich

Beispiel

| oDab010_A:DB := 'waDAB010, DAB011', oDab010_B:DB := 'waDAB010, DAB011' |

if DBEdit(oDab010_A) then

   if not DBWaitLocked(oDab010_B, 20, 'Mein Text', false) then

      Meld('Satz konnte nicht gesperrt werden ...'),

   endif,

endif,


DosDevice()

DosDevice() – Dos Device Information

Beschreibung

Die Funktion ermittelt den Namen eines Dos Devices.

Parameter

aDeviceName:C | Device-Name
aBufSize:N | Maximale Länge des Rückgabewertes; default = 1024

Rückgabewert

Alphanumerisch - Dos Device

Beispiel

DosDevice('C:', 2048)


FTPDelete()

FTPDelete() – Datei über FTP Löschen

Beschreibung

Die Funktion löscht eine oder mehrere Dateien auf einem FTP-Server. Die Funktion arbeitet Case Sensitive (trifft auch auf die Endungen der Dateien zu).

Parameter

aCaption:C | Titel
aRemoteHost:C | IP oder Domain des Hosts
aRemotePort:N | Port des Hosts
aUserName:C | User-Name
aPassword:C | Password
aPassiveMode:L | Passiver Übertragungsmodus
aFileList:U | Liste der Dateien
aHostPath:C | RemotePath; default = Leerstring
aLogFileName:C | Logfile schreiben; default = Leerstring
aIncludeHostDir:L lShowMsg:L | Directorylist in TraceFile; default = false; Exceptions statt Messages; default = false

Rückgabewert

Numerisch

- 0 für korrekte Ausführung, ansonsten Fehler-Code

- 1 für Verbindungsfehler

- 2 für Fehler beim Verzeichniswechsel

- 3 u.a Datei nicht gefunden

- 5 für Vorgang abgebrochen

Achtung: FTP-Fehler können auch eine Exception auslösen!

Beispiel

| aResult, i, j, aHostFiles, aHostPath, aSourcePath,

  aDestPath, aDestFile, aFileExt, aLogFile, aGetFiles, aLogTxt |

function ErrChk(aErrNo)

   if aErrNo <> 0 then

      ShowMessage('Error ' + Str(aErrNo)),

      Abort(),

   endif,

end,

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

   WriteLn('Beispiel: Datei auf dem FTPServer löschen ...'),

   ErrChk(aResult := FTPDelete('Datei umbenennen',               // Überschrift

                               '192.168.10.152',                 // RemoteHost

                               21,                               // RemotePort

                               'beuser',                         // UserName

                               'be32',                           // Password

                               true,                             // PassivMode

                               {'DataUpload-New.pdf'},           // aFileArray

                               aHostPath,                        // HostPath

                               aLogFile)),                       // LogFileName

onerror,

   aResult := -1,

stopseq,

aResult


FTPDir()

FTPDir() – Verzeichnis auf FTP-Server

Beschreibung

Die Funktion liefert in aResultDir das Verzeichnis eines FTP-Servers (s. Beispiel).

Parameter

aCaption:C | Titel
aRemoteHost:C | IP oder Domain des Hosts
aRemotePort:N | Port des Hosts
aUserName:C | User-Name
aPassword:C | Password
aPassiveMode:L | Passiver Übertragungsmodus
aResultDir:R | Ergebnis-Parameter, der nach Ausführen der Funktion das Verzeichnis enthält
aHostPath:C | RemotePath; default = Leerstring
aLogFileName:C | Logfile schreiben; default = Leerstring
lShowMsg:L | Exceptions statt Messages; default = false

Rückgabewert

Numerisch

- 0 für korrekte Ausführung, ansonsten Fehler-Code

- 1 für Verbindungsfehler

- 2 für Fehler beim Verzeichniswechsel

- 3 u.a Datei nicht gefunden

- 5 für Vorgang abgebrochen

Achtung: FTP-Fehler können auch eine Exception auslösen!

Beispiel

| aResult, i, j, aHostFiles, aHostPath, aSourcePath,

  aDestPath, aDestFile, aFileExt, aLogFile, aGetFiles, aLogTxt |

function ErrChk(aErrNo)

   if aErrNo <> 0 then

      ShowMessage('Error ' + Str(aErrNo)),

      Abort(),

   endif,

end,

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',,

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

  WriteLn('Beispiel: Verzeichnis des FTPServers holen ...'),

  ErrChk(aResult := FTPDir('Hole Verzeichnis vom FTP-Server',   // Überschrift

                           '192.168.10.152',                    // RemoteHost

                           21,                                  // RemotePort

                           'beuser',                            // UserName

                           'be32',                              // Password

                           .t.,                                 // PassivMode

                           aHostFiles,                          // ResultDir

                           aHostPath,                           // HostPath

                           aLogFile)),                          // LogFileName

onerror,

   aResult := -1,

stopseq,

if !Empty(aResult) and LoadArray(aLogTxt, aLogFile) then

   WriteLn(aLogTxt),

endif,

aHostFiles


FTPDownload()

FTPDownload() – Downloaden eines Files von einem FTP-Server

Beschreibung

Die Funktion lädt eine oder mehrere Dateien von einem FTP-Server herunter.

Die Funktion arbeitet case sensitive (trifft auch auf die Endungen der Dateien zu), außerdem wird die Datei auch im Fehlerfall lokal erstellt (0 kB).

Parameter

aCaption:C | Titel
aRemoteHost:C | IP oder Domain des Hosts
aRemotePort:N | Port des Hosts
aUserName:C | User-Name
aPassword:C | Password
aPassiveMode:L | Passiver Übertragungsmodus
aFileList:U | Liste der Dateien
aHostPath:C | RemotePath; default = Leerstring
aLogFileName:C | Logfile schreiben; default = Leerstring
aIncludeHostDir:L | Directorylist in TraceFile; default = false
aTransferBinary:L lShowMsg:L | setzt den Transfertyp auf BINARY/ACSII, default = true = BINARY; Exceptions statt Messages; default = false

Rückgabewert

Numerisch

- 0 für korrekte Ausführung, ansonsten Fehler-Code

- 1 für Verbindungsfehler

- 2 für Fehler beim Verzeichniswechsel

- 3 u.a Datei nicht gefunden

- 5 für Vorgang abgebrochen

Achtung: FTP-Fehler können auch eine Exception auslösen!

Beispiel

| aResult, i, j, aHostFiles, aHostPath, aSourcePath,

  aDestPath, aDestFile, aFileExt, aLogFile, aGetFiles, aLogTxt |

function ErrChk(aErrNo)

   if aErrNo <> 0 then

      ShowMessage('Error ' + Str(aErrNo)),

      Abort(),

   endif,

end,

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

  WriteLn(aGetFiles),

  ErrChk(aResult := FTPDownload('Hole Dateien vom FTP-Server',                // Überschrift

                                '192.168.10.152',                             // RemoteHost

                                21,                                           // RemotePort

                                'beuser',                                     // UserName

                                'be32',                                       // Password

                                .t.,                                          // PassivMode

                                {'C:\SICHERUNG\FTP_Test\BigDataDownload.pdf',

                                'C:\SICHERUNG\FTP_Test\DataDownload.pdf',

                                'C:\SICHERUNG\FTP_Test\TextDownload.txt'},    // ResultDir

                                aHostPath,                                    // HostPath

                                aLogFile)),                                   // LogFileName

onerror,

   aResult := -1,

stopseq,

if !Empty(aResult) and LoadArray(aLogTxt, aLogFile) then

   WriteLn(aLogTxt)

endif,

aResult


FTPRename()

FTPRename() – FTP Datei umbenennen

Beschreibung

Die Funktion ermöglicht das Umbenennen von Dateien auf einem FTP-Server.

Parameter

aCaption:C - Titel

aRemoteHost:C - IP oder Domain des Hosts

aRemotePort:N - Port des Hosts

aUserName:C - User-Name

aPassword:C - Password

aPassiveMode:L - Passiver Übertragungsmodus

aFileList:U - Array mit altem und neuem Dateinamen

aHostPath:C - RemotePath; default = Leerstring

aLogFileName:C - Logfile schreiben; default = Leerstring

aIncludeHostDir:L - Directorylist in TraceFile; default = false

lShowMsg:L - Exceptions statt Messages; default = false

Rückgabewert

Numerisch

- 0 für korrekte Ausführung, ansonsten Fehler-Code

- 1 für Verbindungsfehler

- 2 für Fehler beim Verzeichniswechsel

- 3 u.a Datei nicht gefunden

- 5 für Vorgang abgebrochen

Achtung: FTP-Fehler können auch eine Exception auslösen!

Beispiel

| aResult, i, j, aHostFiles, aHostPath, aSourcePath,

  aDestPath, aDestFile, aFileExt, aLogFile, aGetFiles, aLogTxt |

function ErrChk(aErrNo)

   if aErrNo <> 0 then

      ShowMessage('Error ' + Str(aErrNo)),

      Abort(),

   endif,

end,

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

  FTPUpload('Datei übertragen',                        // Überschrift

            '192.168.10.152',                          // RemoteHost

            21,                                        // RemotePort

            'beuser',                                  // UserName

            'be32',                                    // Password

            .t.,                                       // PassivMode

            {'C:\SICHERUNG\FTP_Test\DataUpload.pdf'},  // aFileArray

            aHostPath,                                 // HostPath

            aLogFile),                                 // LogFileName

   WriteLn('Beispiel: Datei auf dem FTPServer umbenennen ...'),

   ErrChk(aResult := FTPRename('Datei umbenennen',                       // Überschrift

                               '192.168.10.152',                         // RemoteHost

                               21,                                       // RemotePort

                               'beuser',                                 // UserName

                               'be32',                                   // Password

                               true,                                     // PassivMode

                               {'DataUpload.pdf', 'DataUpload-New.pdf'}, // aFileArray

                               aHostPath,                                // HostPath

                               aLogFile)),                               // LogFileName

onerror,

   aResult := -1,

stopseq,

aResult


FTPUpload()

FTPUpload() – Hochladen eines Files auf einen FTP-Server

Beschreibung

Die Funktion lädt eine oder mehrere Dateien auf einen FTP-Server.

Parameter

aCaption:C | Titel
aRemoteHost:C | IP oder Domain des Hosts
aRemotePort:N | Port des Hosts
aUserName:C | User-Name
aPassword:C | Password
aPassiveMode:L | Passiver Übertragungsmodus
aFileList:U | Liste der Dateien
aHostPath:C | RemotePath; default = Leerstring
aLogFileName:C | Logfile schreiben; default = Leerstring
aIncludeHostDir:L | Directorylist in TraceFile; default = false
aTransferBinary:L lShowMsg:L | Setzt den Transfertyp auf BINARY/ASCII; default = true = BINARY; Exceptions statt Messages; default = false

Rückgabewert

Numerisch

- 0 für korrekte Ausführung, ansonsten Fehler-Code

- 1 für Verbindungsfehler

- 2 für Fehler beim Verzeichniswechsel

- 3 u.a Datei nicht gefunden

- 5 für Vorgang abgebrochen

Achtung: FTP-Fehler können auch eine Exception auslösen!

Beispiel

| aResult, i, j, aHostFiles, aHostPath, aSourcePath,

  aDestPath, aDestFile, aFileExt, aLogFile, aGetFiles, aLogTxt |

function ErrChk(aErrNo)

   if aErrNo <> 0 then

      ShowMessage('Error ' + Str(aErrNo)),

      Abort(),

   endif,

end,

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

   WriteLn('Beispiel: Datei zum FTPServer kopieren ...'),

   ErrChk(aResult := FTPUpload('Datei übertragen',                         // Überschrift

                               '192.168.10.152',                           // RemoteHost

                               21,                                         // RemotePort

                               'beuser',                                   // UserName

                               'be32',                                     // Password

                               .t.,                                        // PassivMode

                               {'C:\SICHERUNG\FTP_Test\BigDataUpload.pdf',

                                'C:\SICHERUNG\FTP_Test\DataUpload.pdf',

                                'C:\SICHERUNG\FTP_Test\TextUpload.txt'},   // aFileArray

                               aHostPath,                                  // HostPath

                               aLogFile)),                                 // LogFileName

onerror,

   aResult := -1,

stopseq,

aResult


HTTPGet()

HTTPGet() – HTTP-Get-Request

Beschreibung

Führt mit der übergebenden URL einen HTTP-Get-Request aus.

Die Funktion liefert als Ergebnis den Inhalt des Body der HTTP-Response.

Hinweis

Die Funktion verhält sich wie ein Webbrowser: Es wird immer der Inhalt des Body der HTTP-Response zurückgeliefert, auch im Falle eines Fehlers.

Ein Timeout für die Durchführung des HTTP-Request kann mit dem optionalen Parameter 'aReadTimeout' gesetzt werden.

Der Positionsparameter im HTTP-header muss mit einem Follow-up-URL eingestellt werden für aHandleRedirect=True.

Parameter

aURL:C | URL, mit der der HTTP-Get-Request aufgerufen werden soll.
aReadTimeout:N | Timeout in Millisekunden für das Lesen des Ergebnisses; default = 0 (kein Timeout)
aHandleRedirect:L | Leitet zur weiteren URL wenn auf True gesetzt; default = False

Rückgabewert

Alphanumerisch

Beispiel

HTTPGet("http://www.google.com/search?q=example")

oder

HTTPGet("http://www.google.com/search?q=example",0,True) // Ergebnis: Ergebnisseite mit Title '302 Moved'.

HTTPGet("http://www.google.com/search?q=example",0,True) // Ergebnis: Ergebnisseite der Google-Suche nach dem Begriff 'example'.

Siehe auch:

TBeCbHTTP


InitCom()

InitCom() – COM-Port initialisieren

Beschreibung

Die Funktion initialisiert den COM-Port und bereitet ihn auf Lese- bzw. Schreibzugriffe vor. Der COM-Port wird als Objekt zurückgegeben.

Parameter

aComPort:N | Com Port
aBaudrate:N | Übertragungsrate
aParityBit:N | Paritätsbit
aDataBits:N | Anzahl Datenbits
StopBits:N | Anzahl Stopp-Bits

Rückgabewert

Objekt - Serial Port

Beispiel

| oSerialPort |

oSerialPort := InitCom(1, 9600, Parity_None, DataBits_8, StopBits_1),


MailMemo()

MailMemo() – EMail versenden

Beschreibung

Die Funktion versendet ein Memo (Dab065-Datensatz) per eMail.

Parameter

nMemoId:N | ID des Memos
oDab065:O | DAB065; default = Standard Dab065
cSendTo:C | Email-Empfänger (durch ";" getrennt, jeweils "to:", "cc:" oder "bcc:" vorangestellt) default = Leerstring
lUseAttach:L | Anhänge versenden; default = true
lProgress:L | Fortschritt anzeigen; default = true
nMaxPerc:N | Max. Wert des Fortschrittbalkens; default = 100
nStartPerc:N | Startwert des Fortschrittbalkens; default

Rückgabewert

Logisch / Boolean - Senden erfolgreich

Beispiel

| oDab065:DB := 'waDAB065, DAB06B' |

if !MailMemo(6610, oDab065, 'x.y@dontenwill.de', true) then

   Beep()

endif,


MailObject()

MailObject() – Mail Objekt

Beschreibung

Die Funktion liefert ein Mail-Object zurück

Parameter

keine Parameter erwartet

Rückgabewert

Objekt - Mail-Object

Beispiel

MailObject()

Kontakt zum Support | www.dontenwill.de


MailSend()

MailSend() – E-Mail versenden

Beschreibung

Die Funktion dient dem Senden von E-Mail-Nachrichten über den Codeblock.

Hinweis

Die Angabe der Priorität/Dringlichkeit funktioniert nur bei Versand über SMTP.

Parameter

cMessage:C | Text der EMail
cSendTo:C | Empfänger oder Empfängerliste (durch ";"-getrennt, jeweils "to:", "cc:" oder "bcc:" vorangestellt)
cSubject:C | Betreff; default = Leerstring
aAttachments:A | Array mit Dateinamen für Anlagen; default = null()
cFrom:C | anderer Absender; default = Leerstring
lPlainText:L | 'Nur Text' - Übertragung; default = false
lProgress:L | Fortschritt anzeigen; default = true
nMaxPerc:N | Max. Wert des Fortschrittbalkens; default = 100
nStartPerc:N | Startwert des Fortschrittbalkens; default
nPriority:N | Dringlichkeit der E-Mail; default = Normal; (nur bei Versand über SMTP); 1 = Niedrig; 2 = Normal; 3 = Hoch
nUseMailAccountFromUserNo:N | Einstellungen für den Versand von Benutzer verwenden default = -1 entspricht aktuellen Benutzer; Die Versand-Art (SMPT, MAPI, ...) bleibt die des aktuellen Benutzers
cUseMailAccountGUID:C | Einstellungen für den Versand direkt von einem E-Mail Konto verwenden default = leer, kann nur verwendet werden wenn nUseMailAccountFromUserNo = -1; Die Versand-Art (SMPT, MAPI, ...) bleibt die des aktuellen Benutzers
lNoMsg:L | Fehlerdialoge werden nicht angezeigt und stattdessen als Exceptions ausgelöst default = false

Rückgabewert

Logisch / Boolean - Senden erfolgreich

Beispiel

MailSend('Bitte einmal ansehen ...',

         'xxxx.yyy@Dontenwill.de',

         'Apago',

         {'C:\Installationen\Apago PDF2JPEG\PSservices\PSservices.pdf'})

Siehe auch:

MailMemo()

MailObject()


ReadCom()

ReadCom() – Com-Schnittstelle lesen

Beschreibung

Die Funktion liest das an der COM-Schnittstelle angeschlossene Gerät aus.

Parameter

aPortObject:O

Serial-Port Objekt (geliefert durch InitCom())

Rückgabewert

Alphanumerisch - Data

Beispiel

| oSerialPort |

oSerialPort := InitCom(1, 9600, Parity_None, DataBits_8, StopBits_1),

ReadCom(oSerialPort)


SFTPDelete()

SFTPDelete() – Datei über SFTP löschen

Beschreibung

Die Funktion löscht eine oder mehrere Dateien auf einem SFTP-Server. Die Funktion arbeitet case sensitive (trifft auch auf die Endungen der Dateien zu).

Hinweis

Falls die Dateinamen innerhalb der Liste einen absoluten Pfad enthalten, dann wird aHostPath überflüssig sein.

Falls die Dateinamen innerhalb der Liste einen relativen Pfad enthalten, ist der Pfad relativ gegen aHostPath, wenn aHostPath angegeben wurde.

Remote Pfad aHostPath und Remote-Dateinamen innerhalb der Liste müssen als Verzeichnis-Separator Schrägstrich und nicht Backslash verwenden, z.B: user/sub/date/datei.ext

Parameter

aRemoteHost:C IP oder Domain des Hosts

aRemotePort:N Port des Hosts. Typisch 22

aUserName:C User-Name

aPassword:C Password

aFileList:U Liste der Dateien

aHostPath:C RemotePath; default = Leerstring

aLogFileName:C Logfile schreiben; default = Leerstring

Rückgabewert

Keine
Achtung: SFTP-Fehler wird eine Exception auslösen!

Beispiel

| aHostPath, aSourcePath, aDestPath, aLogFile, aGetFiles, aLogTxt |

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

   WriteLn('Beispiel: Datei auf dem SFTPServer löschen ...'),

   SFTPDelete('192.168.10.152',                 // RemoteHost

              22,                               // RemotePort

              'beuser',                         // UserName

              'be32',                           // Password

              {                                 // Liste der Dateien, die zu löschen sind

               'DataUpload-New.pdf',            // Remote-Dateiname im aHostPath

               '../TextDatei-Old.txt'           // Remote-Dateiname im übergeordneten Verzeichnis des aHostPath

              },

              aHostPath,                        // HostPath

              aLogFile),                        // LogFileName

onerror,

   GU_ShowStdErrorMessage('SFTP Error ' + ProgName(), GetErrorObj() ),

stopseq,

Siehe auch:

TbeCbSFTP

SFTPDownload()

SFTPUpload()

SFTPDir()

SFTPRename()


SFTPDir()

SFTPDir() – Verzeichnis auf SFTP-Server

Beschreibung

Die Funktion liefert in aResultDir das Verzeichnis eines SFTP-Servers (s. Beispiel).

Hinweis

Remote Pfad aHostPath muss als Verzeichnis-Separator Schrägstrich und nicht Backslash verwenden, z.B: user/sub/date

Parameter

aRemoteHost:C IP oder Domain des Hosts

aRemotePort:N Port des Hosts. Typisch 22

aUserName:C User-Name

aPassword:C Password

aResultDir:R Ergebnis-Parameter, der nach Ausführen der Funktion das Verzeichnis enthält

aHostPath:C RemotePath; default = Leerstring

aLogFileName:C Logfile schreiben; default = Leerstring

Rückgabewert

Keine

Achtung: FTP-Fehler können auch eine Exception auslösen!

Beispiel

| aHostPath, aSourcePath, aDestPath, aLogFile, aGetFiles, aLogTxt, aHostFiles |

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

  WriteLn('Beispiel: Verzeichnis des SFTP Servers holen ...'),

  SFTPDir('192.168.10.152',                    // RemoteHost

          22,                                  // RemotePort

          'beuser',                            // UserName

          'be32',                              // Password

          aHostFiles,                          // Liste der Dateien, die im aHostPath liegen

          aHostPath,                           // HostPath

          aLogFile),                           // LogFileName

onerror,

  GU_ShowStdErrorMessage('SFTP Error ' + ProgName(), GetErrorObj() ),

endif,

aHostFiles

Siehe auch:

TbeCbSFTP

SFTPDelete()

SFTPDownload()

SFTPUpload()

SFTPRename()


SFTPDownload()

SFTPDownload() – Downloaden eines Files von einem SFTP-Server

Beschreibung

Die Funktion lädt eine oder mehrere Dateien von einem SFTP-Server herunter.

Die Funktion arbeitet case sensitive (trifft auch auf die Endungen der Dateien zu), außerdem wird die Datei auch im Fehlerfall lokal erstellt (0 kB).

Hinweis

Falls die Dateinamen innerhalb der Liste einen absoluten Pfad enthalten, dann wird aHostPath überflüssig sein.

Falls die Dateinamen innerhalb der Liste einen relativen Pfad enthalten, ist der Pfad relativ gegen aHostPath, wenn aHostPath angegeben wurde.

Remote Pfad aHostPath und Remote-Dateinamen innerhalb der Liste müssen als Verzeichnis-Separator Schrägstrich und nicht Backslash verwenden, z.B: user/sub/date/datei.ext

Parameter

aRemoteHost:C IP oder Domain des Hosts

aRemotePort:N Port des Hosts. Typisch 22

aUserName:C User-Name

aPassword:C Password

aFileList:U Liste der lokale Ziel-Dateien

aHostPath:C RemotePath; default = Leerstring

aLogFileName:C Logfile schreiben; default = Leerstring

Rückgabewert

Keine

Achtung: FTP-Fehler können auch eine Exception auslösen!

Beispiel

| aHostPath, aSourcePath, aDestPath, aLogFile, aGetFiles, aLogTxt |

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

  WriteLn('Beispiel: Datei vom SFTP Server downloaden ...'),

  SFTPDownload('192.168.10.152',                                         // RemoteHost

              22,                                                        // RemotePort

              'beuser',                                                  // UserName

              'be32',                                                    // Password

              {                                                          // Liste der localen Target-Dateien, die zu downloaden sind

               aDestPath + 'BigDataDownload.pdf',                        // 'BigDataDownload.pdf' wird auf dem Server im aHostPath gesucht

               {aDestPath + 'DataDownload.pdf','New-DataDownload.pdf'},  // 'New-DataDownload.pdf' wird auf dem Server im aHostPath gesucht

               {aDestPath + 'TextDownload.txt', '../TextDownload.txt'}   // 'TextDownload.txt' wird auf dem Server im übergeordneten Verzeichnis des aHostPath gesucht

              },

              aHostPath,                                                 // HostPath

              aLogFile),                                                 // LogFileName

onerror,

  GU_ShowStdErrorMessage('SFTP Error ' + ProgName(), GetErrorObj() ),

stopseq,

Siehe auch:

TbeCbSFTP

SFTPDelete()

SFTPUpload()

SFTPDir()

SFTPRename()


SFTPRename()

SFTPRename() – SFTP Datei umbenennen

Beschreibung

Die Funktion ermöglicht das Umbenennen von Dateien auf einem SFTP-Server.

Hinweis

Falls die Dateinamen innerhalb der Liste einen absoluten Pfad enthalten, dann wird aHostPath überflüssig sein.

Falls die Dateinamen innerhalb der Liste einen relativen Pfad enthalten, ist der Pfad relativ gegen aHostPath, wenn aHostPath angegeben wurde.

Remote Pfad aHostPath und Remote-Dateinamen innerhalb der Liste müssen als Verzeichnis-Separator Schrägstrich und nicht Backslash verwenden, z.B: user/sub/date/datei.ext

Parameter

aRemoteHost:C IP oder Domain des Hosts

aRemotePort:N Port des Hosts. Typisch 22

aUserName:C User-Name

aPassword:C Password

aResultDir:R Array mit altem und neuem Dateinamen

aHostPath:C RemotePath; default = Leerstring

aLogFileName:C Logfile schreiben; default = Leerstring

Rückgabewert

Keine

Achtung: FTP-Fehler können auch eine Exception auslösen!

Beispiel

| aHostPath, aSourcePath, aDestPath, aLogFile, aGetFiles, aLogTxt, aHostFiles |

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

  WriteLn('Beispiel: Datei auf dem SFTP Server umbenennen ...'),

  SFTPRename('192.168.10.152',                                // RemoteHost

            22,                                               // RemotePort

            'beuser',                                         // UserName

            'be32',                                           // Password

            {                                                 // Liste der Dateien, die zu umbenen sind

             {'DataUpload.pdf', 'DataUpload-New.pdf'},        // Datei DataUpload.pdf wird auf DataUpload-New.pdf umbenannt

             {'DataUpload-Old.pdf', '../DataUpload-Old.pdf'}, // Datei DataUpload.pdf wird zum übergeordneten Vezeichnis des aHostPath umgezogen

             {'DataUpload-2.pdf', 'Old/DataUpload.pdf'}       // Datei DataUpload.pdf wird zu einem Untervezeichnis des aHostPath umgezogen und gleichzeitig umbenannt

            },

            aHostPath,                                        // HostPath

            aLogFile),                                        // LogFileName

onerror,

    GU_ShowStdErrorMessage('SFTP Error ' + ProgName(), GetErrorObj() ),

stopseq,

Siehe auch:

TbeCbSFTP

SFTPDelete()

SFTPDownload()

SFTPUpload()

SFTPDir()


SFTPUpload()

SFTPUpload() – Hochladen eines Files auf einen SFTP-Server

Beschreibung

Die Funktion lädt eine oder mehrere Dateien auf einen SFTP-Server.

Hinweis

Falls die Dateinamen innerhalb der Liste einen absoluten Pfad enthalten, dann wird aHostPath überflüssig sein.

Falls die Dateinamen innerhalb der Liste einen relativen Pfad enthalten, ist der Pfad relativ gegen aHostPath, wenn aHostPath angegeben wurde.

Remote Pfad aHostPath und Remote-Dateinamen innerhalb der Liste müssen als Verzeichnis-Separator Schrägstrich und nicht Backslash verwenden, z.B: user/sub/date/datei.ext

Parameter

aRemoteHost:C IP oder Domain des Hosts

aRemotePort:N Port des Hosts. Typisch 22

aUserName:C User-Name

aPassword:C Password

aFileList:U Liste der lokale Dateien

aHostPath:C RemotePath; default = Leerstring

aLogFileName:C Logfile schreiben; default = Leerstring

Rückgabewert

Keine

Achtung: FTP-Fehler können auch eine Exception auslösen!

Beispiel

| aHostPath, aSourcePath, aDestPath, aLogFile, aGetFiles, aLogTxt |

aLogFile    := 'C:\SICHERUNG\FTP_Test\MyFtpLog.txt',

aDestPath   := 'C:\SICHERUNG\FTP_Test\Download\',

aSourcePath := 'C:\SICHERUNG\FTP_Test\Upload\',

aHostPath   := 'Test',

if File(aLogFile) then

   DeleteFile(aLogFile),

endif,

startseq,

  WriteLn('Beispiel: Datei zum SFTP Server kopieren ...'),

  SFTPUpload('192.168.10.152',                                           // RemoteHost

              22,                                                        // RemotePort

              'beuser',                                                  // UserName

              'be32',                                                    // Password

              {                                                          // Liste der localen Source-Dateien, die zu uploaden sind

               aDestPath + 'BigDataDownload.pdf',                        // 'BigDataDownload.pdf' wird auf dem Server im aHostPath erzeugt

               {aDestPath + 'DataDownload.pdf','New-DataDownload.pdf'},  // 'New-DataDownload.pdf' wird auf dem Server im aHostPath erzeugt

               {aDestPath + 'TextDownload.txt', '../TextDownload.txt'}   // 'TextDownload.txt' wird auf dem Server im übergeordneten Verzeichnis des aHostPath erzeugt

              },

              aHostPath,                                                 // HostPath

              aLogFile),                                                 // LogFileName

onerror,

  GU_ShowStdErrorMessage('SFTP Error ' + ProgName(), GetErrorObj() ),

stopseq,

Siehe auch:

TbeCbSFTP

SFTPDelete()

SFTPUpload()

SFTPDir()

SFTPRename()


WriteCom()

WriteCom() – Auf COM-Schnittstelle schreiben

Beschreibung

Die Funktion schreibt aText auf das an der COM-Schnittstelle angeschlossene Gerät.

Parameter

aPortObject:O | Serial-Port Objekt ( geliefert durch InitCom() )
aText:C | Text

Rückgabewert

Numerisch - Bytes des übertragenen Textes

Beispiel

| oSerialPort |

oSerialPort := InitCom(1, 9600, Parity_None, DataBits_8, StopBits_1),

WriteCom(oSerialPort, 'Test Text')


Logische Funktionen

Siehe auch:

_AND()

_NOT()

_OR()

_XOR()

SetBit()

TestBit()


_AND()

_AND() – Logische AND-Verknüpfung

Beschreibung

Die Funktion verknüpft zwei Integer bitweise mit einer AND-Verknüpfung.

Parameter

aIntValue1:N | Integer 1
aIntValue2:N | Integer 2

Rückgabewert

Numerisch - Ergebnis

Beispiel

_AND(15, 8)

Siehe auch:

_NOT()

_OR()

_XOR()


_NOT()

_NOT() – Logische NOT-Verknüpfung

Beschreibung

Die Funktion führt eine bitweise NOT-Verknüpfung auf einen Integerwert aus.

Parameter

aIntValue1:N

Integer1

Rückgabewert

Numerisch - Ergebnis

Beispiel

_NOT(12)

Siehe auch:

_AND()

_OR()

_XOR()


_OR()

_OR() – Logische OR-Verknüpfung

Beschreibung

Die Funktion verknüpft zwei Integer bitweise mit einer OR-Verknüpfung.

Parameter

aIntValue1:N | Integer1
aIntValue2:N | Integer2

Rückgabewert

Numerisch - Ergebnis

Beispiel

_OR(12, 4)

Siehe auch:

_AND()

_NOT()

_XOR()


_XOR()

_XOR() – Logische XOR-Verknüpfung

Beschreibung

Die Funktion verknüpft zwei Integer bitweise mit einer XOR-Verknüpfung.

Parameter

aIntValue1:N | Integer1
aIntValue2:N | Integer2

Rückgabewert

Numerisch - Ergebnis

Beispiel

_XOR(12, 4)

Siehe auch:

_AND()

_NOT()

_OR()


SetBit()

SetBit() – Bit setzen

Beschreibung

Die Funktion setzt das Bit aBit einer Zahl auf true. (aBit = 0 ist das erste Bit)

Parameter

aIntValue:N | Integer
aBit:N | Bit
DoSetBit:L | Bit setzen; default = true true - Bit setzen false - Bit löschen

Rückgabewert

Numerisch - Neue Zahl

Beispiel

SetBit(12, 1)


TestBit()

TestBit() – Bit testen

Beschreibung

Die Funktion testet, ob das aBit einer Zahl besetzt ist. Bei der Zahl 16 wäre das 3. Bit (aBit = 2) z.B. nicht besetzt, während das 5. Bit (aBit = 4) besetzt ist. (aBit = 0 ist das erste Bit)

Parameter

aIntValue:N | Integer
aBit:N | Bit

Rückgabewert

Numerisch - Bit besetzt

Beispiel

if TestBit(12, 3) then

   Meld('Das 4. Bit ist in der Zahl 12 gesetzt'),

endif,


Abs()

Abs() – Absolutwert

Beschreibung

Die Funktion ermittelt den absoluten Wert einer Zahl.

Parameter

aValue:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch

Beispiel

Abs(-12.5)   // Ergebnis: '12,5'


ArcCos()

ArcCos() – Arkuscosinus

Beschreibung

Der Arkuscosinus ist die Umkehrfunktion der Cosinusfunktion.

Hinweis

Trigonometrische Funktionen

Parameter

nCosValue:N

Cosinus

Rückgabewert

Numerisch, Winkel im Bogenmaß

Beispiel

| nLatM, nLongM, nLatT, nLongT, cFormat |

function Distance(aLatitudeA, aLongitudeA, aLatitudeB, aLongitudeB)

  aLatitudeA := DegToRad(aLatitudeA),                       // -> Bogenmaß

  aLongitudeA:= DegToRad(aLongitudeA),

  aLatitudeB := DegToRad(aLatitudeB),

  aLongitudeB:= DegToRad(aLongitudeB),

  Result     := (Sin(aLatitudeA) * Sin(aLatitudeB)) +       // Seitencosinussatz

                (Cos(aLatitudeA) * Cos(aLatitudeB) *

                 Cos(aLongitudeB - aLongitudeA)),

  Result:= ArcCos(Result) * 6370,                           // Erdradius 6370 km

end,

// Koordinaten München:

nLatM := 48.139126,                                         // Breitengrad

nLongM:= 11.580186,                                         // Längengrad

// Koordinaten Tokio:

nLatT := 35.689488,                                         // Breitengrad

nLongT:= 139.691706,                                        // Längengrad

cFormat:= '"Entfernung München - Tokio:" #,##0.000 "km"',

// Berechnung der Entfernung von 2 Punkten auf der Erdoberfläche

WriteLn(FormatFloat(cFormat, Distance(nLatM, nLongM, nLatT, nLongT)))


ArcSin()

ArcSin() – Kurzbeschreibung

Beschreibung

Der Arkussinus ist die Umkehrfunktion der Sinusfunktion.

Hinweis

Trigonometrische Funktionen

Parameter

nSinValue:N

Sinus

Rückgabewert

Numerisch, Winkel im Bogenmaß

Beispiel

| nGrad, nSinValue |

nGrad    := 45,

nSinValue:= Sin(DegToRad(nGrad)),

WriteLn(nSinValue),

nGrad:= RadToDeg(ArcSin(nSinValue)),

WriteLn(nGrad)


ArcTan()

ArcTan() – ArcusTangens

Beschreibung

Die Funktion berechnet den Arcustangens einer bestimmten Zahl.

Parameter

aRadValue:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Arcustangens

Beispiel

ArcTan(Pi())   // Ergebnis: '1,26262725567891'

Siehe auch:

Cos()

Sin()

Tan()


Cos()

Cos() – Cosinus

Beschreibung

Die Funktion berechnet den Cosinus eines Winkels.

Parameter

aRadValue:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Cosinus (im Bogenmaß)

Beispiel

Cos(Pi())   // Ergebnis: '-1'

Siehe auch:

ArcTan()

Sin()

Tan()


DegToRad()

DegToRad() – Umwandlung Gradmaß Bogenmaß

Beschreibung

Die Funktion konvertiert einen in Grad angegebenen Winkel in das Bogenmaß.

Parameter

aDegrees:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Bogenmaß

Beispiel

DegToRad(360)   // Ergebnis: '6,28318530717959'

Siehe auch:

RadToDeg()


Exp()

Exp() – e hoch Wert

Beschreibung

Die Funktion berechnet e^aValue (e = 2,71828182845905).

Parameter

aValue:N

Exponent

Rückgabewert

Numerisch - Ergebnis

Beispiel

Exp(3)   // Ergebnis: '20,0855369231877'


Frac()

Frac() – Nachkommaanteil

Beschreibung

Die Funktion gibt den Nachkommaanteil eines numerischen Werts zurück.

Parameter

aValue:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Nachkommaanteil

Beispiel

Frac(12.346)   // Ergebnis: '0,346'

Siehe auch:

Int()


GetNK()

GetNK() – Anzahl der Nachkommastellen

Beschreibung

Die Funktion gibt die Anzahl der Nachkommastellen des übergebenen Werts zurück.

Parameter

nNumber:N

Numerisch

Rückgabewert

Numerisch - Anzahl der Nachkommastellen

Beispiel

GetNK(12.345)   // Ergebnis: '3'


Hex()

Hex() – Zahlensystemumrechnung

Beschreibung

Die Funktion gibt für vorgegebene Werte den Wert in anderen Zahlensystemen zurück.

Parameter

nNumber:N | Umzurechnende Zahl
nDecSystem:N | Zahlensystem in das umgerechnet werden soll; default = 16 (Hexadezimal)
nMinLen:N | Anzahl der Stellen

Rückgabewert

Alphanumerisch - Ergebnis

Beispiel

Hex(10)   // Ergebnis: 'A'

Siehe auch:

UnHex()


Int()

Int() – Vorkommaanteil

Beschreibung

Die Funktion gibt den Vorkommaanteil eines numerischen Werts zurück.

Parameter

aValue:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Vorkommaanteil

Beispiel

Int(-12.5)   // Ergebnis: '-12'

Siehe auch:

Frac()


IntPower()

IntPower() – Potenz aus Basis

Beschreibung

Die Funktion errechnet die Potenz aus einer Basis.

Parameter

aBase:N | Basis
aExponent:N | Exponent

Rückgabewert

Numerisch - Potenz aus Basis

Beispiel

IntPower(2, 10)   // Ergebnis: '1024'


LN()

LN() – Natürlicher Logarithmus

Beschreibung

Die Funktion gibt den natürlichen Logarithmus eines numerischen Werts zurück.

Parameter

aValue:N

Potenz

Rückgabewert

Numerisch - natürlicher Logarithmus

Beispiel

LN(Exp(1))   // Ergebnis: '1'

Siehe auch:

Log10()

Log2()

LogN()


Log10()

Log10() – Logarithmus zur Basis 10

Beschreibung

Die Funktion berechnet den dekadischen Logarithmus zur Basis 10.

Parameter

aValue:N

Potenz

Rückgabewert

Numerisch - Logarithmus zur Basis 10

Beispiel

Log10(100)   // Ergebnis: '2'

Siehe auch:

LN()

Log2()

LogN()


Log2()

Log10() – Logarithmus zur Basis 2

Beschreibung

Die Funktion berechnet den Logarithmus zur Basis 2.

Parameter

aValue:N

Potenz

Rückgabewert

Numerisch - Logarithmus zur Basis 2

Beispiel

Log2(1024)   // Ergebnis: '10'

Siehe auch:

LN()

Log10()

LogN()


LogN()

LogN() – Logarithmus

Beschreibung

Die Funktion berechnet den Logarithmus zur Basis aValue1.

Parameter

aValue1:N | Basis
aValue2:N | Potenz

Rückgabewert

Numerisch

Beispiel

LogN(10, 100)   // Ergebnis: '2'

Siehe auch:

LN()

Log10()

Log2()


Max()

Max() – Maximum

Beschreibung

Die Funktion gibt den größeren von zwei beliebigen Werten zurück.

Parameter

aNumberOrText1:U | Beliebiger Wert
aNumberOrText2:U | Beliebiger Wert

Rückgabewert

Numerisch - Maximum

Beispiel

Max(20, 6)                 // Ergebnis: '20'

Max('Müller', 'Schmidt')   // Ergebnis: 'Schmidt'

Siehe auch:

Abs()

Int()

Min()

Round()

Upround()


Min()

Min() – Minimum

Beschreibung

Die Funktion gibt den kleineren von zwei beliebigen Werten zurück.

Parameter

aNumberOrText1:U | Beliebiger Wert
aNumberOrText2:U | Beliebiger Wert

Rückgabewert

Numerisch

Beispiel

Min(20, 6)                 // Ergebnis: '6'

Min('Stefan', 'Michael')   // Ergebnis: 'Michael'

Siehe auch:

Abs()

Int()

Max()

Round()

Upround()


Mod()

Mod() – Modulo

Beschreibung

Die Funktion gibt den ganzzahligen Rest einer ganzzahligen Division von zwei numerischen Werten zurück.

Parameter

aIntValue1:N | Dividend
aIntValue2:N | Divisor

Rückgabewert

Numerisch - ganzzahliger Rest

Beispiel

Mod(17, 5)   // Ergebnis: '2'


Odd()

Odd() – Prüfung auf ungerade Zahl

Beschreibung

Die Funktion gibt true zurück, wenn aIntValue eine ungerade Zahl ist.

Parameter

aIntValue:N

Beliebiger numerischer Wert

Rückgabewert

Logisch / Boolean - Nummer ist ungerade

Beispiel

Odd(15)   // Ergebnis: '.T.'


PasRound()

PasRound() – Runden2

Beschreibung

Die Funktion rundet aValue:N auf aDecimals:N Stellen nach dem Komma.

Parameter

aValue:N | Wert
aDecimals:N | Dezimalstellen

Rückgabewert

Numerisch - Gerundete Zahl

Beispiel

PasRound(5.354829, 3)   // Ergebnis: '5,355'

Siehe auch:

Round()

RoundInt()


Pi()

Pi() – Kreiszahl Pi

Beschreibung

Die Funktion gibt den Wert der Kreiszahl Pi zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Numerisch - Pi

Beispiel

Pi()   // Ergebnis: '3,14159265358979'


Power()

Power() – Potenz errechnen

Beschreibung

Die Funktion berechnet aus einer Basis und einem Exponenten die Potenz.

Parameter

aBase:N | Basis
aExponent:N | Exponent

Rückgabewert

Numerisch - Potenz

Beispiel

Power(2, 8)   // Ergebnis: '256'


PruefSum()

PruefSum() – Prüfsumme

Beschreibung

Die Funktion bildet aus cText eine Prüfsumme.

Parameter

cText:C

Text

Rückgabewert

Numerisch - Prüfsumme

Beispiel

PruefSum('Hello World')   // Ergebnis: '1101'


RadToDeg()

RadToDeg() – Umwandlung Bogenmaß Gradmaß

Beschreibung

Die Funktion konvertiert einen im Bogenmaß angegebenen Winkel in das Gradmaß.

Parameter

aRadians:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Gradmaß

Beispiel

RadToDeg(Pi())   // Ergebnis: '180'

Siehe auch:

DegToRad()


RandomRange()

RandomRange() – Zufallszahl erzeugen

Beschreibung

Erzeugt eine ganzzahlige Zufallszahl aus einem übergebenen Zahlenbereich.

Hinweis

Arbeitet auch mit negativen Zahlen.

Parameter

aFrom:N | Wertebereich Anfang
aTo:N | Wertebereich Ende, nicht in der Ergebnismenge enthalten

Rückgabewert

Numerisch

Beispiel

WriteLn( RandomRange( 100, 120 ) ),


Round()

Round() – Runden

Beschreibung

Die Funktion rundet einen numerischen Wert auf n-Stellen.

Parameter

aValue:N | Beliebiger numerischer Wert
aDecimals:N | Anzahl der Nachkommastellen

Rückgabewert

Numerisch - Gerundete Zahl

Beispiel

Round(12.54852, 2)   // Ergebnis: '12,55'

Siehe auch:

PasRound()

RoundInt()


RoundDiv()

RoundDiv() – Runden

Beschreibung

Die Funktion rundet eine Zahl im übergebenen Modus. Die Funktion rundet nicht auf die nächste glatte Zahl, sondern auf das nächste Vielfache von 1/nDiv.

Parameter

nValue:N | Wert
nDigit:N | Nachkommastellen
nDiv:N | 1 / nDiv ist der Bruch, auf den hingerundet wird
nMode:N | Modus; default = 0; < 0 - Abrunden; > 0 - Aufrunden; 0 - Kaufmännisches Runden

Rückgabewert

Numerisch - Gerundete Zahl

Beispiel

RoundDiv(0.345, 4, 3)   // Ergebnis: '0,3333'


RoundInt()

RoundInt() – Abrunden

Beschreibung

Die Funktion rundet einen numerischen Wert auf n-Stellen ab.

Parameter

aValue:N | Beliebiger numerischer Wert
aDecimals:N | Anzahl der Nachkommastellen

Rückgabewert

Numerisch - Abgerundete Zahl

Beispiel

RoundInt(2.37589, 4)   // Ergebnis: '2,3758'

Siehe auch:

PasRound()

Round()


Sin()

Sin() – Sinus

Beschreibung

Die Funktion berechnet den Sinus eines Winkels im Bogenmaß.

Parameter

aRadValue:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Sinus (im Bogenmaß)

Beispiel

Sin(DegToRad(90))   // Ergebnis: '1'

Siehe auch:

ArcTan()

Cos()

Tan()


Sqr()

Sqr() – Quadrat

Beschreibung

Die Funktion gibt das Quadrat eines numerischen Wertes zurück.

Parameter

aValue:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Wert im Quadrat

Beispiel

Sqr(25)   // Ergebnis: '625'

Siehe auch:

Sqrt()


Sqrt()

Sqrt() – Quadratwurzel

Beschreibung

Die Funktion gibt die Quadratwurzel eines numerischen Werts zurück.

Parameter

aValue:N

Beliebiger positiver numerischer Wert

Rückgabewert

Numerisch - Quadratwurzel

Beispiel

Sqrt(625)   // Ergebnis: '25'

Siehe auch:

Sqr()


Tan()

Tan() – Tangens

Beschreibung

Die Funktion berechnet den Tangens eines Winkels im Bogenmaß.

Parameter

aRadValue:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Tangens (im Bogenmaß)

Beispiel

Tan(DegToRad(100))   // Ergebnis: '-5,67128181961771'

Siehe auch:

ArcTan()

Cos()

Sin()


Trunc()

Trunc() – Vorkommaanteil

Beschreibung

Die Funktion gibt einen numerischern Wert ohne Nachkommastellen aus.

Parameter

aValue:N

Beliebiger numerischer Wert

Rückgabewert

Numerisch - Vorkommaanteil

Beispiel

Trunc(123.456)   // Ergebnis: '123'


UnHex()

UnHex() – Umwandlung eines Zahlensystems

Beschreibung

Die Funktion wandelt den vorgegebenen Wert eines Zahlensystemes zurück in das Dezimalsystem um.

Parameter

cValue:C | Umzurechnende Zahl
nDecSystem:N | Zahlensystem; default = 16 (Hexadezimal)

Rückgabewert

Numerisch - Wert im Dezimalsystem

Beispiel

| a, b |

a := Hex(987654321, 32, 6),   // codiertert den Wert 6-stellig in das 32er-System

                              // (Buchstaben 0 bis V)

WriteLn(a),

b := UnHex(a, 32),            // decodiert den Wert aus dem 32er-System

WriteLn(b)

// Ergebnis: TDSQ5H

//           987654321

Siehe auch:

Hex()


Upround()

Upround() – Aufrunden

Beschreibung

Die Funktion rundet einen numerischen Wert auf n Stellen auf. Im Gegensatz zu Round(), das kaufmännisch rundet, wird bei Upround() immer aufgerundet.

Parameter

aValue:N | Beliebiger numerischer Wert
aDecimals:N | Anzahl der Nachkommastellen

Rückgabewert

Numerisch - Aufgerundete Zahl

Beispiel

Upround(12.54452, 2)   // Ergebnis: '12,55'

Siehe auch:

Abs()

Int()

Round()


ActionExecute()

ActionExecute() – Aufruf eines Aktionsobjektes

Beschreibung

Die Funktion führt ein Action-Objekt aus; d.h., mit dieser Funktion kann jede beliebige business express - Oberflächen-Funktion (jeder Menüpunkt oder Button) "ferngesteuert" ausgeführt werden.

Ein Action-Objekt (die Funktion) kann mit Hilfe von FindObject() ermittelt werden. Voraussetzung hierfür ist, dass der Owner (das Fenster) der Aktion bekannt ist.

Die Objekt-Namen der einzelnen Actions können in der Passwortverwaltung jedes Fensters eingesehen werden (Feldname: "Action").

Parameter

aAction:O

Auszuführendes Action-Objekt

Rückgabewert

Logisch / Boolean - Ausführen erfolgreich

Beispiel

// Beispiel in einer Maske

| oMainForm, oAction |

oMainForm := GetOwnerForm(GetOwner(GetOwner(self))),

oAction   := FindObject(oMainForm, 'TableAdministration'),

ActionExecute(oAction),

// Beispiel (in einem Individual-Menü im Kundenstamm)

| oOwner, oAction, oForm |

// Öffnet Kontakt-Personen-Fenster

// Führt die Funktion "Neu" im Kontakt-Personen-Fenster aus

oOwner  := GetOwner(Self),

oAction := FindObject(oOwner, 'A_Contacts'),

if ActionExecute(oAction) then

   oForm := FindObjByClass(oOwner, "TFormEditContacts"),

   if not Empty(oForm) then

      oForm.ExecRefresh,

      oAction := FindObject(oForm, 'A_New'),

      ActionExecute(oAction),

   endif,

endif,


AddTreeNode()

AddTreeNode() – TreeNode in einem TreeView erstellen

Beschreibung

Die Funktion erzeugt einen neuen TreeNode und fügt diesem einen bestehenden TreeView hinzu.

Parameter

aTreeView:O | TreeView
aTreeNodeParent:O | Parent des TreeNodes
Name:C | Names des TreeNodes
Caption:C | Beschriftung des TreeNodes

Rückgabewert

Objekt - Neu hinzugefügter TreeNode

Beispiel

| oTreeV, oTreeNodeParent, oTreeNode |

oTreeV          := FindObject(self, 'TreeView'),

oTreeNodeParent := FindObject(oTreeV, 'TreeNode3'),

oTreeNode       := AddTreeNode(oTreeV, oTreeNodeParent, 'TreeNode4', 'Test'),

Siehe auch:

TTreeNodeEx

TTreeViewEx


AssignEvent()

AssignEvent() – Ereignis festlegen

Beschreibung

Die Funktion legt eine Funktion für ein Objekt fest, die jedes Mal wenn das angegebene Ereignis eintrifft ausgeführt wird.

Parameter

aObject:O | Objekt
aPropName:C | Eventfunktionsname
aFuncName:C | Funktionsname

Rückgabewert

Objekt - Objekt des Events

Beispiel

| oDab010:DB := 'waDAB010' |

function DoAfterPost(Sender)

   Meld("Neuer\Verändeter Eintrag!")

end,

AssignEvent(oDab010, "AfterPost", "DoAfterPost"),

Siehe auch:

AssignBlockEvent()


AssignGlobalEvent()

AssignGlobalEvent() – Globales Ereignis festlegen

Beschreibung

Die Funktion dient dem Setzen eines Globalen Events.

Hinweis

Verfügbares Events "BeMsgObjHook"

Bei gesetztem Event werden ALLE Meldungen der BE-Applikation auf dieses Event umgeleitet.

Parameter des Events:

  aMsgTyp:N          Meldungstyp (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom)

  aTextNo:N          Nummer des Meldungstexts

  aArgs:A            Argumente für den Text

  var aResult:N      Rückgabe: Meldungsergebnis (mrNone = meist default, mrOk, mrCancel, mrYes, mrNo)

  var aHideMsg:L     Rückgabe: default = True = Keine Meldung anzeigen, False = Meldung anzeigen

Parameter

aPropName:C | Name des Events
aFuncName:C | Name zugeordneten Funktion

Rückgabewert

Objekt - Objekt des Events

Beispiel

// Beispiel (alle Meldungen mit "Ja" bzw. "Ok" bestätigen)

function BeMsgHandler(aMsgTyp, aTextNo, aArgs, aResult, aHideMsg)

   if aResult = mrNo then     // aus "nein" mach "ja"

      aResult := mrYes,

   endif,

   if aResult = mrCancel then // aus "abbruch" mach "ok"

      aResult := mrOK,

   endif,

   if aResult = mrNone then   // aus allem anderen mach "ja"

      aResult := mrYes,

   endif,

end,

SetPersistent(true),

AssignGlobalEvent("BeMsgObjHook", "BeMsgHandler"),


BringToFront()

BringToFront() – Objekt nach vorne bringen

Beschreibung

Die Funktion bringt ein Objekt in den Vordergrund.

Parameter

aControl:O

Control-Objekt

Rückgabewert

keiner

Beispiel

| oForm, oBtnFront, oBtnBack, oLabel, oMemo |

function DoHide()

   SendToBack(oBtnBack),

end,

function DoShow()

   BringToFront(oBtnBack),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 366,

oForm.Height      := 120,

oForm.Caption     := 'SendToBack() und BringToFront()',

oForm.Position    := poScreenCenter,

oBtnFront         := CreateObject('TButton', 'BtnShow', oForm, oForm),

oBtnFront.Width   := 150,

oBtnFront.Height  := 20,

oBtnFront.Caption := '

oBtnFront.Top     := 10,

oBtnFront.Left    := 10,

oBtnBack          := CreateObject('TButton', 'BtnHide', oForm, oForm),

oBtnBack.Width    := 150,

oBtnBack.Height   := 20,

oBtnBack.Caption  := '

oBtnBack.Top      := 10,

oBtnBack.Left     := 190,

oMemo             := CreateObject('TMemo', 'Memo', oForm, oForm),

oMemo.Width       := 160,

oMemo.Height      := 30,

oMemo.Top         := 5,

oMemo.Left        := 185,

SendtoBack(oMemo),

AssignEvent(oBtnFront, 'OnClick', 'DoShow'),

AssignEvent(oBtnBack, 'OnClick', 'DoHide'),

ShowModal(oForm),

Siehe auch:

Hide()

SendToBack()


Browse()

Browse() – Tabelle im Datenbrowser anzeigen

Beschreibung

Die Funktion öffnet ein Fenster in welchem eine Tabelle mit den angegebenen Feldern angezeigt wird.

Parameter

aParent:U

Container-Objekt (WinControl), in dem der Datenbankbrowser angezeigt werden soll.

default = nil.

Dies kann z.B. auch das GetForm-Objekt einer GetList sein.

- Ist aParent:U nicht vom Typ Objekt, dann wird ein modales Anzeigefenster mit einem Browser generiert.

- Ist aParent:U ein Text, dient er als Überschrift für das Browserfenster.

- Ist aParent:U leer, wird die Eigenschaft 'DisplayLabel' der Tabelle als Überschrift verwendet.

- Ist 'DisplayLabel' leer oder nicht vorhanden, wird die Eigenschaft 'AliasName' eingesetzt.

- Ist 'AliasName' ebenfalls leer oder nicht vorhanden, wird 'TableName' verwendet.

aTable:U

Bezugstabelle; default = nil

Es ist auch möglich, ein Array mit Tabellen zu übergeben, die für die Codeblöcke des Browsers zur Verfügung stehen sollen. Dies ist nur dann gültig, wenn der 3. Parameter eine Browser-ID darstellt.

aFields:U

Feldname oder FeldnamenArray oder BrowserID ("@" + max. 6 Zeichen);

default = alle Felder der Bezugstabelle

Feldname kann selbst auch ein Array mit folgenden Parametern sein

1. Feldname oder Feldfunktion (selbständiger Codeblock)

2. Spaltenbezeichnung (optional)

3. Spaltenbreite (optional)

aPosition:U

Position des Browsers im Container-Objekt oder Position des Browserfensters selbst.

1. Handelt es sich bei diesem Parameter um einen einzelnen Wert,

wird dieser als Alignment (Ausrichtung) betrachtet.

Folgende Konstante können eingesetzt werden:

   alNone   keinen Bezug zu den Begrenzungen des Container-Objektes

   alLeft   immer linksbündig im Container-Objekt

   alRight  immer rechtsbündig im Container-Objekt

   alTop    immer an der Oberkante des Container-Objektes

   alBottom an der Unterkante des Container-Objektes

   alClient Browser füllt nach Möglichkeit das ganze Container-Objekt

2. Handelt es sich um ein Array mit zwei Elementen,

dann wird das erste Element als Alignment betrachtet.

Im Falle von alLeft oder alRight wird das zweite Element als Breite eingesetzt,

in den Fällen alTop und alBottom als Höhe, ansonsten wird es ignoriert.

3. Handelt es sich um ein Array mit vier Elementen

1. Element: X-Position der linken oberen Ecke,

2. Element: Y-Position der linken oberen Ecke

3. Element: Breite

4. Element: Höhe

Andere Arraydimensionierungen werden ignoriert.

Wird der Browser in einem eigenständigen Fenster angezeigt (1. Parameter Empty),

dann gelten Positionsangaben als Desktop-Koordinaten des Container-Fensters.

Der Browser selbst füllt in diesem Fall immer das gesamte Fenster aus.

Angaben zum Alignment bleiben bei dieser Aufrufvariante unberücksichtigt.

Werden keine Desktopkoordinaten angegeben,

wird das Fenster auf 6/8 der Bildschirmfläche zentriert angezeigt.

aReadOnly:L

ReadOnly; default = true

true – Lesemodus kein editieren möglich

false – editierbar solange die Änderungen nicht den Feldrechten wieder sprechen

aDeleteLock:L

DeleteLock; default = true

true – es können keine Datensätze gelöscht werden

false – Datensätze können gelöscht werden

aInsertLock:L

Insert Lock; default = true

true – es können keine neuen Datensätze erzeugt werden

false – Neue Datensätze können erzeugt werden

aAutoCancel:L

AutoCancel; default = true

Setzt die Grid-Eigenschaft dgCancelOnExit, also das Abbrechen eines Editmodus, falls das

Grid den Fokus verliert (z.B. das modale Fenster geschlossen wird)

Rückgabewert

Tabellenbrowser-Objekt

Beispiel

| oDab000:DB := 'waDAB000', aFields |

aFields := {{'KDNR', 'Kunden-Nummer', 100}, {'NAME1', 'Name', 300}},

Browse("Kunde mit Kundennummer", oDab000, aFields),

Siehe auch:

GetBrowser()


ChartRefreshData()

ChartRefreshData() – Chart refreshen

Beschreibung

Diese Funktion dient dem kompletten Refresh eines Charts.

Parameter

oChart:O

Chart

Rückgabewert

Keiner

Beispiel

ChartRefreshData(oChart),


CheckValidValue()

CheckValidValue() – Gültigkeit einer Eingabe prüfen

Beschreibung

Die Funktion löst das OnValidateValue-Event eines datenbank-gebundenen Oberflächen-Controls aus.

Parameter

oOwner:O | Owner des Controls
oField:O | Datenbank-Feld-Objekt (TField)

Rückgabewert

Logisch / Boolean - valide / nicht valide


ClassName()

ClassName() – Klassenname

Beschreibung

Die Funktion liefert den Namen der Klasse eines Objektes.

Parameter

aObject:O

Objekt, von welchem die Klasse bestimmt werden soll

Rückgabewert

Alphanumerisch - Klassenname

Beispiel

| oDab000:DB := 'waDAB000', oGetList |

oGetList := CreateGet('Getlist'),

WriteLn(ClassName(oGetList)),

WriteLn(ClassName(oDab000)),

Siehe auch:

ClassOf()


ClassOf()

ClassOf() – Klassenprüfung

Beschreibung

Die Funktion prüft, ob ein Objekt von der angegebenen Klasse ist.

Parameter

aObject:O | Objekt, welches geprüft werden soll
aClassName:C | Klasse, auf welche das Objekt geprüft werden soll

Rückgabewert

Logisch / Boolean - Objekt ist von der angegebenen Klasse

Beispiel

| oDab000:DB := 'waDAB000' |

WriteLn(ClassOf(oDab000, 'TCbGetList')),

WriteLn(ClassOf(oDab000, 'TBeRightsTable')),

Siehe auch:

ClassName()


ClearGets()

ClearGets() – Get-Objekte löschen

Beschreibung

Die Funktion löscht alle Get-Objekte aus einem GetList-Objekt.

Parameter

aGetList:O

GetList-Objekt

Rückgabewert

keiner

Beispiel

| oGet, oGetKdnr, oGetArtnr, cKdnr, cArtnr, aButton, lRefresh:L := false |

// Erster Teil

aButton   := {{1,gctbutton}},

cKdnr     := '123',

cArtnr    := 'ABC',

oGet      := CreateGet('RefreshTest', 100, 100, 300, 300),

oGetKdnr  := Get(oget, cKdnr, 10, 10, 100, 20,,,, 'lRefresh'),

oGetArtnr := Get(oget, cArtnr, 10, 40, 100, 20,,,, 'lRefresh'),

function refresh()

   cKdnr    := '456',

   cArtnr   := 'DEF',

   lRefresh := true,

   RefreshGet(oGetArtnr),

end,

Get(oGet, aButton, 10, 80, 100, 20, 'Refresh',,,,, "refresh()"),

ReadGets(oget),

// Zweiter Teil

ClearGets(oGet),

oGetKdnr := Get(oget, cKdnr, 10, 10, 100, 20,,,, 'lRefresh'),

ReadGets(oget),

Siehe auch:

CreateGet()

Get()

ReadGets()

GetBrowser()

RefreshGet()


CloseForm()

CloseForm() – Form-Objekt schließen

Beschreibung

Die Funktion schließt ein Form-Objekt.

Parameter

aFormObject:O

TForm-Objekt

Rückgabewert

keiner

Beispiel

| oForm, oBtnCancel, oLblWait |

function DoClose(Sender)

   CloseForm(oForm),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsNone,

oForm.Width       := 366,

oForm.Height      := 100,

oForm.Caption     := 'CloseForm() Beispiel',

oForm.Position    := poScreenCenter,

oBtnCancel         := CreateObject('TButton', 'BtnCancel', oForm, oForm),

oBtnCancel.Width   := 150,

oBtnCancel.Height  := 20,

oBtnCancel.Caption := '

oBtnCancel.Top     := 10,

oBtnCancel.Left    := 100,

oLblWait         := CreateObject('TLabel', 'LblWait', oForm, oForm),

oLblWait.Width   := 300,

oLblWait.Height  := 40,

oLblWait.Caption := 'Bitte auf den Button drücken um das Fenster zu schließen!',

oLblWait.Top     := 60,

oLblWait.Left    := 40,

AssignEvent(oBtnCancel, 'OnClick', 'DoClose'),

ShowModal(oForm),

Siehe auch:

ModalResult()

Show()

ShowModal()


ClRect()

ClRect() – ClientRect

Beschreibung

Die Funktion gibt die Eigenschaft ClientRect des übergebenen Objektes zurück

Parameter

aWinControl:O

Win-Control

Rückgabewert

Array - Format

{ Left, Top, Right, Bottom }

Beispiel

| oForm |

oForm := CreateObject('TForm'),

ClRect(oForm)


CollAdd()

CollAdd() – Collection hinzufügen

Beschreibung

Die Funktion fügt zu einem aCollection Objekt ein Collection-Item hinzu.

Parameter

aCollection:O

Collection-Objekt

Rückgabewert

Objekt - CollectionItem

Beispiel

| oMemTable, oField, oCollection |

oMemTable   := CreateObject("TMemCalcTable"),

oCollection := oMemTable.FieldsDefinition,

oField      := CollAdd(oCollection),

oField.Name := 'POS1',

WriteLn(oField),

Siehe auch:

CollCount()

CollDelete()

CollItem()


CollCount()

CollCount() – Collectionanzahl

Beschreibung

Die Funktion gibt die Anzahl der Objekte der aCollection zurück.

Parameter

aCollection:O

Collection-Objekt

Rückgabewert

Numerisch - Anzahl der CollectionItems

Beispiel

| oMemTable, oField, oCollection |

oMemTable   := CreateObject("TMemCalcTable"),

oCollection := oMemTable.FieldsDefinition,

oField      := CollAdd(oCollection),

oField.Name := 'POS1',

oField      := CollAdd(oCollection),

oField.Name := 'POS2',

oField      := CollAdd(oCollection),

oField.Name := 'POS3',

WriteLn(CollCount(oCollection)),

Siehe auch:

CollAdd()

CollDelete()

CollItem()


CollDelete()

CollDelete() – Collectionitem löschen

Beschreibung

Die Funktion löscht aus einem aCollection Objekt das aIndex Objekt.

Parameter

aCollection:O | Collection-Objekt
aIndex:N | Index-Zahl

Rückgabewert

keiner

Beispiel

| oMemTable, oField, oCollection |

oMemTable   := CreateObject("TMemCalcTable"),

oCollection := oMemTable.FieldsDefinition,

oField      := CollAdd(oCollection),

oField.Name := 'POS1',

oField      := CollAdd(oCollection),

oField.Name := 'POS2',

oField      := CollAdd(oCollection),

oField.Name := 'POS3',

WriteLn(CollCount(oCollection)),

CollDelete(oCollection, 2),

WriteLn(CollCount(oCollection)),

Siehe auch:

CollAdd()

CollCount()

CollItem()


CollItem()

CollItem() – Collectionitem

Beschreibung

Die Funktion gibt das Objekt mit dem Index aIndex aus der Collection aCollection zurück.

Parameter

aCollection:O | Collection-Objekt
aIndex:N | Index-Zahl

Rückgabewert

Objekt - CollectionItem

Beispiel

| oMemTable, oField, oCollection |

oMemTable   := CreateObject("TMemCalcTable"),

oCollection := oMemTable.FieldsDefinition,

oField      := CollAdd(oCollection),

oField.Name := 'POS1',

oField      := CollAdd(oCollection),

oField.Name := 'POS2',

oField      := CollAdd(oCollection),

oField.Name := 'POS3',

WriteLn(CollItem(oCollection, 2)),

Siehe auch:

CollAdd()

CollCount()

CollDelete()


ComponentCount()

ComponentCount() – Anzahl der Unter-Komponenten einer Komponente

Beschreibung

Gibt die Anzahl an Unter-Komponenten einer übergebenen Komponente zurück.

Wenn z.B. ein Panel übergeben wird, so wird die Anzahl aller Komponente die sich auf diesem Panel befinden zurück gegeben.

Wichtig: Diese Funktion bezieht sich auf die Owner-Struktur.

Parameter

aComponent:O

Komponente deren Anzahl an Unter-Komponenten ermittelt werden soll

Rückgabewert

Numerisch

Beispiel

// siehe Components()

Siehe auch:

Components()


Components()

Components() – Zugriff auf die Unter-Komponenten einer Komponente

Beschreibung

Ermöglicht es die einzelnen Unter-Komponenten auf einer Komponente über den angegebenen Index zu ermitteln.

Wichtig: Diese Funktion bezieht sich auf die Owner-Struktur.

Parameter

aComponent:O | Die Komponente dessen Unter-Komponente ermittelt werden soll
aIndex:N | Index der Unter-Komponente die man als Result bekommt

Rückgabewert

Objekt (TComponent)

Beispiel

| oForm, oPanel1, oPanel2, oPanel3 |

function ShowComponentTree(oMainComponent, nDepth)

| i, oComponent |

   for i := 0 to Componentcount(oMainComponent) - 1 do

      oComponent := Components(oMainComponent, i),

      writeln(StringOfChar('-', nDepth) + ClassName(oComponent) + '(' + oComponent.name + ')'),

      ShowComponentTree(oComponent, nDepth + 3),

   next,

end,

oForm := CreateObject('TFormEx'),

startseq

   oPanel1 := CreateObject('TPanel', 'pan1', oForm, oForm),

   oPanel2 := CreateObject('TPanel', 'pan2', oPanel1, oPanel1),

   oPanel3 := CreateObject('TPanel', 'pan3', oPanel2, oPanel2),

   ShowComponentTree(oForm, 0),

always

   DestroyObject(oForm),

stopseq,

Siehe auch:

ComponentCount()


ControlCount()

ControlCount() – Anzahl der Unter-Controls eines Controls

Beschreibung

Gibt die Anzahl an Unter-Controls eines übergebenen Controls zurück.

Wenn z.B. ein Panel übergeben wird, so wird die Anzahl aller Controls die sich auf diesem Panel befinden zurück gegeben.

Wichtig: Diese Funktion bezieht sich auf die Parent-Struktur.

Parameter

oControl:O

Control dessen Anzahl an Unter-Controls ermittelt werden soll

Rückgabewert

Numerisch

Beispiel

// siehe Controls()

Siehe auch:

Controls()


Controls()

Controls() – Zugriff auf die Unter-Controls eines Controls

Beschreibung

Ermöglicht es die einzelnen Unter-Controls auf einem Control über den angegebenen Index zu ermitteln.

Wichtig: Diese Funktion bezieht sich auf die Parent-Struktur.

Parameter

oControl:O | Das Control dessen Unter-Controls ermittelt werden soll
aIndex:N | Index des Unter-Controls die man als Result bekommt

Rückgabewert

Objekt (TWinControl)

Beispiel

| oForm, oPanel1, oPanel2, oPanel3 |

function ShowControlTree(oMainControl, nDepth)

| i, oControl |

   for i := 0 to ControlCount(oMainControl) - 1 do

      oControl := Controls(oMainControl, i),

      writeln(StringOfChar('-', nDepth) + ClassName(oControl) + '(' + oControl.name + ')'),

      ShowControlTree(oControl, nDepth + 3),

   next,

end,

oForm := CreateObject('TFormEx'),

startseq

   oPanel1 := CreateObject('TPanel', 'pan1', oForm, oForm),

   oPanel2 := CreateObject('TPanel', 'pan2', oPanel1, oPanel1),

   oPanel3 := CreateObject('TPanel', 'pan3', oPanel2, oPanel2),

   ShowControlTree(oForm, 0),

always

   DestroyObject(oForm),

stopseq,

Siehe auch:

ControlCount()


CreateGet()

CreateGet() – GetList erstellen

Beschreibung

CreateGet() erzeugt eine GetList. Diese GetList kann über Aufrufe der Funktion Get() näher definiert werden. Mit dem Aufruf von ReadGets() wird die GetList als DialogFenster eingeblendet. Jeder Aufruf von Get() entspricht einer Eingabe-Maske im Dialogfeld. Die Eingaben des Benutzers in diesen Feldern werden in den jeweiligen Parametern gespeichert.

Parameter

aCaption:C | Fensterüberschrift; default = Leerstring
aLeft:N | X-Koordinate des Fensters; default = 0
aTop:N | Y-Koordinate des Fensters; default = 0
aWidth:N | Breite des Fensters; default = Screen.Width
aHeight:N | Höhe des Fensters; default = Screen.Height
aColor:N | Hintergrundfarbe des Fensters; default = clBtnFace

Rückgabewert

Objekt - GetList

Beispiel

| oGetList, oDab005:DB := 'waDAB005', cName:C := 'Name', dDatum:D := date |

oGetList := CreateGet('Get-Fenster', 10, 10, 300, 250),

Get(oGetList, cName, 10, 40, 150, 20, 'Name'),

Get(oGetList, dDatum, 10, 90, 150, 20, 'Datum'),

if ReadGets(oGetList) then

   Meld('Name: ' + cName + crlf + 'Datum: ' + DToC(dDatum)),

endif,

Siehe auch:

ClearGets()

Get()

ReadGets()

GetBrowser()

RefreshGet()


CreateObject()

CreateObject() – Objekt erstellen

Beschreibung

Die Funktion erzeugt ein Objekt.

Parameter

aClassName:C | Klassennamen
aName:C | Objektname
aOwner:O | Besitzer-Objekt
aParent:O | Container-Objekt

Rückgabewert

Objekt - Erstelltes Objekt

Beispiel

| oForm, oBtnC |

function DoOnBtnCClick(sender)

   CloseForm(oForm),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 100,

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oForm, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),

Siehe auch:

DestroyObject()

FindObject()


DestroyObject()

DestroyObject() – Objekt zerstören

Beschreibung

Die Funktion zerstört ein Objekt.

Parameter

aObject:O

Objekt

Rückgabewert

keiner

Beispiel

| oForm |

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 100,

DestroyObject(oForm),

Siehe auch:

CreateObject()

FindObject()


EditChangeSel()

EditChangeSel() – Editfeld-Text markieren

Beschreibung

Die Funktion markiert den Text eines von TBeEdit abgeleiteten Edit-Feldes. Es wird der Text von aSelStart bis aSelLength markiert, wobei das erste Zeichen 0 ist. Wird aSelLength nicht übergeben, wird lediglich der Cursor innerhalb des Edit-Feldes versetzt.

Parameter

aEditObject:O | Edit-Objekt
aSelStart:N | Start des markierten Textes
aSelLength:N | Länge des markierten Textes; default

Rückgabewert

Objekt - Edit-Objekt

Beispiel

| oForm, oBtnC, oEdit |

function DoOnBtnCClick(sender)

   oForm.ActiveControl := oEdit,

   EditChangeSel(oEdit, 0, 5),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oForm, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oForm, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),


FindFieldComponent()

FindFieldComponent() – Feldkomponente finden

Beschreibung

Die Funktion liefert das Control eines DBFields zurück.

Parameter

aOwner:O | Besitzer-Objekt
aField:O | Feldobjekt ( zurückgeliefert durch DbField() )
cClass:C | Klassen-Name des gesuchten Objektes

Rückgabewert

Objekt - Field-Komponente

Beispiel

| oDab010:DB := 'waDAB010', aField, cClass |

aField := DBField('ARTNR',oDab010),

if Empty(FindFieldComponent(oDab010, aField, 'TEdit')) then

   Meld('Es wurde kein Control gefunden.'),

endif,


FindNextControl()

FindNextControl() – Nächstes Control finden

Beschreibung

Die Funktion ermittlet das in der Tabulatorreihenfolge nach AktControl nachfolgende Control. Wenn AktControl kein untergeordnetes Objekt von Form ist, gibt FindNextControl das erste untergeordnete Control in der Tabulatorreihenfolge zurück.

Parameter

Form:O | Formular
AktControl:O | Aktives Control
SeekForward:L | Vorwärtssuchen
CheckTabStop:L | Das nächste Control muss CheckTabStop = true haben
CheckParent:L | Das nächste Control muss als Parent Form haben

Rückgabewert

Objekt - Nächstes Control

Beispiel

| oForm, oBtnC, oEdit, oObj |

function DoOnBtnCClick(sender)

   oObj := FindNextControl(oForm, oBtnC, false, false, false),

   Meld(oObj.name),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oForm, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oForm, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),


FindObjByClass()

FindObjByClass() – Objekt nach Klassenname suchen

Beschreibung

Die Funktion gibt, ähnlich wie FindObject(), ein gesuchtes Objekt bzw. Control zurück.

Jedoch wird das Objekt über den angegebenen (u.U. nicht-eindeutigen) Klassen-Namen im Owner-Objekt identifiziert.

Diese Funktion ist im Besonderen dafür gedacht, um gedockte Fenster zu finden, da bei diesen Objekten der Objekt-Name u.U. dynamisch vergeben wird, während der Klassen-Name konstant bleibt.

Parameter

aObject:O | Owner-Objekt
aClassName:C | Klassen-Name des gesuchten Objektes

Rückgabewert

Objekt - Gesuchtes Objekt

Beispiel

| oForm, oBtnC, oEdit, oObj |

function DoOnBtnCClick(sender)

   oObj := FindObjByClass(oForm, 'TButton'),

   Meld(oObj.name),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oForm, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oForm, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),

Siehe auch:

CreateObject()

DestroyObject()

FindObject()


FindObject()

FindObject() – Objekt suchen

Beschreibung

Die Funktion sucht nach einem Objekt und liefert dieses bei Erfolg zurück.

Parameter

aObject:O | Objekt, in welchem gesucht werden soll
aComponentName:C | Name der Komponente

Rückgabewert

Objekt - Gesuchtes Objekt

Beispiel

| oForm, oBtnC, oEdit, oObj |

function DoOnBtnCClick(sender)

   oObj := FindObject(oform, 'Edit'),

   Meld(ClassName(oObj)),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oForm, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oForm, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),

Siehe auch:

CreateObject()

DestroyObject()


FlashTaskBar()

FlashTaskBar() – Taskleiste blinken lassen

Beschreibung

Die Funktion lässt den Taskleisten-Eintrag aufblinken wenn die Applikation zum Zeitpunkt des Funktions-Aufrufs nicht aktiv im Vordergrund ist.

Hinweis

Diese Funktionalität ist evtl. auf älteren Win98/Windows2000-Workstations noch nicht verfügbar.

Parameter

nCount:N

Gibt an, wie oft die Taskleiste blinkt, Default = unendlich

Rückgabewert

Keiner

Beispiel

FlashTaskBar(10)   // Taskleisten-Eintrag 10x blinken lassen


Get()

Get() – GetList definieren

Beschreibung

Die mit CreateGet() erzeugte GetList kann mit Get() näher definiert werden. Jeder Aufruf von Get() entspricht einem Eingabe-Feld im später aufgerufenen Dialogfeld, dabei werden Variablen des Typs C, N, U als Editfeld, D als Datum, und L als Checkbox dargestellt. Die Eingaben des Benutzers in diesen Feldern werden in den jeweiligen Variablen gespeichert. Mit dem Aufruf von ReadGets() wird die GetList als DialogFenster eingeblendet.

Parameter

aGetList:O | GetList Objekt
aVar:R | Ergebnis-Parameter: Variable für Defaultanzeige im Editfeld
aLeft:N | Abstand von Links; default = 0
aTop:N | Abstand von Oben; default = 0
aWidth:N | Breite; default = 0
aHeight:N | Höhe; default = 0
aLabel:C | Bezeichnung; default = Leerstring
aLabelTop:L | Label; default = true true - Bezeichnung über Editfeld false - Bezeichnung links neben Editfeld
aPicture:C | Eingabemaske für Variablen vom Typ N, C oder U; default = Leerstring (Darstellung im Edit-Feld)
aWhen:C | When-Codeblock als Text; default = Leerstring; (vordefinierter Parameter oGet wird an diesen Block übergeben)
aRange:A | Gültigkeitsbereich für Variablen die nicht von Typ L sind; default = nil()
aValidation:C | Codeblock zur Validierung als Text; default = Leerstring; (vordefinierter Parameter oGet wird an diesen Block übergeben)

Rückgabewert

Objekt - GetObjekt

Beispiel

| oGetList, oDab005:DB := 'waDAB005', cName:C := 'Name', dDatum:D := date |

oGetList := CreateGet('Get-Fenster', 10, 10, 300, 250),

Get(oGetList, cName, 10, 40, 150, 20, 'Name'),

Get(oGetList, dDatum, 10, 90, 150, 20, 'Datum'),

if ReadGets(oGetList) then

   Meld('Name: ' + cName + crlf + 'Datum: ' + DToC(dDatum)),

endif,

Siehe auch:

ClearGets()

CreateGet()

ReadGets()

GetBrowser()

RefreshGet()


GetAppMainForm()

GetAppMainForm() – Rückgabe des aktuellen MainForm-Objekts

Beschreibung

Funktion gibt das aktuelle Hauptformular zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Objekt

Beispiel

| oMainForm |

oMainForm := GetAppMainForm(),

writeln(oMainForm.Name)  // 'F_ProgMain' für Programmierung

                         // 'FormMain'   für be-Hauptfenster ...


GetBeOLEProp()

GetBeOLEProp() – OLE-Objekt Eigenschaft auslesen

Beschreibung

Die Funktion ermittelt den Eigenschaftswert eines OLE-Objektes.

Parameter

oOleObj:O | OLE-Objekt
cPropName:C | Eigenschaftsname

Rückgabewert

Undefiniert - Eigenschaftswert

Beispiel

| cCaption, oOleObj |

cCaption := GetBeOLEProp(oOleObj, 'Caption')


GetBrowser()

GetBrowser() – Browser für GetListObjekt

Beschreibung

Die Funktion erzeugt einen Browser für ein GetListObjekt.

Parameter

aGetList:O | GetList-Objekt
aTable:U | Bezugstabelle; default = nil; Es ist auch möglich, ein Array mit Tabellen zu übergeben, die für die Codeblöcke des Browsers zur Verfügung stehen sollen. Dies ist nur dann gültig, wenn der 3. Parameter eine Browser-ID darstellt.
aFields:U | Felder; default = alle Felder der Bezugstabelle; Feldname, FeldnamenArray oder BrowserID (@ + max. 6 Zeichen); Feldname kann selbst auch ein Array mit folgenden Parametern sein; 1. Feldname oder Feldfunktion (selbständiger Codeblock); 2. Spaltenbezeichnung (optional); 3. Spaltenbreite (optional)
aPosition:U | Position, z.B. Positions-Array (siehe Browse())
aReadOnly:L | ReadOnly (trotzdem den Feldrechten untergeordnet); default = true
aDeleteLock:L | Datensätze können nicht gelöscht werden; default = true
aInsertLock:L | Neue Datensätze können nicht erzeugt werden; default = true
aAutoCancel:L | AutoCancel; default = true

Rückgabewert

Objekt - Browser Grid-Objekt

Beispiel

| oGetList, oDab005:DB := 'waDAB005', cName:C := 'Name', dDatum:D := date |

oGetList := CreateGet('Get-Fenster', 10, 10, 600, 650),

Get(oGetList, cName, 10, 40, 150, 20, 'Name'),

Get(oGetList, dDatum, 10, 90, 150, 20, 'Datum'),

GetBrowser(oGetList, oDab005, {'PERSNR','NAME'}, {100, 150, 400, 400}),

if ReadGets(oGetList) then

   Meld('Name: ' + cName + crlf + 'Datum: ' + DToC(dDatum)),

endif,

Siehe auch:

Browse()

ClearGets()

CreateGet()

Get()

ReadGets()

RefreshGet()


GetExTimer()

GetExTimer() – Exakte Zeitmessung

Beschreibung

Die Funktion dient zur genauen Zeitmessung innerhalb von Programmabläufen. Sie gibt eine Zahl zurück, die die Anzahl von Sekunden seit einem Zeitpunkt repräsentiert, und wird von da an hochgezählt. Die Genauigkeit ist hier unter einer ms.

Parameter

keine Parameter erwartet

Rückgabewert

Numerisch - Zeitdifferenz seit Start der Zählung (undefiniert)

Beispiel

| nStart, nEnd |

nStart := GetExTimer(),

Sleep(4000),

nEnd := GetExTimer(),

WriteLn('Programm wurde für ' + Str(nEnd - nStart) + ' Sekunden angehalten.'),


GetOwner()

GetOwner() – Objektowner ermitteln

Beschreibung

Die Funktion gibt den Owner von aComponent wieder.

Parameter

aComponent:O

Komponenten-Objekt von welchem das Owner-Objekt ermittelt werden soll

Rückgabewert

Objekt - Objektowner

Beispiel

| oForm, oBtnC, oEdit, oObj |

function DoOnBtnCClick(sender)

   oObj := GetOwner(oBtnC),

   Meld(oObj.Name),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Name        := 'Form',

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oForm, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oForm, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),

Siehe auch:

GetOwnerForm()

GetParent()

GetParentForm()


GetOwnerForm()

GetOwnerForm() – Formular des Owners ermitteln

Beschreibung

Die Funktion gibt das Formular zurück, zu dem der Owner von aControl gehört.

Parameter

aControl:O

Control-Objekt

Rückgabewert

Objekt - Formular

Beispiel

| oForm, oBtnC, oEdit, oObj |

function DoOnBtnCClick(sender)

   oObj := GetOwnerForm(oEdit),

   Meld(oObj.Name),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Name        := 'Form',

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oForm, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oBtnC, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),

Siehe auch:

GetOwner()

GetParent()

GetParentForm()


GetParent()

GetParent() – Parent ermitteln

Beschreibung

Die Funktion gibt den Parent von aControl zurück.

Parameter

aControl:O

Control-Objekt

Rückgabewert

Objekt - Parent

Beispiel

| oForm, oBtnC, oEdit, oObj |

function DoOnBtnCClick(sender)

   oObj := GetParent(oBtnC),

   Meld(oObj.Name),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Name        := 'Form',

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oForm, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oForm, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),

Siehe auch:

GetOwner()

GetOwnerForm()

GetParentForm()

SetParent()


GetParentForm()

GetParentForm() – Parent eines Controls ermitteln

Beschreibung

Die Funktion gibt das Formular des Controls zurück, das der Parent von aControl ist.

Parameter

aControl:O

Control-Objekt

Rückgabewert

Objekt - Formular

Beispiel

| oForm, oBtnC, oEdit, oObj |

function DoOnBtnCClick(sender)

   oObj := GetParentForm(oBtnC),

   Meld(oObj.Name),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Name        := 'Form',

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oForm, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oForm, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),

Siehe auch:

GetOwner()

GetOwnerForm()

GetParent()

SetParent()


GetWindowNavigator()

GetWindowNavigator() – Fenster-Navigator-Objekt

Beschreibung

Funktion gibt den Fenster-Navigator zurück.

Hinweis

Funktioniert nur in Modulen, die den Fenster-Navigator zur Verfügung stellen.

Parameter

keine Parameter erwartet

Rückgabewert

Objekt

Beispiel

//******************************************************************************

// - Funktion erstellt im Fenster-Navigator eine "eigene Oberfläche", die

//   bisherige Oberfläche wird überblendet.

// - Angezeigt wird ein Browser und ein RichMemo, darin wird die

//   Standard-Tabelle "Textbausteine" (Workarea 12) geladen.

// - Diese Funktion kann aus einem beliebigen Kontext aufgerufen werden

//   (z.B. individueller Menüpunkt). Funktioniert nur in Fenstern, in denen der

//   Fenster-Navigator auch im Standard zur Verfügung steht.

//******************************************************************************

function SwitchNavigatorVisible()

| oDockPanel, oWN, oNavigPanel, oMyForm, oRichMemo, oGrid, oTable, oDataSource |

   oWN := GetWindowNavigator(),

   if not empty(oWN) then

      oDockPanel := FindObject(oWN, 'WINDOW_NAVIG_DOCK_PANEL'),

      if not empty(oDockPanel) then

         oNavigPanel := FindObject(oWN, 'WINDOW_NAVIG_PANEL'),

         if not empty(oNavigPanel) then

            startseq,

               oMyForm := FindObject(oDockPanel, 'MYFORM'),

               if empty(oMyForm) then

                  oMyForm               := CreateObject('TFormEx', 'MYFORM', oDockPanel, oDockPanel),

                  oMyForm.Align         := alCLient,

                  oMyForm.BorderStyle   := bsNone,

                  oTable                := DbGetTable(gl_odm, waDAB350),

                  oDataSource           := CreateObject('TDataSourceEx', , oMyForm, oMyForm),

                  oDataSource.DataSet   := oTable,

                  oGrid                 := CreateObject('TBeAltGrid', , oMyForm, oMyForm),

                  oGrid.Align           := alBottom,

                  oGrid.Height          := 200,

                  oGrid.DataSource      := oDataSource,

                  oGrid.RegisterDataSet := oTable,

                  oGrid.ID              := '@HINTXT',

                  oGrid.ReadWriteProps  := false,

                  oRichMemo             := CreateObject('TBeRichEditEx', , oMyForm, oMyForm),

                  oRichMemo.Align       := alClient,

                  oRichMemo.DataSource  := oDataSource,

                  oRichMemo.DataField   := 'MEMO',

                  Show(oMyForm), // erstes Anzeigen des Forms sollte immer im Show() laufen

               endif,

               // Sichtbarkeit umschalten

               oMyForm.Visible := not oMyForm.Visible,

            onerror,

               MessageDlg('Fehler beim Anzeigen des eigenen Navigators: ' + crlf +

                          GetErrorText(), mtError),

            stopseq,

         endif,

      endif,

   endif,

end,

SwitchNavigatorVisible(),


Hide()

Hide() – Control verstecken

Beschreibung

Die Funktion versteckt ein Control. Dazu wird die Eigenschaft Visible auf false gesetzt. Ein solch verstecktes Objekt kann mit Hilfe von Show() bzw Visible := true wieder angezeigt werden.

Parameter

aFormObject:O

Objekt welches versteckt werden soll

Rückgabewert

keiner

Beispiel

| oForm, oBtnShow, oBtnHide, oLabel |

function DoHide()

   Hide(oLabel),

   oBtnHide.enabled := false,

   oBtnShow.enabled := true,

end,

function DoShow()

   Show(oLabel),

   oBtnHide.enabled := true,

   oBtnShow.enabled := false,

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 366,

oForm.Height      := 120,

oForm.Caption     := 'Hide() und Show()',

oForm.Position    := poScreenCenter,

oBtnShow         := CreateObject('TButton', 'BtnShow', oForm, oForm),

oBtnShow.Width   := 150,

oBtnShow.Height  := 20,

oBtnShow.Caption := '

oBtnShow.Top     := 10,

oBtnShow.Left    := 10,

oBtnShow.enabled := false,

oBtnHide         := CreateObject('TButton', 'BtnHide', oForm, oForm),

oBtnHide.Width   := 150,

oBtnHide.Height  := 20,

oBtnHide.Caption := '

oBtnHide.Top     := 10,

oBtnHide.Left    := 190,

oLabel          := CreateObject('TLabel', 'Label', oForm, oForm),

oLabel.Width    := 150,

oLabel.Height   := 20,

oLabel.Caption  := 'Mich kann man verstecken und wieder anzeigen!',

oLabel.Top      := 60,

oLabel.Left     := 60,

AssignEvent(oBtnShow, 'OnClick', 'DoShow'),

AssignEvent(oBtnHide, 'OnClick', 'DoHide'),

ShowModal(oForm),

Siehe auch:

BringToFront()

SendToBack()

Show()


Invalidate()

Invalidate() – Neuzeichnen eines Controls auslösen

Beschreibung

Verwenden Sie Invalidate, wenn das gesamte Steuerelement neu gezeichnet werden muß. Wenn mehrere Bereiche innerhalb des Steuerelements neu aufgebaut werden müssen, zeichnet Invalidate das gesamte Fenster ohne Bildschirmflackern neu.

Es wirkt sich auch nicht negativ auf die Ausführungsgeschwindigkeit aus, wenn Invalidate vor dem Neuzeichnen des Steuerelements mehrere Male aufgerufen wird.

Parameter

aControl:O

Control

Rückgabewert

keiner

Beispiel

| oForm, oBtnC, oEdit |

function DoOnBtnCClick(sender)

   Invalidate(oEdit),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Name        := 'Form',

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oform, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oBtnC, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

ShowModal(oForm),


IsObject()

IsObject() – Prüfung auf Objekt

Beschreibung

Die Funktion prüft, ob es sich bei aVar um ein Objekt handelt.

Parameter

aVar:U

zu prüfende Variable

Rückgabewert

Logisch / Boolean - Ist Objekt

Beispiel

| uIsObj1:DB := 'waDAB050', uIsObj2:N := 5, uIsObj3:D := date |

WriteLn(IsObject(uIsObj1)),

WriteLn(IsObject(uIsObj2)),

WriteLn(IsObject(uIsObj3)),

Siehe auch:

IsWindow()


IsWindow()

IsWindow() – Fensterhandle prüfen

Beschreibung

Die Funktion prüft, ob ein Fensterhandle noch gültig ist.

Parameter

aHandle:N

Handle-Nummer welche geprüft werden soll

Rückgabewert

Logisch / Boolean - Fensterhandle gültig

Beispiel

| aHandle |

IsWindow(aHandle)

Siehe auch:

IsObject()


ModalResult()

ModalResult() – Modales Fenster schließen

Beschreibung

Die Funktion schließt ein modal geöffnetes Fenster (z.B. durch ShowModal()), indem aModalValue ein anderer Wert als mrNone zugewiesen wird.

Parameter

aFormObject:O | Fensterobjekt
aModalValue:N | Rückgabewert von ShowModal()

Rückgabewert

keiner

Beispiel

| oForm, oBtnC, oEdit |

function DoOnBtnCClick(sender)

   ModalResult(oForm, 1),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Name        := 'Form',

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oform, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oBtnC, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

if ShowModal(oForm) = 1 then

   Meld('Der Rückgabewert des Formulares ist 1'),

endif,

Siehe auch:

Show()

ShowModal()


ReadGets()

ReadGets() – GetList anzeigen

Beschreibung

Die Funktion zeigt ein GetListObjekt an.

Parameter

aGetList:O

GetList-Objekt

Rückgabewert

Logisch / Boolean - Ok Button wurde gedrückt

Beispiel

| oGetList, oDab005:DB := 'waDAB005', cName:C := 'Name', dDatum:D := date |

oGetList := CreateGet('Get-Fenster', 10, 10, 300, 250),

Get(oGetList, cName, 10, 40, 150, 20, 'Name'),

Get(oGetList, dDatum, 10, 90, 150, 20, 'Datum'),

if ReadGets(oGetList) then

   Meld('Name: ' + cName + crlf + 'Datum: ' + DToC(dDatum)),

endif,

Siehe auch:

ClearGets()

CreateGet()

Get()

GetBrowser()

RefreshGet()


RefreshAllGets()

RefreshAllGets() – Alle Get-Objekte aktualisieren

Beschreibung

Die Funktion prüft die WHEN-Bedingung aller Controls eines GetList-Objektes und schaltet ihre ReadOnly-Eigenschaft an bzw. aus. Die Funktion darf nur aufgerufen werden, während das GetList-Objekt angezeigt wird. Die Funktion dient dazu, Statusänderungen unabhängig vom Fokuswechsel überprüfen zu lassen (z.B. bei einem Button-Click).

Parameter

aGetList:O

GetList-Objekt

Rückgabewert

keiner

Beispiel

| oGet, cKdnr:N, aButton, lRefresh:L := false |

aButton := {{1,gctbutton}},

cKdnr   := '123',

oGet    := CreateGet('RefreshTest', 100, 100, 300, 300),

Get(oGet, cKdnr, 10, 10, 100, 20,,,, 'lRefresh'),

function refresh()

   cKdnr    := '456',

   lRefresh := true,

   RefreshAllGets(oGet),

end,

Get(oGet, aButton, 10, 50, 100, 20, 'Refresh',,,,, "refresh()"),

ReadGets(oget),

Siehe auch:

ClearGets()

CreateGet()

Get()

ReadGets()

GetBrowser()

RefreshGet()


RefreshGet()

RefreshGet() – Get-Objekt aktualisieren

Beschreibung

Die Funktion prüft die WHEN-Bedingung eines Get-Objektes und schaltet seine ReadOnly-Eigenschaft an bzw. aus. Die Funktion darf nur aufgerufen werden, während das Get-Objekt angezeigt wird.

Parameter

aGetObject:O

Get-Objekt

Rückgabewert

keiner

Beispiel

| oGet, oGetKdnr, oGetArtnr, cKdnr, cArtnr, aButton, lRefresh:L := false |

aButton   := {{1, gctbutton}},

cKdnr     := '123',

cArtnr    := 'ABC',

oGet      := CreateGet('RefreshTest', 100, 100, 300, 300),

oGetKdnr  := Get(oGet, cKdnr, 10, 10, 100, 20,,,, 'lRefresh'),

oGetArtnr := Get(oGet, cArtnr, 10, 40, 100, 20,,,, 'lRefresh'),

function refresh()

   cKdnr    := '456',

   cArtnr   := 'DEF',

   lRefresh := true,

   RefreshGet(oGetArtnr),

end,

Get(oGet, aButton, 10, 80, 100, 20, 'Refresh',,,,, "refresh()"),

ReadGets(oget),

Siehe auch:

ClearGets()

CreateGet()

Get()

ReadGets()

GetBrowser()


RetainObject()

RetainObject() – Objekt im Speicher halten

Beschreibung

Normalerweise werden alle Objekte automatisch freigegeben, die innerhalb eines Codeblocks ohne Owner erzeugt wurden. Die Freigabe erfolgt, wenn die Ausführung des Codeblocks endet.

Die Funktion RetainObject() nimmt aObject aus der internen Liste der Objekte, die automatisch gelöscht werden sollen. Damit ergibt sich die Möglichkeit, dass ein Codeblockprogramm als Rückgabewert eine gültige Objektreferenz liefert, die im aufrufenden Block weiter verwendet werden kann. Außerdem kann ein Objekt einer globalen Variablen zugewiesen werden, die auch nach Beendigung des Blocks gültig bleibt.

Parameter

aObject:O

Objekt, welches erhalten bleiben soll

Rückgabewert

keiner

Beispiel

| G_File:_U |

if File('C:\temp\xxx.sql') then

   G_File := FOpen('C:\temp\xxx.sql'),

   RetainObject(G_File),

endif


SendToBack()

SendToBack() – Control in den Hintergrund schicken

Beschreibung

Die Funktion schickt ein Objekt in den Hintergrund, d.h. die Z-Order des Controls wird verringert.

Parameter

aControl:O

Control-Objekt

Rückgabewert

keiner

Beispiel

| oForm, oBtnFront, oBtnBack, oLabel, oMemo |

function DoHide()

   SendToBack(oBtnBack),

end,

function DoShow()

   BringToFront(oBtnBack),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 366,

oForm.Height      := 120,

oForm.Caption     := 'SendToBack() und BringToFront()',

oForm.Position    := poScreenCenter,

oBtnFront         := CreateObject('TButton', 'BtnShow', oForm, oForm),

oBtnFront.Width   := 150,

oBtnFront.Height  := 20,

oBtnFront.Caption := '

oBtnFront.Top     := 10,

oBtnFront.Left    := 10,

oBtnBack         := CreateObject('TButton', 'BtnHide', oForm, oForm),

oBtnBack.Width   := 150,

oBtnBack.Height  := 20,

oBtnBack.Caption := '

oBtnBack.Top     := 10,

oBtnBack.Left    := 190,

oMemo        := CreateObject('TMemo', 'Memo', oForm, oForm),

oMemo.Width  := 160,

oMemo.Height := 30,

oMemo.Top    := 5,

oMemo.Left   := 185,

SendtoBack(oMemo),

AssignEvent(oBtnFront, 'OnClick', 'DoShow'),

AssignEvent(oBtnBack, 'OnClick', 'DoHide'),

ShowModal(oForm),

Siehe auch:

BringToFront()

Hide()


SetBeOLEProp()

SetBeOLEProp() – OLE-Objekt Eigenschaft setzen

Beschreibung

Die Funktion setzt den Eigenschaftswert eines OLE-Objektes.

Parameter

oOleObj:O | OLE-Objekt
cPropName:C | Eigenschaftsname
uValue:U | Neuer Eigenschaftswert

Rückgabewert

keiner

Beispiel

| oOleObj |

SetBeOLEProp(oOleObj, 'Width', 500),


SetParent()

SetParent() – Parent setzen

Beschreibung

Die Funktion setzt für das Control-Objekt ein neues Partent-Objekt.

Parameter

aControl:O | Control-Objekt
aNewParent:O | neues Parent-Objekt

Rückgabewert

keiner

Beispiel

| oParent, oForm, oPanel, oPanel2, oLabel |

oForm   := CreateObject('TForm'),

oPanel  := CreateObject('TBePanel', 'Panel', oForm),

oPanel2 := CreateObject('TBePanel', 'Panel2', oForm),

oLabel  := CreateObject('TLabel', 'Label', oForm, oPanel),

oParent := GetParent(oLabel),

WriteLn(oParent.name),

SetParent(oLabel, oPanel2),

oParent := GetParent(oLabel),

WriteLn(oParent.name),

DestroyObject(oForm),

Siehe auch:

GetParent()

GetParentForm()


Show()

Show() – Objekt anzeigen

Beschreibung

Die Funktion blendet ein Control ein. Dazu wird die Eigenschaft Visible auf true gesetzt. Ein Objekt kann mit Hilfe von Hide() bzw Visible = false ausgeblendet werden.

Parameter

aFormObject:O

Objekt, welches angezeigt werden soll

Rückgabewert

keiner

Beispiel

| oForm, oBtnShow, oBtnHide, oLabel |

function DoHide()

   Hide(oLabel),

   oBtnHide.enabled := false,

   oBtnShow.enabled := true,

end,

function DoShow()

   Show(oLabel),

   oBtnHide.enabled := true,

   oBtnShow.enabled := false,

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 366,

oForm.Height      := 120,

oForm.Caption     := 'Hide() und Show()',

oForm.Position    := poScreenCenter,

oBtnShow         := CreateObject('TButton', 'BtnShow', oForm, oForm),

oBtnShow.Width   := 150,

oBtnShow.Height  := 20,

oBtnShow.Caption := '

oBtnShow.Top     := 10,

oBtnShow.Left    := 10,

oBtnShow.enabled := false,

oBtnHide         := CreateObject('TButton', 'BtnHide', oForm, oForm),

oBtnHide.Width   := 150,

oBtnHide.Height  := 20,

oBtnHide.Caption := '

oBtnHide.Top     := 10,

oBtnHide.Left    := 190,

oLabel         := CreateObject('TLabel', 'Label', oForm, oForm),

oLabel.Width   := 150,

oLabel.Height  := 20,

oLabel.Caption := 'Mich kann man verstecken und wieder anzeigen!',

oLabel.Top     := 60,

oLabel.Left    := 60,

AssignEvent(oBtnShow, 'OnClick', 'DoShow'),

AssignEvent(oBtnHide, 'OnClick', 'DoHide'),

ShowModal(oForm),

Siehe auch:

CloseForm()

ModalResult()

ShowModal()


ShowModal()

ShowModal() – Fenster modal anzeigen

Beschreibung

Die Funktion zeigt ein Fenster modal an. Das heißt, das Fenster wird in dem Vordergrund von BE erzeugt und solange es nicht beendet wird kann nur in diesem Fenster gearbeitet werden. Wird das Fenster geschlossen, liefert es einen numerischen Wert zurück, der der Eigenschaft ModalResult entspricht. Diese Eigenschaft kann mit der Funktion ModalResult() gesetzt werden.

Parameter

aFormObject:O

Form-Objekt, welches angezeigt werden soll

Rückgabewert

Numerisch - Modales Ergebnis (kann über ModalResult() zugewiesen werden). Standardmäßig: mrNone

Beispiel

| oForm, oBtnC, oEdit |

function DoOnBtnCClick( sender )

   ModalResult(oForm, 1),

end,

oForm             := CreateObject('TForm'),

oForm.BorderStyle := bsSingle,

oForm.Width       := 200,

oForm.Height      := 400,

oForm.Name        := 'Form',

oForm.Caption     := 'CreateObject-Test',

oForm.Position    := poScreenCenter,

oBtnC         := CreateObject('TButton', 'BtnC', oform, oForm),

oBtnC.Width   := 150,

oBtnC.Height  := 20,

oBtnC.Caption := '

oBtnC.Top     := 20,

oBtnC.Left    := 20,

oEdit      := CreateObject('TBeEdit', 'Edit', oBtnC, oForm),

oEdit.Top  := 100,

oEdit.Left := 20,

oEdit.Text := 'Hello World',

AssignEvent(oBtnC, 'OnClick', 'DoOnBtnCClick'),

if ShowModal(oForm) = 1 then

   Meld('Der Rückgabewert des Formulares ist 1'),

endif,

Siehe auch:

ModalResult()

Show()


Abort()

Abort() – Programmabbruch

Beschreibung

Die Funktion erzeugt einen künstlichen Programmfehler, der die Ausführung eines Codeblocks abbricht.

Falls ein solcher Fehler nicht durch eine Fehlerauffangroutine abgefangen wird, kann es sein, dass der Fehler sich bis ins Protokoll durchschlägt. Da aber nicht immer eine Fehlerauffangroutine sinnvoll ist, kann die Protokollierung von Fehlern durch den Parameter aNoRecording:L beeinflusst werden.

Parameter

aNoRecording:L

Fehler wird nicht protokolliert; default = false

Rückgabewert

keiner

Beispiel

WriteLn("Ausgabe 1"),

Abort(true),

WriteLn("Ausgabe 2"),

Siehe auch:

SetError()


AssignBlockEvent()

AssignBlockEvent() – Ereignis festlegen

Beschreibung

Die Funktion legt ein Ereignis für den aktuellen CodeBlock fest. Jedes Mal, wenn das angegebene Ereignis eintrifft, wird die in aFuncName übergebene Funktion ausgeführt.

Parameter

aPropName:C | Eventfunktionsname
aFuncName:C | Funktionsname

Rückgabewert

Objekt

Beispiel

// < Im Maskeneditor >

function DoBeforeDestroy(sender)

   Meld('Programmcode wurde zerstört'),

end,

AssignBlockEvent("OnDestroy", "DoBeforeDestroy"),

Siehe auch:

AssignEvent()


BeCallStack()

BeCallStack() - Ausgabe Delphi-Callstack

Beschreibung

Die Funktion ermittelt den aktuellen Delphi-Callstack (aktueller Funktionsaufrufbaum) an der aktuellen Programmstelle.

Parameter

keine Parameter erwartet

Rückgabewert

Text

Beispiel

BeCallStack()

Kontakt zum Support | www.dontenwill.de


BeLogError()

BeLogError() - Schreiben BE-Fehlerprotokoll veranlassen

Beschreibung

Die Funktion veranlasst das Schreiben eines BE-Fehlerprotokolls inkl. Delphi-Callstack an der aktuellen Programmstelle.

Parameter

cErrorText:C

eigener Fehlertext

Rückgabewert

Text

Beispiel

| cRes |

cRes := '',

if DAB410:RUE_PROD < 0 then

   cRes := ArrToStr(DAB410.RecAsArray),

   cRes := StrTran(cRes, '},{', '},' + crlf + '{'),

   BeLogError('DAB410:RUE_PROD < 0: ' + crlf + cRes),

endif,


Call()

Call() – CodeBlock-Programm aufrufen

Beschreibung

Die Funktion ruft ein CodeBlock-Programm mit Parametern auf.

Es lassen sich nur freigegebene CodeBlock-Programme aufrufen, Call() startet immer nur die aktive Version eines Programmes. Die Funktion prüft das Ausführungsrecht des Programmes.

Falls das aufgerufene Programm Werte übernehmen soll, müssen diese in der Reihenfolge übergeben werden, wie sie im Deklarationsteil mittels P1 bis Pn zugewiesen sind. Überzählige Parameter werden ignoriert, fehlende Parameter werden mit dem Defaultwert der Deklaration initialisiert.

Parameter

aProg:U | Name des Programmes. Der Programmname muss den kompletten Pfad enthalten.
aParam:U,... | Übergabe von Parametern; default = null()

Rückgabewert

Undefiniert - Rückgabewert des aufgerufenen Programms

Beispiel

// < Programm 'Test-Prog' anlegen und freigeben >

| p1:P1 := false, p2:P2 := false, p3:P3 := false, p4:P4 := 'Parameter 4' |

WriteLn(p1),

WriteLn(p2),

WriteLn(p3),

WriteLn(p4),

// < Neues Programm anlegen >

Call('Test-Prog', 'Parameter1', 5, true),

Siehe auch:

CallResident()


CallbackInfo()

CallbackInfo() – Callback-Objekt für Rückfrage-Funktionen

Beschreibung

CallbackInfo erzeugt ein Callback-Objekt, mit dem Funktionsaufrufe als Parameter übergeben werden können.

Hinweis

Callback-Funktionen müssen formal folgenden Funktionskopf aufweisen: function AnyCallbackFunc(oCallbackInfo).

Der Callback-Funktion wird das Callback-Objekt als Parameter übergeben. Die Callback-Funktion muss einen Wert (wie unter Execute beschrieben) als Result ausgeben, der der Ausführung des Dialogfelds entspricht.

Wird mrNone zurückgegeben, erscheint ein Dialog entsprechend der Eigenschaften des Callback-Objekts. Jeder andere Rückgabewert unterdrückt den Dialog. Instanzen von TCbCallbackInfo werden vom Codeblock verwaltet. Die Verwendung von DestroyObject ist optional.

Derzeit nutzt die Funktion 'ProdOrdFinish()' einen Parameter diesen Typs.

Parameter

cFuncName:C

Name der Funktion, die über das Callback-Objekt aufgerufen werden soll. Die Funktion muss existieren.

Rückgabewert

Objekt vom Typ TCbCallbackInfo.

Eigenschaften von TCbCallbackInfo:

MessageID: wird vom Programm gesetzt, falls in einer Funktion verschiedene Rückfragen vorkommen

MsgText: Text der Meldung

DlgType: Dialogfeldtyp (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom)

Buttons: Schalter, die angezeigt werden sollen (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry,

mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp)

Result: Während der Callback-Funktion:Vorgabewert für Result, sonst Ergebnis des letzten Aufrufs

der Funktion

Execute: Startet die Callback-Funktion und liefert das Ergebnis der Callback-Funktion bzw. des Dialoges

(mrNone, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrYes, mrNo)

Beispiel

| oCallback |

function MyCallbackFunction(oCallback:O)

  WriteLn('"CallbackFunction" wurde aufgerufen mit MessageID: ' + Str(oCallback.MessageID)),

  case oCallback.MessageID

    of 1 :: Result := mrNo,

    of 2 :: Result := mrNone,

  endcase,

end,

oCallback:= CallbackInfo('MyCallbackFunction'),

StartSeq,

   oCallback.DlgType := mtConfirmation,

   oCallback.Buttons := _OR(mbCancel, mbRetry),

   oCallback.MsgText := 'Der Zugriff auf die Datei war nicht möglich!',

   oCallback.MessageID := 1,

   oCallback.Execute,        // erster Aufruf

   writeln('Antwort der Funktion: ' + Str(oCallback.Result)),

   oCallback.MessageID := 2,

   oCallback.Execute,        // zweiter Aufruf

   writeln('Antwort der Funktion: ' + Str(oCallback.Result)),

Always,

  DestroyObject(oCallback),

StopSeq,


CallPersist()

CallPersist() – CodeBlock-Programm persistent aufrufen

Beschreibung

Die Funktion dient dem Aufruf eines CodeBlock-Programms, dass als eigene Instanz persistent geladen bleibt und sich nach Ende des Programms selber freigibt. CallPersist() unterscheidet sich von einem "normalen" Call() dadurch, dass im Programm mit LoadForm() oder CreateObject( ..., Persist = True) erstellte Objekte und vor allem Events am Ende des Programmes nicht automatisch freigegeben (sprich: gelöscht) werden, sondern dass das Programm persistent im Speicher bleibt. CallPersist() kann z.B. verwendet werden, um ein eigenes MDI-Child-Fenster persistent zu erstellen. Sobald alle zum Programm gehörigen persistenten Objekte freigegeben wurden, gibt sich das Programm selber frei (spich: Löscht sich selber aus dem Speicher). Wird das Programm explizit freigegeben (z.B. durch Drücken des "Programmausführung abbrechen"-Buttons in der Programmierung) werden alle persistenten Objekte freigegeben.

Parameter

uProg:U | Programm-ID (Nr. oder Name)
aParam1:U | Zu übergebende Parameter; default = null()

Rückgabewert

Undefined - Rückgabewert des aufgerufenen Programms

Beispiel

// < Menüpunkt in einem Indiviudal - Haupt-Menü >

| oForm |

if Empty(oForm) then

   oForm := CallPersist('IndiMask\MDITest', GetOwner(Self)),

else

   BringToFront(oForm),

endif,

oForm


CallResident()

CallResident() – CodeBlock-Programm einmalig aufrufen

Beschreibung

Die Funktion ist im Prinzip identisch mit Call(). Bei CallResident() wird das Programm jedoch nur einmal geladen, bleibt dann für jeden weiteren Aufruf im Hauptspeicher und muss so nicht erneut geladen werden. Hierbei ist aber darauf zu achten, dass das auszuführende Programm 100% fehlerfrei sein sollte, da sonst bei einem Fehler die ganze Applikation neugestartet werden muss, um das Programm wieder neu zu laden.

Parameter

aProg:C | Name des Programms, das ausgeführt werden soll
aParam1:U,… | Übergabe von Parametern; default = null()

Rückgabewert

Undefiniert - Rückgabewert des aufgerufenen Programms

Beispiel

// < Programm 'Test-Prog' anlegen und freigeben >

| p1:P1 := false, p2:P2 := false, p3:P3 := false, p4:P4 := 'Parameter 4' |

WriteLn(p1),

WriteLn(p2),

WriteLn(p3),

WriteLn(p4),

// < Neues Programm anlegen >

CallResident('Test-Prog', 'Parameter1', 5, true),

Siehe auch:

Call()

Cancel()


CallStack()

CallStack() – Programmliste aller Aufrufe

Beschreibung

Die Funktion liefert die Liste der übergeordneten Programme als Array. Das letzte Element der Liste ist der Name des aufrufenden Programms. In Codeblöcken, die kein Bestandteil der Programm-Library sind (dazu zählen z.B. alle Blöcke des Reportgenerators, der Rechteverwaltung etc.) ist der Rückgabewert im Rahmen der obersten Programmebene leer.

Parameter

keine Parameter erwartet

Rückgabewert

Array

Beispiel

//< Programm 'Prog1' anlegen und freigeben >

| aStack, i |

aStack := CallStack(),

if !Empty(aStack) then

   WriteLn(''),

   Writeln('Callstack'),

   for i := 1 to ALen(aStack) do

      WriteLn(aStack[i]),

   end,

endif,

//< Programm 'Prog2' anlegen und freigeben >

Call('Prog1'),


Cancel()

Cancel() – Residentes Programm abbrechen

Beschreibung

Die Funktion entfernt ein Programm aus der Liste der residenten Programme. Diese Funktion kann dazu verwendet werden um Programme, die mit CallResident() aufgerufen wurden, aus dem Hauptspeicher zu entfernen. Dies ist notwendig falls ein residentes Programm einen Fehler verursacht. Wird Cancel() nicht ausgeführt, würde das residente Programm nicht mehr ausgeführt werden und könnte erst wieder mit einem Neustart der ganzen Applikation gestartet werden.

Parameter

aProg:U

Programm

Rückgabewert

Logisch / Boolean - Abbruch erfolgreich

Beispiel

CallResident('Test-Prog'),

Cancel('Test-Prog')

Siehe auch:

CallResident()


Compile()

Compile() – Precompilierung eines CodeBlocks

Beschreibung

Die Funktion precompiliert das übergebene CodeBlock-Programm. Es wird ein TEvalBlock für die Weiterverwendung in der Funktion Eval() erzeugt.

Parameter

aFunction:C

Kompletter Text eines CodeBlock-Programms

Rückgabewert

Objekt - TEvalBlock-Objekt. Bei Fehler Exception

Beispiel

| CB |

CB := '| String |' + 'String := ''Hello'',' + 'Meld(String),',

Eval(Compile(CB)),

Siehe auch:

Eval()


CreateClassID()

CreateClassID() – Neue GUID erzeugen

Beschreibung

Die Funktion CreateClassID generiert eine neue GUID und gibt diese als String zurück.

Parameter

keine Parameter erwartet

Rückgabewert

Alphanumerisch - Neue GUID

Beispiel

CreateClassID()

Kontakt zum Support | www.dontenwill.de


DbIsIndiField()

DbIsIndiField() - Überprüfen ob ein Feld ein Individual-Feld ist

Beschreibung

Die Funktion prüft anhand eines übergebenen Feld-Namens und einer Tabelle, ob es sich dabei um ein

Individual-Feld handelt. Trifft dies zu, so wird "True" zurückgegeben.

Parameter

cFieldName:C | Name des zu prüfenden Feldes
oTable:O | Tabelle, in der sich das Feld befindet

Rückgabewert

Logisch - Ist Individual-Feld

Beispiel

| oDAB065, cText |

cText   := '',

oDAB065 := DBOpen(waDAB065),

cText := iif(DbIsIndiField('MEMO', oDAB065 ),

             'Das Feld "MEMO" ist ein Individual-Feld',

             'Das Feld "MEMO" ist ein Standard-Feld'),

writeln(cText), // Ausgabe ist ein Standard-Feld

cText := iif(DbIsIndiField('X_ANUMMER', oDAB065 ), // Zum Ausführen durch echtes Individualfeld tauschen

             'Das Feld "X_ANUMMER" ist ein Individual-Feld',

             'Das Feld "X_ANUMMER" ist ein Standard-Feld'),

writeln(cText), // Ausgabe ist ein Individual-Feld

Siehe auch:

DbIsIndiIndexName()


DbIsIndiIndexName()

DbIsIndiIndexName() - Überprüfen ob ein Index ein Individual-Index ist

Beschreibung

Die Funktion prüft anhand eines übergebenen Index-Namens und einer Tabelle, ob es sich dabei um ein

Individual-Index handelt. Trifft dies zu, so wird "True" zurückgegeben.

Parameter

cIndexName:C | Name des Index
oTable:O | Tabelle die den Index enthält

Rückgabewert

Logisch - Ist Individual-Index

Beispiel

| oDAB065, cText |

cText   := '',

oDAB065 := DBOpen(waDAB065),

cText := iif(DbIsIndiIndexName('DAB06B', oDAB065),

             'Der Index DAB06B ist ein Individual-Index',

             'Der Index DAB06B ist ein Standard-Index'),

writeln(cText), // Ausgabe ist ein Standard-Index

cText := iif(DbIsIndiIndexName('I_X_ANUMMER', oDAB065), // Zum Ausführen durch eigenen Individual-Index-Namen ersetzen

             'Der Index I_X_ANUMMER ist ein Individual-Index',

             'Der Index I_X_ANUMMER ist ein Standard-Index'),

writeln(cText), // Ausgabe ist ein Individual-Index

Siehe auch:

DbIsIndiField()


EditorMode()

EditorMode() – Überprüfung auf Editor

Beschreibung

Mit dieser Funktion kann im Codeblock festgestellt werden, ob das Programm im Programmeditor ausgeführt wird, oder als echter Programmaufruf über die Programmauswahl oder via Call() gestartet wurde.

Parameter

keine Parameter erwartet

Rückgabewert

Logisch / Boolean - Aufrufmodus

true - im Programmeditor aufgerufen

false - als echter Programmaufruf

Beispiel

if EditorMode() then

   Meld('Aufruf im Programmeditor!')

else

   Meld('Aufruf als echtes Programm!')

endif,


Eval()

Eval() – Ausführung eines Codeblocks

Beschreibung

Die Funktion führt einen precompilierten CodeBlock-Text ("TEvalBlock"-Objekt) aus (geliefert von der Funktion Compile()), oder führt einen direkt übergebenen CodeBlock-Text aus. Bei einem Fehler wird eine Exception ausgeworfen.

Wird im ersten Parameter ein Codeblock (Character) übergeben, so wird der auszuwertende Ausdruck optimiert, berechnet und sofort wieder verworfen. Dies führt bei längeren Funktionen, die mehrfach aufgerufen werden, zu einer niedrigen Ablaufgeschwindigkeit. Wird im ersten Parameter ein Objekt vom Typ 'TEvalBlock' (zovor mit Complile() erzeugt) übergeben, so bliebt die optimierte Funktion erhalten und Eval übergibt nur noch die Parameter an den Block.

Das Objekt "TEvalBlock" besitzt die Eigenschaft 'FuncText', die jederzeit änderbar ist. Eine neue Zuweisung erzeugt eine neue Funktionalität. Ein Fehler beim Erzeugen des Objektes oder bei der Änderung von 'FuncText' löst eine Exception aus, die im Rahmen einer Fehlerauffangroutine behandelt werden kann. Hier kann die Fehlernummer über die Eigenschaft 'ErrCode' ausgewertet werden.

Parameter

aBlock:U | Vollständiger CodeBlock-Text oder TEvalBlock-Objekt
aLocalParam:U | Parameter; default = null()

Rückgabewert

Undefiniert - Rückgabewert des CodeBlock-Textes

Beispiel

| aBlock, aFunction, i, aMax, oDab000:DB := 'waDAB000, 1' |

function MyBlockEval(aBlock)

   ShowMessage(Eval(aBlock, Time())),

end,

aFunction := '| oDab000, aIntro, aResult | '                         + crlf +

             '   aResult := aIntro + '                               + crlf +

             '              AllTrim(AllTrim(oDab000:Name1) + " " + ' + crlf +

             '              AllTrim(oDab000:Name2)), '               + crlf +

             '   DbSkip(1, oDab000), '                               + crlf +

             '   aResult',

aMax := 10,

// Ausführung eines nicht vorkompilierten Blocks mittels "Eval()"

DbGoTop(oDab000),

for i := 1 to aMax do

   WriteLn(Eval(aFunction, oDab000, 'Name: ')),

next,

// Ausführung eines vorkompilierten Blocks

// erzeugt ein TEvalBlock-Objekt

aBlock := Compile(aFunction),

if not Empty(aBlock) then

   for i := 1 to aMax do

      WriteLn(Eval(aBlock, oDab000, 'Name: ')),

   next,

   // eine neue Funktion zuweisen

   aBlock.FuncText := '"Nur noch Text ..."',

   WriteLn(Eval(aBlock)),

   // einen Fehler abfangen

   startseq,

      // A und B sind nicht definiert

      aBlock.FuncText := 'A + B',

      WriteLn('Dies wird nie ausgeführt!'),

   onerror

      WriteLn('Fehler im Codeblock: Code = ' + Str(aBlock.ErrCode)),

   stopseq,

   aBlock.FuncText := '| t | ' + crlf +

                      ' t + " - Ende"',

   // Übergabe als Parameter an Funktionen

   MyBlockEval(aBlock),

   DestroyObject(aBlock),

endif,

Siehe auch:

Compile()


ExName()

ExName() – Alle Feld-Namen aus einem CodeBlock-Source extrahieren

Beschreibung

Funktion, um alle Feld-Namen aus einem CodeBlock-Source extrahieren

Parameter

aProgText:C | CodeBlock-Source
aWorkAreas:U | WorkAreas oder Tabellen-Objekte, deren Feld-Namen extrahiert werden sollen
aExArray:A | wird nicht verwendet

Rückgabewert

Array


GetEnv()

GetEnv() – Globale Variable

Beschreibung

Die Funktion gibt den Wert einer globalen Variablen zurück. Der Wert kann mit SetEnv() gesetzt werden.

Parameter

aVarName:C

Variablen-Name

Rückgabewert

Alphanumerisch - Globale Variable

Beispiel

SetEnv('Variable', '1'),

WriteLn(GetEnv('Variable')),

Siehe auch:

SetEnv()


GetErrorCode()

GetErrorCode() – Fehlernummer

Beschreibung

Die Funktion gibt aErrorCode aus der Funktion SetError() zurück. Falls SetError() ohne aErrorCode oder gar nicht aufgerufen wurde, liefert GetErrorCode den Wert 0.

Parameter

keine Parameter erwartet

Rückgabewert

Numerisch - Error-Code

Beispiel

startseq,

   WriteLn('Fehlerauffangroutine gestartet!'),

   SetError('Test-Fehlertext', 1),

onerror,

   WriteLn('------'),

   WriteLn('Zeile des Testfehlers: ' + Str(GetErrorLine())),

   WriteLn('Nummer des Testfehlers: ' + Str(GetErrorCode())),

   WriteLn('Beschreibung des Testfehlers: ' + GetErrorText()),

   WriteLn('------'),

stopseq,

Siehe auch:

GetErrorLine()

GetErrorObj()

GetErrorText()

SetError()

SetErrorIf()


GetErrorLine()

GetErrorLine() – Fehlerzeile

Beschreibung

Die Funktion liefert die Zeilen-Nummer, in der der Fehler ausgelöst wurde. Diese Funktion liefert nur im Debug-Modus einen gültigen Wert, ansonsten 0.

Parameter

keine Parameter erwartet

Rückgabewert

Numerisch - Zeile des Fehlers

Beispiel

startseq,

   WriteLn('Fehlerauffangroutine gestartet!'),

   SetError('Test-Fehlertext', 1),

onerror,

   WriteLn('------'),

   WriteLn('Zeile des Testfehlers: ' + Str(GetErrorLine())),

   WriteLn('Nummer des Testfehlers: ' + Str(GetErrorCode())),

   WriteLn('Beschreibung des Testfehlers: ' + GetErrorText()),

   WriteLn('------'),

stopseq,

Siehe auch:

GetErrorCode()

GetErrorObj()

GetErrorText()

SetError()

SetErrorIf()


GetErrorObj()

GetErrorObj() – Fehlerobjekt

Beschreibung

Diese Funktion dient der Rückgabe des letzten Fehler-Objektes, welcher innerhalb einer "OnError"-Behandlung einer "StartSeq", "OnError" oder "StopSeq"-Routine aufgetreten ist. Diese Funktion kann ausschließlich zwischen "OnError" und "StopSeq" ausgeführt werden.

Parameter

keine Parameter erwartet

Rückgabewert

Objekt - Fehlerobjekt

Beispiel

| x |

x := 10,

startseq,

   x := x / 0

onerror,

   if not(Empty(GetErrorObj())) then

      Meld(classname(GetErrorObj())),

   endif,

stopseq,

Siehe auch:

GetErrorCode()

GetErrorLine()

GetErrorText()

SetError()

SetErrorIf()


GetErrorText()

GetErrorText() – Fehlertext

Beschreibung

Diese Funktion dient der Rückgabe des letzten Fehler-Textes, welcher innerhalb einer "OnError"-Behandlung einer "StartSeq", "OnError" oder "StopSeq"-Rountine aufgetreten ist. Diese Funktion kann auch noch nach "StopSeq" ausgeführt werden.

Parameter

keine Parameter erwartet

Rückgabewert

Alphanumerisch - Fehlertext

Beispiel

startseq,

   WriteLn('Fehlerauffangroutine gestartet!'),

   SetError('Test-Fehlertext', 1),

onerror,

   WriteLn('------'),

   WriteLn('Zeile des Testfehlers: ' + Str(GetErrorLine())),

   WriteLn('Nummer des Testfehlers: ' + Str(GetErrorCode())),

   WriteLn('Beschreibung des Testfehlers: ' + GetErrorText()),

   WriteLn('------'),

stopseq,

Siehe auch:

GetErrorCode()

GetErrorLine()

GetErrorObj()

SetError()

SetErrorIf()


If()

If() – If-Verzweigung

Beschreibung

Diese Funktion ermöglicht die Formulierung einer 'wenn -> dann' Bedingung. Wenn Bedingung zutrifft, dann wird Ausdruck1 ausgeführt, ansonsten wird Ausdruck2 ausgeführt.

Parameter

aCondition:L | Bedingung
aResultForTrue:U | Wenn Bedingung erfüllt, dann …
aResultForFalse:U | Wenn Bedingung nicht erfüllt, dann

Rückgabewert

Keiner

Beispiel

| x |

x := 5,

if(x=5, Meld('x = 5'), Meld('x <> 5')),


IIf()

IIf() – IIf-Verzweigung

Beschreibung

Diese Funktion ermöglicht die Formulierung einer 'wenn -> dann' Bedingung. Wenn Bedingung zutrifft, dann wird Ausdruck1 ausgeführt, ansonsten wird Ausdruck2 ausgeführt:

IIf( < boolscher Ausdruck >, < Bezeichner | Konstante | Funktionsaufruf >, < Bezeichner | Konstante | Funktionsaufruf > )

Definition:

< Funktionsaufruf > = < benannte Funktion > | < anonyme Funktion >

< anonyme Funktion > = < ( > + < Ausdruck > + < ) >

< Ausdruck > = < boolscher Ausdruck > | < mathematischer Ausdruck >

Bezeichner, Konstante und Funktionsaufruf darf nicht mit Ausdruck verwechselt werden ! Alle übrigen Varianten sind nicht definiert !

Parameter

aCondition:L | Bedingung:
aResultForTrue:U | Wenn Bedingung erfüllt, dann...
aResultForFalse:U | Wenn Bedingung nicht erfüllt, dann...

Rückgabewert

Keiner

Beispiel

| a, b, c|

IIf(a = b, (c := 'Wert 1'), (c := 'Wert 2'))


LoadForm()

LoadForm() – Individual-Formular laden

Beschreibung

Funktion zum Laden und Instantiieren eines Individual-Formulars ("F12-Formular"), welches einem Indi.Prog. zugewiesen wurde.

Hinweis

Mit Zuweisung und Gestaltung eines Formulars eines Indi.Progs. entsteht eine direkte Verbindung von Formular und Programm, so dass i.d.R. das Laden des Formulars mittels LoadForm() im selben Programm erfolgt, dem das Formular zugewiesen wurde.

Prinzipiell ist aber ein unabhängiger Aufruf in einem anderen Kontext möglich.

Parameter

uID:U | ID des Formulars
oOwner:O | Owner des zu erstellenden Formulars

Rückgabewert

Formular-Objekt, Klasse wird in der Formular-Zuweisung in der Programmier-Umgebung angegeben

Beispiel

//******************************************************************************

//******************************************************************************

// Beispiel eines individuell designten Formulars (MDI-Child Fenster)

//******************************************************************************

// Ablauf:

//******************************************************************************

// 1. Neues Indi.Prog. erstellen

// 2. Menü "Extras" / "Formular zuweisen"

//    -> Neue ID vergeben und Klasse des Formular-Objektes definieren

//       (sollte i.d.R. "TFormEx" sein)

// 3. Menü "Extras" / "Formular-Designer anzeigen (F12)"

//    -> Gestaltung des Formulars nach den üblichen Regeln für höhere

//       Programmiersprachen

//    -> Mit F12 / Alt+F12 kann zwischen Editor und Designer gewechselt werden

//    -> Mit einem Doppel-Klick auf ein Ereignis im "Objektinspektor"

//       wird ein entsprechendes Event-Handle automatisch erstellt

// 4. (optional) Menü "Extras" / "Formular-Deklaration einfügen"

//    -> Fügt die Deklaration zum Laden des Formulars, sowie eine (optionale)

//       Definition für sämliche Controls in den Source ein

// 5. Abschließende Statements z.B. "Show(oForm)" / "ShowModal(oForm)"

//    zur Anzeige des Formulars einfügen

// 6. Die Rückgabe des Programms sollte immer das Formular-Objekt sein, damit

//    das Programm z.B. per CallPersist() aufgerufen und das Formular weiter

//    verwendet werden kann

//******************************************************************************

// Das u.g. Bespiel-Formular kann später jederzeit über ein CallPersist()

// aufgerufen werden. Indi.Prog:

| oOwner:P1, oForm |

//******************************************************************************

// FormExClose - Formular freigeben

// Wichtig: sonst wird ein MDI-Formular nicht freigegeben, sonden nur

//          auf nicht-sichtbar gesetzt.

//******************************************************************************

function FormExClose(Sender, CloseAction)

   CloseAction := 2,   // entspricht "caFree"

end,

//******************************************************************************

// Hauptprogramm

//******************************************************************************

if Empty(oOwner) then

   oOwner := Application

endif,

startseq,

   oForm := LoadForm("@MDI1", oOwner),

   if ClassOf(oOwner, "TForm") and oOwner.FormStyle = 2 then

      oForm.FormStyle := 1,   // MDI-Child, aber nur wenn Owner = MDI-Parent

   endif,

onerror

   DestroyObject(oForm),

   Meld(GetErrorText()),

stopseq,

Show(oForm),

oForm

Siehe auch:

Show()

ShowModal()


LockDesktop()

LockDesktop() – Applikation sperren und Desktop-Loader anzeigen

Beschreibung

Die Funktion sperrt die Applikation und zeigt den Desktop-Loader an.

Parameter

cCaption:C

Text der im Desktop-Loader angezeigt werden soll

Rückgabewert

Keiner

Beispiel

| oForm, oBtn, aNeedUnlock |

function OnActivate()

   if aNeedUnlock then

      UnlockDesktop(),

      aNeedUnlock := false,

   endif,

end,

function CreateForm()

   oForm             := CreateObject('TFormEx', 'TestForm'),

   oForm.WindowState := 0,

   AssignEvent(oForm, 'OnActivate', 'OnActivate'),

   oBtn              := CreateObject('TBitBtn', 'btn', oForm, oForm),

   oBtn.Kind         := 6,

   oBtn.Top          := 10,

   oBtn.Left         := 10,

   oBtn.Width        := 100,

end,

LockDesktop('Test Programm wird erzeugt...'),

aNeedUnlock := true,

startseq,

   CreateForm(),

   Sleep(1000),

   LockDesktopUpdate('Test Programm wird geladen...'),

   Sleep(1000),

   ShowModal(oForm),

always

   if aNeedUnlock then

      UnlockDesktop(),

   endif,

stopseq,

Siehe auch:

LockDesktopUpdate()

UnlockDesktop()


LockDesktopUpdate()

LockDesktopUpdate() – Text im Desktop-Loader ändern

Beschreibung

Die Funktion aktualisiert den Text, der im bereits angezeigten Desktop-Loader erscheint.

Parameter

cCaption:C

Text der im Desktop-Loader angezeigt werden soll

Rückgabewert

Keiner

Beispiel

siehe LockDesktop()

Siehe auch:

LockDesktop()

UnlockDesktop()


ProcessMsg()

ProcessMsg() – Verarbeiten von Prozessen

Beschreibung

Die Funktion lässt business express die Möglichkeit weiterzuarbeiten, auch wenn es auf ein Ereignis warten müsste. Alle Prozesse in der Nachrichten-Warteschlange werden verarbeitet.

Parameter

keine Parameter erwartet

Rückgabewert

keiner

Beispiel

| aLastTime |

WriteLn('Starte Statistik'),

StatExec(1, .F.),

aLastTime := Time(),

while StatActive(1) do

   // erlaubt das Weiterarbeiten, obwohl primär die Schleife ausgeführt wird

   ProcessMsg(),

   if Right(aLastTime, 2) <> Right(Time(), 2) then

      aLastTime := Time(),

      WriteLn(aLastTime),

   endif,

end,


ProgName()

ProgName() – Programmname

Beschreibung

Die Funktion gibt den Namen des aktuellen Programmes wieder.

Parameter

keine Parameter erwartet

Rückgabewert

Alphanumerisch - Programmname

Beispiel

ProgName()

Kontakt zum Support | www.dontenwill.de


ProgressBarHide()

ProgressBarHide() – Fortschrittsanzeige verstecken

Beschreibung

Die Funktion lässt die durch ProgressBarShow() aufgerufene Anzeige wieder verschwinden.

Parameter

keine Parameter erwartet

Rückgabewert

Keiner

Beispiel

| oDab000:DB := 'waDAB000, 1', nY:N := 0, nProg |

nProg := Dim(2),

DBFilter("KDNR<=250000", oDab000),

DBGoBottom(oDab000),

nProg[1] := oDab000:REC_NO,

DBGoTop(oDab000),

nProg[2] := oDab000:REC_NO,

startseq,

   ProgressBarShow("", "Berechnung"),

   while NOT EoF(oDab000) do

      nY++,

      ProgressBarUpdate((oDab000:REC_NO-nProg[2]) / (nProg[1]- nProg[2]) * 100,

                         Str(nY), true),

      DBSkip(1, oDab000),

   end,

   ProgressBarHide(),

   Meld('Es wurden ' + Str(nY) + ' Datensätze berechnet')

onerror,

   ProgressBarHide(),

   Meld('Fehler beim Berechnen!'),

stopseq,

Siehe auch:

ProgressBarShow()

ProgressBarUpdate()


ProgressBarShow()

ProgressBarShow() – Fortschrittsanzeige anzeigen

Beschreibung

Die Funktion erzeugt eine Fortschrittsanzeige.

Hinweis

Es muss sichergestellt sein, dass

a) jedem ProgressBarShow() später ein ProgressBarHide() folgt (Schutzblock verwenden -> StartSeq, StopSeq)

b) eine Exception, die durch ein ProgressBarUpdate() ausgelöst wird, durch eine entsprechende Fehlerbehandlung sauber abgefangen wird!

Parameter

aCaption:C | Fensterbezeichnung
aMainCaption:C | Beschreibung im Fenster
aShowBar:L | Balken anzeigen; default = true true Anzeige des Fortschrittbalkens false Ausblendung des Fortschrittbalkens

Rückgabewert

keiner

Beispiel

| oDab000:DB := 'waDAB000, 1', nY:N := 0, nProg |

nProg := Dim(2),

DBFilter("KDNR<=250000", oDab000),

DBGoBottom(oDab000),

nProg[1] := oDab000:REC_NO,

DBGoTop(oDab000),

nProg[2] := oDab000:REC_NO,

startseq,

   ProgressBarShow("", "Berechnung"),

   while NOT EoF(oDab000) do

      nY++,

      ProgressBarUpdate((oDab000:REC_NO-nProg[2]) / (nProg[1]- nProg[2]) * 100,

                         Str(nY), true),

      DBSkip(1, oDab000),

   end,

   ProgressBarHide(),

   Meld('Es wurden ' + Str(nY) + ' Datensätze berechnet')

onerror,

   ProgressBarHide(),

   Meld('Fehler beim Berechnen!'),

stopseq,

Siehe auch:

ProgressBarHide()

ProgressBarUpdate()


ProgressBarUpdate()

ProgressBarUpdate() – Fortschrittsanzeige aktualisieren

Beschreibung

Die Funktion ermöglicht die Änderung der dargestellten Werte in der aktuell aktiven Fortschrittsanzeige.

Parameter

aPerc:N | Erreichter Prozentanteil von 100; default = 0
aValue:C | Ausgabe im Fenster für jede Berechnung; default = Zeit seit ProgressBarShow()
aExceptOnCancel:L | Except-Modus; default = false true – CancelButton ist aktiv false – CancelButton ist inaktiv und ausgeblendet

Rückgabewert

Keiner

Beispiel

| oDab000:DB := 'waDAB000, 1', nY:N := 0, nProg |

nProg := Dim(2),

DBFilter("KDNR<=250000", oDab000),

DBGoBottom(oDab000),

nProg[1] := oDab000:REC_NO,

DBGoTop(oDab000),

nProg[2] := oDab000:REC_NO,

startseq,

   ProgressBarShow("", "Berechnung"),

   while NOT EoF(oDab000) do

      nY++,

      ProgressBarUpdate((oDab000:REC_NO-nProg[2]) / (nProg[1]- nProg[2]) * 100,

                         Str(nY), true),

      DBSkip(1, oDab000),

   end,

   ProgressBarHide(),

   Meld('Es wurden ' + Str(nY) + ' Datensätze berechnet')

onerror,

   ProgressBarHide(),

   Meld('Fehler beim Berechnen!'),

stopseq,

Siehe auch:

ProgressBarHide()

ProgressBarShow()


Quit()

Quit() – Beenden des Programms

Beschreibung

Die Funktion beendet ohne Nachfrage das komplette Programm und beendet business express.

Parameter

keine Parameter erwartet

Rückgabewert

keiner

Beispiel

Quit()

Kontakt zum Support | www.dontenwill.de


Raise()

Raise() – Beenden des Programms

Beschreibung

Die Funktion löst den letzten Laufzeitfehler erneut aus. Raise() kann irgendwo innerhalb des Programmblocks 'OnError ... StopSeq' stehen, wobei trotzdem die Ausführung dieses Programmblocks fortgesetzt wird. Die erneute Auslösung des Fehlers erfolgt erst beim Erreichen von 'StopSeq'. Nachfolgende Programmteile werden übersprungen, bis entweder eine außen liegende Fehlerauffangroutine den Fehler erneut behandelt, oder das Programmende erreicht ist. Wird Raise() außerhalb von 'OnError ... StopSeq' ausgeführt, ist diese Funktion undefiniert und hat daher keine Funktion.

Parameter

lThroughBlocks:L

True - der Laufzeitfehler wird auch erneut ausgelöst wenn dieser im OnError-Teil z.b. in einer if-Anweisung verschachtelt ist

Default = False - der Laufzeitfehler wird nur erneut ausgelöst wenn sich raise() direkt im OnError-Teil befindet

Rückgabewert

Keiner

Beispiel

| x |

startseq,

   startseq,

      WriteLn('Ausgabe 1: Fehler wird ausgelöst'),

      x := 1 / 0,

      WriteLn('Ausgabe 2: Wird nicht mehr angezeigt!'),

   onerror,

      Raise(),

      WriteLn('Ausgabe 3: Wird angezeigt!'),

   stopseq,

   WriteLn('Ausgabe 4: Wird nicht mehr angezeigt!'),

onerror,

   WriteLn('Ausgabe 5: Wird angezeigt!'),

stopseq,

WriteLn('Ausgabe 6: Wird angezeigt!'),


Run()

Run() – Windows Anwendung starten

Beschreibung

Die Funktion startet eine Windows Anwendung (.exe).

Parameter

aProgName:C | Programm welches gestartet werden soll ggf. mit Pfadangabe. Wird kein Pfad angegeben so wird der Default-Pfad von Windows verwendet = Windows-Hauptordner
aWait:L | Wartemodus; default = true true - business express wartet auf das Ende des Programms false - business express arbeitet weiter

Rückgabewert

Keiner

Beispiel

Run('Notepad.exe', true)


SemaphorEdit()

SemaphorEdit() – Sperre setzen

Beschreibung

Die Funktion dient dem Setzen einer globalen Sperre, die über aID abgefragt werden kann. Die Sperre kann nur von demjenigen User wieder aufgehoben werden, der die Sperre auch gesetzt hat. Funktion wird in BE verwendet, um bspw. Programmblöcke zu sperren, so dass nur immer jeweils ein Benutzer ein Programm verwenden kann. Die Sperre kann mit der Funktion SemaphorPost() wieder aufgehoben werden.

Parameter

aID:C | ID der Sperre (beliebiger alphanumerischer Wert)
aRetry:L | Wiederholen true – setzen der Sperre bei Fehlversuch wiederholen false – nur einmal versuchen Sperre zu setzen
aMsg:L | Fehlermessage true – Fehler ausgeben, wenn Sperre bereits gesetzt ist false – keine Benachrichtigung bei gesetzter Sperre

Rückgabewert

Logisch / Boolean - Sperren erfolgreich

Beispiel

| cID |

cID := 'test',

if SemaphorEdit(cID, false, false) then

   WriteLn('ID ''' + cID + ''' wurde erfolgreich gesperrt'),

   WriteLn('------'),

   WriteLn('Beliebige Anweisungen ausführen'),

   WriteLn('------'),

   SemaphorPost(cID),

   WriteLn('Sperre für ''' + cID + ''' wurde wieder aufgehoben'),

else

   WriteLn('ID ''' + cID + ''' wurde bereits gesperrt'),

endif,

Siehe auch:

SemaphorPost()


SemaphorPost()

SemaphorPost() – Sperre aufheben

Beschreibung

Die Funktion hebt eine Sperre auf, die mit SemaphorEdit() gesetzt wurde.

Parameter

aID:C

ID der Sperre

Rückgabewert

Logisch / Boolean - Sperre aufheben erfolgreich

Beispiel

| cID |

cID := 'test',

if SemaphorEdit(cID, false, false) then

   WriteLn('ID ''' + cID + ''' wurde erfolgreich gesperrt'),

   WriteLn('------'),

   WriteLn('Beliebige Anweisungen ausführen'),

   WriteLn('------'),

   SemaphorPost(cID),

   WriteLn('Sperre für ''' + cID + ''' wurde wieder aufgehoben'),

else

   WriteLn('ID ''' + cID + ''' wurde bereits gesperrt'),

endif,

Siehe auch:

SemaphorEdit()


SetEnv()

SetEnv() – Globale Variable setzen

Beschreibung

Die Funktion setzt eine globale Variable.

Parameter

aVarName:C | Variablen-Name
aVarValue:C | Variablen-Wert

Rückgabewert

Logisch / Boolean - Variable setzen erfolgreich

Beispiel

SetEnv('Variable', '1'),

WriteLn(GetEnv('Variable')),

Siehe auch:

GetEnv()


SetError()

SetError() – Fehler erzeugen

Beschreibung

SetError erzeugt einen Abbruchfehler, der innerhalb einer Fehlerauffangroutine ausgelesen werden kann.

Wird SetError() ausserhalb von StartSeq / StopSeq ausgeführt, bewirkt der erzeugte Fehler den Abbruch der Codeblockausführung, als wäre ein echter Fehler aufgetreten!

Parameter

aErrText:C | Fehlertext (kann mit GetErrorText() ausgelesen werden)
aErrCode:N | Fehlernummer (kann mit GetErrorCode() ausgelesen werden)

Rückgabewert

Keiner

Beispiel

startseq,

   WriteLn('Fehlerauffangroutine gestartet!'),

   SetError('Test-Fehlertext', 1),

onerror,

   WriteLn('------'),

   WriteLn('Zeile des Testfehlers: ' + Str(GetErrorLine())),

   WriteLn('Nummer des Testfehlers: ' + Str(GetErrorCode())),

   WriteLn('Beschreibung des Testfehlers: ' + GetErrorText()),

   WriteLn('------'),

stopseq,

Siehe auch:

Abort()

GetErrorCode()

GetErrorText()

SetErrorIf()


SetErrorIf()

SetErrorIf() – Fehler erzeugen wenn Bedingung erfüllt

Beschreibung

SetErrorIf erzeugt wie SetError einen Abbruchfehler, der innerhalb einer Fehlerauffangroutine ausgelesen werden kann. Im Unterschied zu SetError() kann im ersten Parameter angegeben werden ob der Abbruchfehler erzeugt werden soll oder nicht.

Wird SetErrorIf() ausserhalb von StartSeq / StopSeq ausgeführt, bewirkt der erzeugte Fehler den Abbruch der Codeblockausführung, als wäre ein echter Fehler aufgetreten!

Parameter

aCondition:L | Bedinung ob Abbruchfehler erzeugen werden soll
aErrText:C | Fehlertext (kann mit GetErrorText() ausgelesen werden)
aErrCode:N | Fehlernummer (kann mit GetErrorCode() ausgelesen werden)

Rückgabewert

Keiner

Beispiel

| oForm |

startseq,

   startseq,

      WriteLn('Fehlerauffangroutine gestartet!'),

      if jn('Formular erzeugen?') then

         oForm := CreateObject('TFormEx'),

      endif,

      SetErrorIf(Empty(oForm), 'Test-Fehlertext: Formular nicht vorhanden', 123),

   onerror,

      WriteLn('------'),

      WriteLn('Zeile des Testfehlers: ' + Str(GetErrorLine())),

      WriteLn('Nummer des Testfehlers: ' + Str(GetErrorCode())),

      WriteLn('Beschreibung des Testfehlers: ' + GetErrorText()),

      WriteLn('------'),

   stopseq,

always,

   DestroyObject(oForm),

stopseq,

Siehe auch:

Abort()

GetErrorCode()

GetErrorText()

SetError()


ShellExecute()

ShellExecute() – Shell-Befehl ausführen

Beschreibung

Die Funktion führt einen Befehl als DOS-Kommandozeile aus.

Parameter

aHWNDorFile:U | Handle eines Windows-Fensters oder Files (In der Regel kann 0 übergeben werden)
aOperation:C | Auszuführende Operation; default = 'open'; 'open' - Öffnet aFile; 'print' - aFile drucken; 'explore' - ein in aFile übergebener Ordner wird geöffnet
aFile:C | File, auf das aOperation angewendet wird; default = Leerstring
aParams:C | Liste der Parameter, die der Operation übergeben werden; default = Leerstring
aDir:C | Default Verzeichnis; default = Leerstring
aShowCmd:N | Anzeige des geöffneten Files; default = SW_SHOWNORMAL
aWait:L | Andere Prozesse müssen warten, bis ShellExecute() fertig abgewickelt wurde; default = false

Rückgabewert

Numerisch - Windows-FehlerCode

Beispiel

ShellExecute( , "open", "http://www.dontenwill.de")


ShowErrorLog()

ShowErrorLog() – Fehler-Log anzeigen

Beschreibung

Diese Funktion zeigt ein Fehler-Log an, welches selbst zusammengestellt werden kann.

Parameter

cErrorText:C | Gibt den Text an der als Beschreibung für den ErrorLog oben in einem Panel angezeigt wird
cErrorList:C | Stringliste der Fehler (Neue Zeile = neuer Fehler)
nErrorSourceType:N | Art der Darstellung des ErrorLogs; default = 0; 0 = Fehlerliste anzeigen; 1 = DataSet anzeigen
oErrorDataSet:O | Das DataSet das angezeigt werden soll, wenn nErrorSourceType = 1
cErrorBrowserID:C | Die Browser-ID die für die anzeige des DataSet verwendet wird
cErrorCaption:C | Gibt die Caption des Fensters an

Rückgabewert

Keiner

Beispiel

//#############################################################################

// @ErrorLog Browser ist im Anhang von der Dokumentation (ID:38836)

//#############################################################################

| oMemTbl, cErrorLog |

function AddError(oMemTbl, nFehlerCode, cFehlerText)

   oMemTbl.CbAppend(),

   oMemTbl:FehlerCode := nFehlerCode,

   oMemTbl:FehlerText := cFehlerText,

   oMemTbl.CbPost(),

end,

// Zeigt eine Fehlermeldung anhand eines String-Liste an

ShowErrorLog('Meldung als String-Liste', 'FehlerCode: 404          Seite nicht gefunden'       + crlf +

                                         'FehlerCode: 1337         Test war nicht erfolgreich' + crlf +

                                         'FehlerCode: 502          Bad Gateway'),

cErrorLog := '',

// Zeigt eine Fehlermeldung anhand einer Tabelle an

oMemTbl   := CreateObject('TBeMemTable'),

StartSeq

   oMemTbl.CbAddField('FehlerCode', ftInteger, 0),

   oMemTbl.CbAddField('FehlerText', ftMemo, 0),

   oMemTbl.Active := True,

   AddError(oMemTbl, 404,  'Seite nicht gefunden'),

   AddError(oMemTbl, 1337, 'Test war nicht erfolgreich'),

   AddError(oMemTbl, 502,  'Bad Gateway'),

   ShowErrorLog('Meldungs als Tabelle', '', 1, oMemTbl, '', 'Test-Log'),

always

   DestroyObject(oMemTbl),

stopseq,


ShowWordCommander()

ShowWordCommander() – WordCommander

Beschreibung

Die Funktion ruft den business express-Wordcommander auf.

Parameter

oDab000:O | Bezugs-Tabelle; default = DAB000; DAB000 Kundenstamm; DAB100 Zulieferestamm; DAB062 Vertreterstamm
oDab005:O | DAB005 Kontakt-/Ansprechperson; default = DAB005

Rückgabewert

Keiner

Beispiel

ShowWordCommander()

Kontakt zum Support | www.dontenwill.de


Sleep()

Sleep() – Warten

Beschreibung

Das Programm wartet für aMSec Millisekunden mit der weiteren Ausführung.

Parameter

aMSec:N

Anzahl der Millisekunden

Rückgabewert

Keiner

Beispiel

WriteLn(Time()),

Sleep(5000),

WriteLn(Time()),


StrFunc()

StrFunc() – Programm ausführen

Beschreibung

Die Funktion führt ein CodeBlock-Programm aus. Ist der Programmtext fehlerhaft, wird ein leerer String zurückgegeben.

Parameter

aFunctionText:C

Kompletter Programmtext

Rückgabewert

Undefiniert - Rückgabewert des CodeBlock-Textes. Bei Fehler: Leerer String

Beispiel

| CB |

CB :=   '| String |' +

        'String := ''Hello'',' +

        'Meld(String),',

StrFunc(CB),


Trace()

Trace() – Breakpoint setzen

Beschreibung

Die Funktion setzt einen Breakpoint in einem Codeblock-Programm. Ist der Breakpoint aktiviert (aOnOff = true), wird das Programm an dieser Stelle angehalten. Das Programm kann anschließend in der Entwicklungsumgebung normal oder zeilenweise fortgesetzt werden.

Parameter

aOnOff:L

Breakpoint aktiviert; default = true

Rückgabewert

Keiner

Beispiel

Trace(true),

WriteLn('Diese Zeile wird zuerst noch nicht ausgeführt.

        Das Programm wartet auf weitere Ausführung.'),

Trace(false),

WriteLn('An dieser Zeile wird nicht angehalten,

        da der Breakpoint inaktiv ist'),


UnlockDesktop()

UnlockDesktop() – Applikation freigeben und Desktop-Loader verstecken

Beschreibung

Die Funktion gibt die Applikation wieder frei und macht den Desktop-Loader wieder unsichtbar.

Parameter

keine Parameter erwartet

Rückgabewert

Keiner

Beispiel

siehe LockDesktop()

Siehe auch:

LockDesktop()

LockDesktopUpdate()


Validate()

Validate() – Rückgabetyp eines Codeblock prüfen

Beschreibung

Die Funktion prüft, ob der Rückgabewert des CodeBlock-Programms aTestText kompatibel mit dem Datentyp aus aTestType ist.

Parameter

aTestText:C | Vollständiger CodeBlock Programmtext
aTestType:C | Buchstabe des Datentyps, mit dem verglichen wird; default = 'C' (Character) , kann über ValType() ermittelt werden
aShowMessage:L | Exception bei Fehler ausgeben; default = true

Rückgabewert

Logisch / Boolean - Datentypen kompatibel

Beispiel

| cCB |

cCB := '| String |' +

       'String := ''Hello'', ' +

       'String ',

Validate(cCB, 'C', false)

Siehe auch:

ValType()


ValType()

ValType() – Datentyp ermitteln

Beschreibung

Die Funktion gibt den Datentyp von aVar:U zurück.

Parameter

aVar:U

Variable, dessen Datentyp bestimmt werden soll

Rückgabewert

Alphanumerisch - Datentyp

  A    =      Array         // Array

  C    =      Character     // Alphanumerisch

  D    =      Date          // Datum

  L    =      Logical       // Logisch / Boolean

  N    =      Numeric       // Numerisch

  O    =      Object        // Objekt

  U    =      Undefined     // Undefiniert

Beispiel

| aArray, cChar, dDate, lLog:L := false, nNum, oDab000:DB := 'waDAB000', uUnd:U |

aArray := {'Element1', 'Element2', 'Element3'},

cChar  := 'alphanummerisch',

dDate  := Date(),

nNum   := 5,

WriteLn(ValType(aArray)),

WriteLn(ValType(cChar)),

WriteLn(ValType(dDate)),

WriteLn(ValType(lLog)),

WriteLn(ValType(nNum)),

WriteLn(ValType(oDab000)),

WriteLn(ValType(uUnd)),


WriteLn()

WriteLn() – Wert ausgeben

Beschreibung

Die Funktion gibt aValue:U in der Kommandozeilen-Ausgabe des Programm-Editors aus. Es können beliebig viele Parameter übergeben werden.

Parameter

aValue:U,...

Ausgabe; default = Leerstring

Rückgabewert

Keiner

Beispiel

WriteLn(Date()),

WriteLn("hello", "bye"),


Reports und Druck

Siehe auch:

CarryValue()

DocumentDelete()

DocumentPrint()

Pdf2Tiff()

PdfCmd()

PdfMerge()

PdfPageCount()

ReportInit()

ReportPrint()

TiffPageCount()


CarryValue()

CarryValue() – Übertrags-Summe einer Codeblock-Variablen beim Druck

Beschreibung

Die Funktion kann benutzt werden, um die Absummierung einer Codeblock-Variablen zu erhalten. Diese Funktion liefert nur während des laufenden Drucks einen sinnvollen Wert. Die Funktion sollte hauptsächlich in Codeblock-Variablen eingesetzt werden, die sich entweder in den Fußzeilen oder in den neuen Übertragsbändern befinden und deren Eigenschaft 'Direkt berechnen' auf 'True' eingestellt ist.

Parameter

aReportObject:O | Report-Objekt
aPageNo:N | Seitennummer für die Berechnung. Ist aPageNo nicht angegeben, findet die Berechnung bis zur aktuellen Seite statt. Die Angabe einer höheren Seiten-Nummer als 'AbsolutePage' wird ignoriert. Zur Berechnung von 'Übertrag oben' kann Page -1 verwendet werden.

Rückgabewert

Numerisch

Beispiel

| aValue, aStr |

aValue := CarryValue(PrintObject(Report, 'BlockVar1')),   // Summe von BlockVar1 holen

aStr   := 'Übertrag: ' + FloatToStr(aValue),

aStr


DocumentDelete()

DocumentDelete() – Individualbeleg löschen

Beschreibung

Mit Hilfe dieser Funktion kann ein Individual-Beleg im Belegarchiv als gelöscht markieren werden.

Parameter

nDocType:N | Indi.Beleg-Typ (entspr. Archiv-Belegart), 900-999
nDocNo:N | Beleg-Nr.
nCurrNo:N | Lfd.Nr. des Belegs (leer = neuester Beleg); default = 0
dDocDate:D | Druck-Datum des Beleges (leer = neuester Beleg); default = 0
oDab700:O | DAB700, Belegarchiv; default = Standard Dab700

Rückgabewert

Logisch / Boolean - Löschen erfolgreich

Beispiel

| oDab700:DB := 'waDAB700, BELEG' |

DocumentDelete(901, 6000, , , oDab700)

Siehe auch:

DocumentPrint()


DocumentPrint()

DocumentPrint() – Druck eines Individualbelegs

Beschreibung

Die Funktion druckt einen Individual-Beleg, welcher dann im Belegarchiv abgelegt ist.

Hinweis

Es handelt sich hierbei um eine einfache Umsetzung des Belegdruckes, erweiterterte Möglichkeiten zum Belegdruck (z.B. Stapeldruck) bietet die Klasse "TBeIndiPrintData".

DocumentPrint() sollte nicht mehr für den Druck von Standardbelegen verwendet werden. Verwenden Sie stattdessen die jeweilige Druck-Klasse des Belegs (z.B. "TBeDelivData" für Lieferscheine).

Bei Verwendung eines Standard-Belegtyps haben alle Parameter nach nPersNo keine Bedeutung. Als nDocType sind folgende Standard-Belegtypen erlaubt:

- 40 = Kommissionierschein

- 60 = Lieferschein

Parameter

nPrintMode:N | Druckmodus entsprechend ReportPrint() RM_LAYOUT und RM_PRINT
nDocType:N | Indi.Dokument-Typ (entspr. Archiv-Belegart), 900-999, muss definiert worden sein (im Fenster Druckerzuweisungen)
nDocNo:N | Dokument-Nr. frei zu vergeben
nPersNo:N | Pers.Nr. frei zu vergeben
aTables:A | Array mit Tabellen, die beim Belegdruck bzw. Design zur Verfügung stehen
oPrintConnect:O | ADS-Connection auf der die Belegverarbeitung laufen soll; default = Standard-Connection
dPrintDate:D | Druckdatum des Beleges; default = Buchungsdatum
lProcessDataOnly:L | Verarbeitung ohne Druck; default = false
evOnProcDataBefore:C | Event zur Datenverarbeitung vor Belegdruck; default = Leerstring
evOnProcDataAfter:C | Event zur Datenverarbeitung nach Belegdruck; default = Leerstring

Rückgabewert

Keiner

Beispiel

| oDab010, oConnect, oDM, arrArt, nDocNo, nMode |

// In diesem Beispiel wird ein einfacher Einzel-Belegdruck ausgeführt

// Events ----------------------------------------------------------------------

// Events zur Datenverarbeitung des Beleges

function ProcessDataBefore(aSender)

// Verarbeitung der Belegdaten (VOR dem Druck)

// Achtung ! Transaktion auf oConnect und somit oDab010 ist aktiv !

Meld('ProcessDataBefore'),

end,

function ProcessDataAfter(aSender)

// Verarbeitung der Belegdaten (NACH dem Druck)

// Achtung ! Transaktion auf oConnect und somit oDab010 ist aktiv !

Meld('ProcessDataAfter'),

end,

// Hauptprogramm ---------------------------------------------------------------

// WICHTIG: Folgende Zeilen erstellen ein TBeDBGet-Objekt, sowie  eine Tabelle

// welche auf der Connection des TBeDBGet-Objektes läuft !

// Die Connection wird an die DocumentPrint()-Funktion weitergegeben und somit

// kann die oDAb010 in den ProcessData-Events transaktionsgestützt(!) eingesetzt werden !!

oDM     := CreateObject("TBeDBGet"),

oDab010 := DbGetTable(oDM, waDAB010),

startseq,

   DBScope('A', 'A', oDab010),

   nMode := RM_LAYOUT,

   //nMode := RM_PRINT,

   DocumentPrint( nMode, 901, 6000, 4713, {oDab010}, oDM.AdsConnection,

                  DATE(), false, "ProcessDataBefore", "ProcessDataAfter"),

always,

   DestroyObject(oDab010),

   DestroyObject(oDM),

stopseq,

Siehe auch:

TBeIndiPrintData

TBeDelivData, TBeCumDelivData

DBGetLookup()

DBGetMemTable()

DBGetTable()


Pdf2Tiff()

Pdf2Tiff() – Pdf-Dokument in Tiff-Datei konvertieren

Beschreibung

Extrahiert eine oder mehrere Seiten eines PDF-Dokuments und erzeugt daraus eine Tiff-Datei.

Hinweis

Die erzeugte Tiff-Datei kann mehrseitig sein.

Parameter

cPdfFileName:C | Name der Quelldatei
cTiffFileName:C nPageFrom:N nPageTo:N nResolution:N lMono:L cPassword:C | Name der Zieldatei; falls nicht angegeben wie Quelldatei mit Endung ".TIF"; Nummer der ersten Seite; falls nicht angegeben wird eins angenommen; Nummer der letzten Seite; falls nicht angegeben wird die letzten Seite des Dokuments angenommen gewünschte Auflösung der Zieldatei; Defaultwert ist 200 dpi; True = monochrome Ausgabe, False= farbige Ausgabe; Default = False optionales Passwort zum Öffnen des PDF-Dokuments

Rückgabewert

Alphanumerisch; Name der erzeugten Tiff-Datei

Beispiel

// Extrahiert Seite 1 aus dem PDF-Dokument und erzeugt daraus eine Tiff-Datei

Pdf2Tiff('c:\temp\Auftragsbestätigung 171286.pdf', 'c:\temp\AB171286.TIF', 1, 1)

Siehe auch:

Pdf2Jpeg()

PdfCmd()

PdfMerge()

Pdf2Text()

PdfPageCount()


PdfCmd()

PdfCmd() – Ausführung einen PDF-Kommandos

Beschreibung

Allgemeine Funktion zur Bearbeitung von PDF-Dateien.

Parameter

oBePdfObj:O | Objekt der Klasse TBePdfObj, das eine PDF-Datei im Speicher repräsentiert
nPdfCommand:N uPdfParam1:U nPdfParam2:N | PDF-Kommando, dass auf das PDF-Objekt angewendet werden soll; 101 = PDF laden; 248 = Auswahl aufheben; 249 = Seite auswählen; 505 = Author einstellen; 511 = Auswahl speichern, Ziel wird ggf. überschrieben; 1. Parameter entsprechend nPdfCommand (s. Beispiel); 2. Parameter entsprechend nPdfCommand (s. Beispiel)

Rückgabewert

Numerisch

Beispiel

// Beispiel: ausgewählte Seiten aus einem PDF-Dokument in ein neues Dokument kopieren

// nPdfCommand                           Funktion           Param. 1   Param. 2

|  PDFCOM_Load:N:=101,                // PDF laden          Dateiname  0=gesperrt, 1=frei

   PDFCOM_PageSelectionClear:N:=248,  // Auswahl aufheben   ---        ---

   PDFCOM_PageSelectionAdd:N:=249,    // Seite auswählen    Seite - 1  ---

   PDFCOM_SetAuthor:N:=505,           // Author einstellen  Name       ---

   PDFCOM_SaveSelectionToFile:N:=511, // Auswahl speichern  Dateiname  ---

   oPdfObj |

oPdfObj := CreateObject('TBePdfObj'),                                // PDF-Objekt erzeugen

StartSeq

   PdfCmd(oPdfObj, PDFCOM_Load, 'c:\temp\Pdf01.pdf', 1),             // Pdf-Datei laden

   PdfCmd(oPdfObj, PDFCOM_PageSelectionClear),                       // Selektion aufheben

   PdfCmd(oPdfObj, PDFCOM_PageSelectionAdd, 1),                      // Seite 2 auswählen

   PdfCmd(oPdfObj, PDFCOM_PageSelectionAdd, 2),                      // Seite 3 auswählen

   PdfCmd(oPdfObj, PDFCOM_SetAuthor, 'Testauthor'),                  // Author ändern

   PdfCmd(oPdfObj, PDFCOM_SaveSelectionToFile, 'c:\temp\Pdf02.pdf'), // Pdf-Datei speichern

Always

   DestroyObject(oPdfObj)                                            // PDF-Objekt freigeben

StopSeq

Siehe auch:

Pdf2Jpeg()

PdfMerge()

Pdf2Tiff()

Pdf2Text()

PdfPageCount()

TBePdfObj


PdfMerge()

PdfMerge() – PDF-Dateien zusammenfassen

Beschreibung

Zwei oder mehr PDF-Dateien zu einem neuen Dokument zusammenfassen

Hinweis

Quelldateien, die nicht vorhanden sind, werden ignoriert. Die Zieldatei wird ggf. überschrieben.

Parameter

uSourceFiles:U | Array mit Dateinamen von PDF-Dokumenten, die zusammengefasst werden sollen
cDestFile:C cPassword:C cOptions:C | Name der Zieldatei optionales Passwort zum Öffnen der PDF-Dokumente; Optionen, jeweils in doppelten Anführungszeichen und mit Komma getrennt: "UPASSWORD=a" Setzt das Benutzerpasswort für die neue Datei auf "a"; "OPASSWORD=b" Setzt das Besitzerpasswort für die neue Datei auf "b"

Rückgabewert

Numerisch

Beispiel

//******************************************************************************

// Rückgabe = Seitenzahl des Ergebnisdokuments,

//            -1 bedeutet, dass PDFMerge fehlgeschlagen ist

//******************************************************************************

function myPDFMerge(aQuellen, cZiel, cPasswort, cOptionen)

|cPassNeu|

  cPassNeu := '',

  result   := -1,

  if not DeleteFile(cZiel) then                                                 // wird benötigt, damit sichergestellt ist, dass PDFMerge() erfolgreich war und eine neue Datei erstellt wurde

    SetError('Auf Zieldatei konnte nicht zugegriffen werden.'),

  endif,

  PDFMerge(aQuellen, cZiel, cPasswort, cOptionen),

  if File(cZiel) then

    cPassNeu := StrToken(SubStr(cOptionen, At('UPASSWORD=', Upper(cOptionen)) + 10), ',', 1),

    PDFPassword(cPassNeu),

    result := PDFPageCount(cZiel),

  endif,

end,

myPDFMerge({'C:\test1.pdf', 'C:\test2.pdf'}, 'C:\result.pdf',, 'uPassword=abc,oPassword=xyz')

Siehe auch:

Pdf2Jpeg()

PdfCmd()

Pdf2Tiff()

Pdf2Text()

PdfPageCount()


PdfPageCount()

PdfPageCount() – Seitenzahl eines PDF-Dokuments

Beschreibung

Ermittelt die Seitenzahl eines PDF-Dokuments.

Hinweis

Ein Fehler beim Zugriff auf das Dokument führt zu einer Exception.

Parameter

aPDFFileName:C | Name des PDF-Dokuments

Rückgabewert

Numerisch; Anzahl der Seiten

Beispiel

Writeln(PdfPageCount('c:\temp\Auftragsbestätigung 171286.pdf'))

Siehe auch:

Pdf2Jpeg()

PdfCmd()

PdfMerge()

Pdf2Tiff()

Pdf2Text()


ReportInit()

ReportInit() – Reportobjekt erzeugen

Beschreibung

Die Funktion erzeugt das Reportobjekt, das später für den Druck über ReportPrint() benötigt wird.

Parameter

aReportName:C | Name des Reports unter dem er in der Tabelle DabR10 gespeichert werden soll.
aTables:U | Tabellenobjekt oder ein Array mit Tabellenobjekten
aArguments:U | Parameter oder ein Array mit Parametern. Inhalt wird in die Eigenschaft 'RParams' des Report-Objektes übernommen; default = null()

Rückgabewert

Objekt - Reportobjekt

Beispiel

| aReport, oDab010:DB := 'waDAB010, DAB011', aPrinters, aOldCursor |

DBFilter('ARTNR = "C"', oDab010),

aReport := ReportInit('Artikelliste', oDab010, {'Artikelliste C'}),

if !Empty(aReport) then

   aOldCursor := SetCursor(crHourGlass),

   startseq,

      ReportPrint(aReport),

   onerror,

      Showmessage('Fehler beim Drucken aufgetreten!'),

   stopseq,

   DestroyObject(aReport),

   SetCursor(aOldCursor),

endif,

Siehe auch:

ReportPrint()


ReportPrint()

ReportPrint() – Reportobjekt drucken / Reportdesigner starten

Beschreibung

Die Funktion führt den Druck aus oder startet den Reportdesigner.

Parameter

aReportObject:O | Mit 'ReportInit' erzeugtes Report-Objekt
aMode:N | Druckmodus default = rm_Print (in der Programmierumgebung = rm_Layout) rm_Print (Wert 0) Druck starten rm_Layout (Wert 1) Reportdesigner aufrufen

Rückgabewert

Objekt - Reportobjekt

Beispiel

| aReport, oDab010:DB := 'waDAB010, DAB011', aPrinters, aOldCursor |

DBFilter('ARTNR = "C"', oDab010),

aReport := ReportInit('Artikelliste', oDab010, {'Artikelliste C'}),

if !Empty(aReport) then

   aOldCursor := SetCursor(crHourGlass),

   startseq,

      ReportPrint(aReport),

   onerror,

      Showmessage('Fehler beim Drucken aufgetreten!'),

   stopseq,

   DestroyObject(aReport),

   SetCursor(aOldCursor),

endif,

Siehe auch:

ReportInit()


TiffPageCount()

TiffPageCount() - Seitenanzahl einer Tiff-Datei

Beschreibung

Die Funktion ermittelt die Seitenanzahl einer Tiff-Datei.

Parameter

aFileName:C

Name der Tiff-Datei

Rückgabewert

Numerisch, Anzahl der Seiten


Scanner-Steuerung

Siehe auch:

ScanCreateControl()

ScanModalConf()


ScanCreateControl()

ScanCreateControl() – Scanner Control erzeugen

Beschreibung

Die Funktion erzeugt ein Control auf einem Funkscanner.

Parameter

cClassName:C | Klassenname
cControlName:C | Control-Name; default = Leerstring
oSession:O | Session-Objekt (vom Typ TScBaseSession); default = null()
aBounds:A | Abmaße des Scannerobjekts; default = unassigned
oParent:O | Parent des Scannerobjekt; default = null()

Rückgabewert

Objekt - Erzeugtes Control


ScanModalConf()

ScanModalConf() – Scanner-Dialog erzeugen

Beschreibung

Die Funktion erstellt einen Dialog auf einem Funkscanner. Das Array aButtons definiert die Knöpfe für diesen Dialog, während das Array aResults die Ergebnisse für diese Knöpfe enthalten.

Parameter

oSession:O | Session-Objekt (vom Typ TScBaseSession)
cText:C | Dialog-Text
aButtons:A | Array mit Dialog-Buttons; default = unassigned
aResults:A | Array mit Ergebnissen für die Buttons aus aButtons default = unassigned

Rückgabewert

Undefined - Null()


AdsEval()

AdsEval() – Filter Prüfung

Beschreibung

Die Funktion prüft, ob ein Filter-Ausdruck auf einer bestimmten ADS-Tabelle gültig ist.

Parameter

aExpr:C | Filter-Ausdruck
aTable:O | Bezugstabelle; default = Standard-DataSet

Rückgabewert

Undefiniert - Bei Fehler Exception

Beispiel

| oDab010:DB := 'waDAB010, DAB011' |

AdsEval('ARTNR = "2"', oDab010)


AdsGetConnectTables()

AdsGetConnectTables() - Tabellen einer ADS-Connection ermitteln

Beschreibung

Die Funktion ermittelt ein Array mit allen Tabellen-Objekten, die auf einer bestimmten ADS-Connection geöffnet sind.

Parameter

oConnect:O

Conncetion-Objekt vom Typ "TBeAdsConnection"

Rückgabewert

Array im Format: { oTable 1, ..., oTable n }

Beispiel

| oDM, oDab000, oDab010 |

function ShowLockedRecors()

   | aTables, aLocks, oTable, i, k |

   aTables := AdsGetConnectTables(oDM.AdsConnection),

   for i := 1 to 5 do

      DBEdit(oDab000),

      DBPost(oDab000),

      DBSkip(1, oDab000),

   next,

   for i := 1 to 5 do

      DBEdit(oDab010),

      DBPost(oDab010),

      DBSkip(1, oDab010),

   next,

   for i := 1 to ALen(aTables) do

      oTable := aTables[i],

      WriteLn(oTable.AliasName),

      aLocks := AdsGetUserLocks(oTable),

      for k := 1 to ALen(aLocks) do

         DBGoto(aLocks[k], oTable),

         if oTable.WorkArea = waDAB000 then

            WriteLn('     ' + Str(oTable:KDNR)),

         else

            WriteLn('     ' + oTable:ARTNR),

         endif,

      next,

   next,

end,

oDM     := CreateObject('TBeDBGet'),

oDab000 := DBGetTable(oDM, waDAB000),

oDab010 := DBGetTable(oDM, waDAB010),

DBStartTrans(oDM.AdsConnection),

startseq,

   WriteLn('Transaktion aktiv'),

   ShowLockedRecors(),

   DBCommit(oDM.AdsConnection),

onerror

   DBRollBack(oDM.AdsConnection),

   Raise(),

stopseq,

WriteLn('Transaktion nicht aktiv'),

ShowLockedRecors()


AdsGetUserLocks()

AdsGetUserLocks() - Eigene Satzsperren einer ADS-Tabelle ermitteln

Beschreibung

Die Funktion ermittelt alle eigenen Satzsperren eines speziellen ADS-Tabellen-Objekts.

Insbesondere in Transaktionen können mit dieser Funktion alle in der Transaktion veränderten Sätze ermittelt werden.

Parameter

oTable:O

Tabellen-Objekt, für welches die Satzsperren ermittlen werden sollen

Rückgabewert

Array im Format: { Gesperrte Satz-Nr. 1, ..., Gesperrte Satz-Nr. n }

Beispiel

| oDM, oDab000, oDab010 |

function ShowLockedRecors()

   | aTables, aLocks, oTable, i, k |

   aTables := AdsGetConnectTables(oDM.AdsConnection),

   for i := 1 to 5 do

      DBEdit(oDab000),

      DBPost(oDab000),

      DBSkip(1, oDab000),

   next,

   for i := 1 to 5 do

      DBEdit(oDab010),

      DBPost(oDab010),

      DBSkip(1, oDab010),

   next,

   for i := 1 to ALen(aTables) do

      oTable := aTables[i],

      WriteLn(oTable.AliasName),

      aLocks := AdsGetUserLocks(oTable),

      for k := 1 to ALen(aLocks) do

         DBGoto(aLocks[k], oTable),

         if oTable.WorkArea = waDAB000 then

            WriteLn('     ' + Str(oTable:KDNR)),

         else

            WriteLn('     ' + oTable:ARTNR),

         endif,

      next,

   next,

end,

oDM     := CreateObject('TBeDBGet'),

oDab000 := DBGetTable(oDM, waDAB000),

oDab010 := DBGetTable(oDM, waDAB010),

DBStartTrans(oDM.AdsConnection),

startseq,

   WriteLn('Transaktion aktiv'),

   ShowLockedRecors(),

   DBCommit(oDM.AdsConnection),

onerror,

   DBRollBack(oDM.AdsConnection),

   Raise(),

stopseq,

WriteLn('Transaktion nicht aktiv'),

ShowLockedRecors()


AsNumber()

AsNumber() – Datenfeld als Nummer

Beschreibung

Die Funktion versucht ein Datenfeld so auszulesen, als wäre der Inhalt ein numerischer Wert.

Parameter

aFieldName:C | Feldname
aTable:U | Tabelle; default = Standard-Tabelle

Rückgabewert

Numerisch - Datenfeldinhalt

Beispiel

| oDab010:DB := 'waDAB010, DAB011', nNumber |

DBGoTop(oDab010),

nNumber := AsNumber('EAN', oDAb010),

Meld(nNumber),

Siehe auch:

AsString()

AsVariant()


AsString()

AsString() – Datenfeld als String

Beschreibung

Die Funktion versucht ein Datenfeld so auszulesen, als wäre der Inhalt ein alphanumerischer Wert.

Parameter

aFieldName:C | Feldname
aTable:U | Tabelle; default = Standard-Tabelle

Rückgabewert

Alphanumerisch - Datenfeldinhalt

Beispiel

| oDab010:DB := 'waDAB010, DAB011', cString |

DBGoTop(oDab010),

cString := AsString('ARTNR', oDAb010),

Meld(cString),

Siehe auch:

AsNumber()

AsVariant()


AsVariant()

AsVariant() – Datenfeld als Variant

Beschreibung

Die Funktion liest ein Datenfeld als Variant aus. Da der Datentyp Variant unbestimmt ist, kann jeder beliebige Wert ausgelesen werden.

Parameter

aFieldName:C | Feldname
aTable:U | Tabelle; default = Standard-Tabelle

Rückgabewert

Undefiniert - Datenfeldinhalt

Beispiel

| oDab010:DB := 'waDAB010, DAB011', uVariant |

DBGoTop(oDab010),

uVariant := 'Variant als String: ' + AsVariant('ARTNR', oDAb010) + '.',

uVariant := uVariant + ' Variant als Zahl: ' + AsVariant('EAN', oDAb010) + '.',

Meld(uVariant),

Siehe auch:

AsNumber()

AsString()


BeClose()

BeClose() – Tabelle schließen

Beschreibung

Die Funktion gibt das Tabellenobjekt für den Cache wieder frei. Neue Aufrufe von BeOpen können nach BeClose das bereits geöffnete Tabellenobjekt wieder zuteilen.

Parameter

aTable:O

Tabellenobjekt, das für den Cache wieder zur Verfügung stehen soll

Rückgabewert

Undefiniert

Beispiel

siehe BeOpen()

Siehe auch:

BeOpen()


BeOpen()

BeOpen() – Tabelle öffnen

Beschreibung

Die Funktion gibt ein Tabellenobjekt aus dem Cache zurück. Das Tabellenobjekt bleibt für weitere Aufrufe von BeOpen() mit der gleichen Workarea solange gesperrt, bis es mit BeClose() freigegeben wird. Weitere Aufrufe von BeOpen() vor BeClose() erzeugen eigene Tabellenobjekte.

Hinweis

Die Funktionen BeOpen() bzw. BeClose() dienen zur Verbesserung der Ablaufgeschwindigkeit von datenbankgestützen Programmen. Damit steht im Codeblock ein Datenbank-Cache zur Verfügung, der das häufige Öffnen und Schliessen von Tabellen verhindern soll. Eine Tabelle, die einmal geöffnet wurde, wird im Cache offen gehalten, bis business express beendet wird.

Tabellenobjekte, die mit BeOpen() erzeugt wurden, dürfen NIE über DestroyObject() gelöscht werden. Sie müssen unbedingt mit BeClose() zurückgegeben werden. Events werden nach BeClose() nicht mehr ausgeführt. Die Verwendung von Objektvariablen nach BeClose() ist nicht mehr zulässig und kann zu falschen Ergebnissen führen. Tabellenobjekte aus dem Cache sollten nach Möglichkeit nicht an Transaktionen beteiligt sein. Eine Änderung der Objekteigenschaften ist zwar möglich, muss jedoch vor BeClose() rückgängig gemacht werden! Events, Indices, Scopes, Ranges und Filter dürfen zugewiesen bleiben und werden automatisch entfernt.

Es sollte durch Fehlerauffangroutinen sichergestellt werden, das für jeden BeOpen()-Befehl ein zugehöriger BeClose()-Befehl ausgeführt wird !

Parameter

aWorkArea:N | WorkArea, die geöffnet werden soll
aIndex:U | Indexnummer oder Indexname; default = 'DAB011' (falls vorhanden)
aGoTop:L | Tabelle wird auf den Anfang positioniert; default = false

Rückgabewert

Objekt - Geöffnete Tabelle

Beispiel

// Performance-Vergleich BeOpen() / DbOpen()

| aDab010, i, aTime, aCount, aBeOpenTime, aOpenTime |

aCount := 15,

aTime := GetExTimer(),

for i := 1 to aCount do

   aDab010 := BeOpen(waDAB010),

   startseq,

      Writeln(aDab010:ArtNr)

   always,

      BeClose(aDab010)

   stopseq,

next,

aBeOpenTime := Str(GetExTimer() - aTime),

aTime := GetExTimer(),

for i := 1 to aCount do

   aDab010 := DBOpen(waDAB010),

   startseq,

      Writeln(aDab010:ArtNr)

   always,

      DestroyObject(aDab010)

   stopseq,

next,

aOpenTime := Str(GetExTimer() - aTime),

WriteLn(Replicate('=', 30) + crlf +

        'Tabelle DAB010 ' + Str(aCount) + ' Mal öffnen:' + crlf +

        'aus Cache: '     + Chr(9) + aBeOpenTime + crlf +

        'konventionell: ' + Chr(9) + aOpenTime + crlf +

        Replicate('=', 30)),

Siehe auch:

BeClose()


BoF()

BoF() – Tabellenanfang erreicht

Beschreibung

Die Funktion gibt zurück, ob die Tabelle auf dem ersten Datensatz steht. ("begin of file")

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbBoF

Parameter

aTable:U

Bezugstabelle; default = Standardtabelle

Rückgabewert

Logisch / Boolean - Anfang der Tabelle

Beispiel

| oDab010:DB := 'waDAB010' |

DBGoBottom(oDab010),        // auf den letzten Datensatz springen

while not BoF(oDab010) do   // Schleife über alle Datensätze, bis Anfang erreicht

   WriteLn(oDab010:ARTNR),

   WriteLn(oDab010:ARTTYP),

   DBSkip(-1, oDab010)      // einen Datensatz zurückgehen

end,

Siehe auch:

EoF()


DBAppend()

DBAppend() – Datensatz anfügen

Beschreibung

Die Funktion DBAppend() erstellt einen leeren Datensatz am Ende der Tabelle und versetzt diesen in den Einfügemodus.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbAppend()

DBAppend() löst keine Exception aus, falls der Vorgang nicht möglich war und UseDbExceptions nicht gesetzt ist (default).

oTable.CbAppend() löst hingegen immer eine Exception aus, wenn der Vorgang nicht möglich war.

Parameter

aTable:U

Tabelle; default = Standard-Tablle

Rückgabewert

Logisch / Boolean - Anfügen erfolgreich

Beispiel

| oTable |

oTable := DBOpen(waDAB000, "C:\temp\test"),

DBAppend(oTable),

oTable:TEST := 2,

iif(JN('Datensatz übernehmen?'), DBPost(oTable), DBCancel(oTable)),

Siehe auch:

DBCancel()

DBEdit()

DBInsert()

DBPost()


DBCancel()

DBCancel() – Bearbeitungsmodus abbrechen

Beschreibung

Die Funktion bricht den Bearbeitungsmodus der Tabelle ab und schreibt eventuell neu zugewiesene Werte nicht in die Tabelle.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbCancel()

DBCancel() löst keine Exception aus, falls der Vorgang nicht möglich war und UseDbExceptions nicht gesetzt ist (default).

oTable.CbCancel() löst hingegen immer eine Exception aus, wenn der Vorgang nicht möglich war.

Parameter

aTable:U

Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Logisch / Boolean - Abbruch erfolgreich

Beispiel

| oTable |

oTable := DBOpen(waDAB000, "C:\temp\test"),

DBAppend(oTable),

oTable:TEST := 2,

iif(JN('Datensatz übernehmen?'), DBPost(oTable), DBCancel(oTable)),

Siehe auch:

DBAppend()

DBEdit()

DBInsert()

DBPost()


DBCancelAll()

DBCancelAll() – Bearbeitungsmodus abbrechen

Beschreibung

Die Funktion führt ein DBCancel() auf alle Tabellen aus, welche im Datenmodul enthalten sind und aktuell im Edit / Insert-Modus sind.

Parameter

oBeDbGet:O

Objekt der Klasse TBeDbGet (Datenmodul)

Rückgabewert

Keiner

Beispiel

| oDM, oTable |

oDM    := CreateObject('TBeDbGet'),

oTable := DBGetTable(oDM, waDAB000,),

startseq,

   DBEdit(oTable),

   //Editieren der Tabelle

   DBPost(oTable),

onerror,

   DBCancelAll(oDM),

stopseq,

Siehe auch:

DBCancel()

DBUnLock()


DBCommit()

DBCommit() – Transaktion beenden

Beschreibung

Die Funktion führt die Befehle, die in einer Transaktion stehen, aus und beendet somit die Transaktion.

Parameter

keine Parameter erwartet

Rückgabewert

Logisch / Boolean - Beenden erfolgreich

Beispiel

startseq,

   DBStartTrans(),

   WriteLn('------'),

   WriteLn('Verschiedene Datenbankoperationen ausführen'),

   WriteLn('------'),

   iif(JN('Änderungen übernehmen?'), DBCommit(), DBRollBack()),

onerror,

   DBRollBack(),

stopseq,

Siehe auch:

DBInTrans()

DBRollBack()

DBStartTrans()


DBConnection()

DBConnection() – Datenbankverbindung

Beschreibung

Die Funktion liefert das Objekt der Datenbankverbindung zurück (Typ TADSConnection), sobald im CodeBlock eine Datenbankverbindung registriert wurde.

Parameter

keine Parameter erwartet

Rückgabewert

Objekt - Datenbankverbindung

Beispiel

DBConnection()

Kontakt zum Support | www.dontenwill.de


DBCopyTo()

DBCopyTo() – Tabelle kopieren

Beschreibung

Die Funktion kopiert alle Sätze einer Tabelle in eine neue Tabelle. Bereiche und Filter werden berücksichtigt. Existiert die Ausgabetabelle, wird diese zunächst gelöscht. Falls aFieldList angegeben ist, werden nur die ausgewählten Datenfelder kopiert. Die Ausgabetabelle wird ohne Index erstellt.

Parameter

aOutFileName:C | Name und Pfad der Ausgabetabelle (Ohne Dateierweiterung!)
aFieldList:U | Feldliste; default = null()
aTable:U | Bezugstabelle; default = Standard-Table

Rückgabewert

Logisch / Boolean - Kopieren erfolgreich

Beispiel

| aStartNo:N := 70000, aStopNo:N := 80000, oDab000:DB := 'waDAB000',

  aFileName:C := 'C:\temp\COPY' |

DBScope(Str(aStartNo, 8), Str(aStopNo, 8), oDab000),

if DBCopyTo(aFileName, 'KdNr,Name1', oDab000) then

   WriteLn(aFileName + ' erstellt'),

else

   WriteLn('Fehler beim Kopieren nach ' + aFileName)

endif,


DBCreate()

DBCreate() – Tabelle erzeugen

Beschreibung

DBCreate() erzeugt eine neue Tabelle, deren Name nicht mit 'DAB', 'DF', 'DJ' oder 'BE' beginnen darf.

Parameter

aTableName:U | Name und gegebenenfalls Pfad der zu erstellenden Tabelle
aStructure:A | Zweidimensionales Array zur Definition der Tabellenstruktur; {; { 'Feldname' , 'Feldtyp' , Feldgröße , Nachkommastellen }, {...}; }
aWorkArea:N | Workarea; default

Rückgabewert

Objekt - Neu erstellte Tabelle

Beispiel

| oDabDV, aTableName, aFields |

aTableName := 'C:\temp\' + 'Testtabelle',

aFields  := {{'ARTNR',      'C', 20, 0},    // Feld1

             {'TERM_INDEX', 'C',  9, 0},    // Feld2

             {'GEPLANT',    'N', 15, 4},    // Feld3

             {'VERBAUT',    'N', 15, 4},    // Feld4

             {'VVERBAUT',   'N', 15, 4}},   // Feld5

startseq,

   oDabDV := DBCreate(aTableName + '.ADT',  aFields),

   ShowMessage('Die Tabelle wurde erstellt!'),

onerror,

   ShowMessage('Fehler beim Erzeugen der Tabelle: ' +  aTableName + '!')

stopseq,


DBDelete()

DBDelete() – Datensatz löschen

Beschreibung

Die Funktion DBDelete() löscht den aktuellen Datensatz und setzt den Zeiger auf den nächsten Satz. Falls der Satz gelöscht werden konnte wird true, andernfalls false zurückgegeben.

Hinweis

DBDelete() erlaubt eine Löschung in Standardtabellen nur, sofern es sich um die Stücklisten-Tabelle (Dab210) handelt und die Eigenschaft "WriteProtocol" auf TRUE gesetzt wurde. Auf Individualtabellen existiert keine Einschränkung.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbDelete()

DBDelete() löst keine Exception aus, falls der Vorgang nicht möglich war und UseDbExceptions nicht gesetzt ist (default).

oTable.CbDelete() löst hingegen immer eine Exception aus, wenn der Vorgang nicht möglich war.

Parameter

aTable:U

Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Logisch / Boolean - Löschen erfolgreich

Beispiel

| oTable |

oTable := DBOpen(waDAB000, "C:\temp\test"),

DBGoTop(oTable),

iif(DBDelete(oTable), Meld("Datensatz gelöscht"),

    Meld("Datensatz kann nicht gelöscht werden")),

Siehe auch:

DBAppend()

DBCancel()

DBEdit()

DBInsert()

DBPost()


DBDisableControls()

DBDisableControls() – Benachrichtigung datensensitiver Controls stoppen

Beschreibung

Die Funktion DBDisableControls() verhindert die Benachrichtigung von datensensitiven Steuerelementen, die mit der Tabelle verbunden sind. Es werden beispielsweise die Browser, die auf diese Tabelle zugreifen nicht mehr automatisch aktualisiert, was die Geschwindigkeit erheblich erhöhen kann. Durch DBEnableControls() wird die Aktualisierung wieder automatisch durchgeführt.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbDisableControls()

Parameter

aTable:U

Bezugstabelle; default = Standardtabelle

Rückgabewert

Logisch / Boolean - Disable erfolgreich

Beispiel

| oTable |

oTable := DBOpen(waDAB000, "C:\temp\test"),   // die Tabelle öffnen

DBDisableControls(oTable),             // Aktualisierung verhindern

startseq,

   DBGoTop(oTable),                    // zum ersten Datensatz springen

   while not EoF(oTable) do            // Schleife über alle Datensätze

// ----- Hier werden alle Datensätze verarbeitet ----- //

      DBSkip(1,oTable),                // auf nächsten Datensatz springen

   end,

always,

   DBEnableControls(oTable),           // Aktualisierung aktivieren

stopseq,

Siehe auch:

DBEnableControls()


DBDisplayText()

DBDisplayText() – Feldinhalt als Text

Beschreibung

DBDisplayText() liefert die String-Darstellung eines Feldwertes. Mit DBDisplayText() lässt sich z.B. ein Feldwert zur Anzeige in einem datensensitiven Steuerelement ermitteln.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbDisplayText()

Parameter

aFieldName:U | Feldname
aTable:U | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Alphanumerisch

Beispiel

| oTable, cString |

oTable  := DBOpen(waDAB000, 'C:\temp\test'),

cString := DBDisplayText('bool', oTable),

if cString = 'Wahr' then

   Meld('Der Feldinhalt war "true"'),

else

   if cString = 'Falsch' then

      Meld('Der Feldinhalt war "falsch"'),

   else

      Meld('Der Feldinhalt war kein boolescher Wert'),

   endif,

endif,


DBEdit()

DBEdit() – Tabelle in Eingabemodus versetzen

Beschreibung

Die Funktion versetzt die Tabelle in den Eingabemodus. Nach dem Aufruf von DBEdit() können den Datenfeldern neue Werte zugewiesen werden. Um die neuen Werte zu speichern muss die Funktion DBPost() aufgerufen werden.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbEdit()

DBEdit() löst keine Exception aus, falls der Vorgang nicht möglich war und UseDbExceptions nicht gesetzt ist (default).

oTable.CbEdit() löst hingegen immer eine Exception aus, wenn der Vorgang nicht möglich war.

Parameter

aTable:U

Bezugstabelle; default = Standardtabelle

Rückgabewert

Logisch / Boolean - Editmodus erfolgreich

Beispiel

| oTable, cString |

oTable := DBOpen(waDAB000, 'C:\temp\test'),

DBEdit(oTable),

oTable:TEST := 12,

DBPost(oTable),

Siehe auch:

DBAppend()

DBCancel()

DBInsert()

DBPost()


DBEnableControls()

DBEnableControls() – Benachrichtigung datensensitiver Controls wiederaufnehmen

Beschreibung

Die Funktion DBEnableControls() aktiviert die Benachrichtigung von datensensitiven Steuerelementen, die mit der Tabelle verbunden sind, falls diese zuvor durch DBDisableControls() deaktiviert wurde.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbEnableControls()

Parameter

aTable:U

Bezugstabelle; default = Standardtabelle

Rückgabewert

Logisch / Boolean - Aktivierung erfolgreich

Beispiel

| oTable |

oTable := DBOpen(waDAB000, "C:\temp\test"),   // die Tabelle öffnen

DBDisableControls(oTable),             // Aktualisierung verhindern

startseq,

   DBGoTop(oTable),                    // zum ersten Datensatz springen

   while not EoF(oTable) do            // Schleife über alle Datensätze

// ----- Hier werden alle Datensätze verarbeitet ----- //

      DBSkip(1, oTable),               // auf nächsten Datensatz springen

   end,

always,

   DBEnableControls(oTable),           // Aktualisierung aktivieren

stopseq,

Siehe auch:

DBDisableControls()


DBExecSQL()

DBExecSQL() – SQL Statement ausführen

Beschreibung

Die Funktion führt ein SQL Statement aus. Diese Funktion ist für SQL-Statements gedacht, die keine Rückgabemenge erzeugen, also z.B. ein "UPDATE"-Statement.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oQuery.CbExecSQL()

Parameter

aQuery:O

SQL-Query-Objekt (vom TYP TBeAdsQuery)

Rückgabewert

Keiner.

Beispiel

|oQuery|

oQuery     := CreateObject('TBEADSQuery'),

oQuery.SQL := 'UPDATE "Dab010.dbf"                  '+

              'SET ARTNR = ''Test-Update''          '+

              'WHERE ARTNR = ''Test-Artikel''       ',

ProgressbarShow("SQL-Query", "SQL-Befehl wird ausgeführt"),

DBExecSQL(oQuery),

ProgressbarHide(),

DestroyObject(oQuery),


DBFCount()

DBFCount() – Anzahl Datenbank-Felder

Beschreibung

Die Funktion liefert die Anzahl der Datenbank-Felder einer Tabelle.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbFieldCount

Parameter

aTable:U

Bezugstabelle; default = Standard-Tabelle (es kann auch ein gültiger Aliasname übergeben werden)

Rückgabewert

Numerisch - Anzahl Datenbank-Felder

Beispiel

| oDab100:DB := 'waDAB100', i, aField |

for i := 1 to DBFCount(oDab100) do

   aField := DBField(i, oDab100),

   WriteLn(aField.DisplayLabel),

end


DBField()

DBField() – Datenbank-Feld ermitteln

Beschreibung

Die Funktion liefert ein Datenbank-Feld-Objekt zurück.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbFIeld()

oTable.CbFieldByName()

Parameter

aFieldName:U | Name des Feldes oder Feldindex, auf den zugegriffen werden soll
aTable:U | Bezugstabelle; default = Standardtabelle

Rückgabewert

Objekt - Datenbankfeld (vom Typ TField)

Beispiel

| oDab010:DB := 'waDAB010', aField |

aField := DBField(2, oDab010),

WriteLn(aField.DisplayLabel)

Siehe auch:

AsString()


DBFieldDeci()

DBFieldDeci() – Datenbank-Feld Nachkommastellen

Beschreibung

Die Funktion gibt die Anzahl der Nachkommastellen eines Datenfeldes zurück.

Parameter

oDbField:O

Feldobjekt vom Typ TField (z.B. durch DbField()

Rückgabewert

Numerisch - Nachkommastellen des Datenbankfeldes

Beispiel

| oDab000:DB := 'waDAB000', aField |

aField := DBField('UMSATZVK', oDab000),

WriteLn(DBFieldDeci(aField)),

Siehe auch:

DBFieldLen()

DBFieldList()

DBFieldNum()

DBFieldType()


DBFieldLen()

DBFieldLen() – Datenbank-Feld Länge

Beschreibung

Die Funktion gibt die Größe des Datenfeldes zurück.

Parameter

oDbField:O

Feldobjekt vom Typ TField (z.B. durch DbField()

Rückgabewert

Numerisch - Länge des Datenbankfeldes

Beispiel

| oDab010:DB := 'waDAB010', aField1, aField2 |

aField1 := DBField(23, oDab010),

WriteLn(DBFieldLen(aField1)),

aField2 := DBField(5, oDab010),

WriteLn(DBFieldLen(aField2)),

Siehe auch:

DBFieldDeci()

DBFieldList()

DBFieldNum()

DBFieldType()


DBFieldList()

DBFieldList() – Datenbank-Feld Liste

Beschreibung

Die Funktion gibt ein zweidimensionales Array wieder, welches alle Feldnamen und deren Feldtyp, Feldgröße, Nachkommastellen, Position und Beschreibung der Tabelle enthält.

Parameter

nWorkArea:N

Workarea der BE-Datenbank

Rückgabewert

Array - Datenbank-Feld Liste (zweidimensionales Array).

Format:

 {

   { 'Feldname' , 'Feldtyp' , Feldgröße , Nachkommastellen , Position , 'Feldlabel' },

   ..

 }

Beispiel

| oDab100:DB := 'waDAB100', aFields |

aFields := DBFieldList(oDab100.workarea),

WriteLn(aFields[4]),

WriteLn(aFields[6, 2]),

Siehe auch:

DBFieldDeci()

DBFieldLen()

DBFieldNum()

DBFieldType()


DBFieldNum()

DBFieldNum() – Index eines Datenfeldes

Beschreibung

Die Funktion gibt die Position des Datenfeldes zurück.

Parameter

oDbField:O

Datenfeldobjekt

Rückgabewert

Numerisch - Position des Datenfeldes

Beispiel

| oDab000:DB := 'waDAB000', oField1, oField2 |

oField1 := DBField("NAME2", oDab000),

oField2 := DBField("TELEFON", oDab000),

WriteLn(DbFieldNum(oField1)),

WriteLn(DbFieldNum(oField2)),

Siehe auch:

DBFieldDeci()

DBFieldLen()

DBFieldList()

DBFieldType()


DBFieldType()

DBFieldType() – Datentyp eines Datenfeldes

Beschreibung

Die Funktion gibt den Typ des Datenfeldes zurück.

Parameter

oDbField:O

Datenfeldobjekt

Rückgabewert

Alphanumerisch - Datentyp des Datenfeldes

Beispiel

| oDab000:DB := 'waDAB000', oField1, oField2 |

oField1 := DBField("SKONTOPROZ", oDab000),

oField2 := DBField("TELEFON", oDab000),

WriteLn(DbFieldType(oField1)),

WriteLn(DbFieldType(oField2)),

Siehe auch:

DBFieldDeci()

DBFieldLen()

DBFieldList()

DBFieldNum()


DBFilter()

DBFilter() – Tabelle filtern

Beschreibung

Die Funktion filtert die Datensätze einer Tabelle.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbSetFilter()

oTable.CbFilter

oTable.CbFiltered

Parameter

aFilterText:O | Logischer Ausdruck, der sich auf die zu filternde Tabelle beziehen muss. Leerstring löscht den Filter.
aTable:O | Tabelle auf die der Filter gesetzt werden soll; default = Standardtabelle

Rückgabewert

Keiner

Beispiel

| oDab000:DB := 'waDAB000', nX |

DBFilter('KDNR<=10000', oDab000),

nX := 0,

while !EoF(oDab000) do

   nX++,

   Skip(1, oDab000),

end,

DBFilter('', oDab000),

WriteLn(nX)

Siehe auch:

DBScope()


DBGetDataModuleFromPool()

DBGetDataModuleFromPool() – DatenModul anfordern

Beschreibung

Die Funktion liefert ein DatenModul-Objekt (TBeDbGet) aus dem DatenModul-Pool und stellt die Laufzeit-optimierte Variante zu CreateObject('TBeDBGet') dar. Das DatenModul-Objekt bleibt solange für den Aufrufer reserviert, bis es mit DBReturnDataModuleToPool() freigegeben wird. Weitere Aufrufe von DBGetDataModuleFromPool() vor DBReturnDataModuleToPool() liefern oder erzeugen zusätzliche DatenModul-Objekte.

Im be Client ist der Einsatz des DatenModul-Pools besonders dann sinnvoll, wenn ein Datenmodul innerhalb einer Sitzung bisher immer wieder angelegt und anschließend wieder zerstört wird.

Für häufig verwendete Kombinationen von Tabellen kann durch Angabe eines selbst gewählten Alias ein separater Typ von DatenModulen angelegt werden. Wird ein DatenModul mit diesem Alias aus dem Pool angefordert, dann wird ein DatenModul geliefert, bei dem die gewünschten Tabellen bereits geöffnet sind, was einen erheblichen Laufzeitgewinn bedeutet. Dies wird erreicht durch die Wiederverwendung von DatenModul-Objekten, die wieder zurückgegeben wurden.

Bei Verwendung des DatenModul-Pools auf dem beas mit eigenen Aliasen ist der Laufzeitgewinn gegen die Resourcenbelegung abzuwägen, da pro User / Abteilung / Standort-Kombination, für die ein Request bearbeitet wird, ein neues DatenModul angelegt wird und bis zur Beendigung dieser beas Instanz erhalten bleibt. Die ADS Connection, die für dieses DatenModul angelegt wird, bleibt ebenfalls reserviert. Um die Resourcenbelegung abzuschätzen ist dies noch mit der Anzahl der vergebenen Aliase zu multiplizieren.

Hinweise

DatenModul-Objekte, die mit DBReturnDataModuleToPool() erzeugt wurden, dürfen NIE über DestroyObject() gelöscht werden. Sie müssen unbedingt mit

DBReturnDataModuleToPool() zurückgegeben werden.

Events werden nach DBReturnDataModuleToPool() nicht mehr ausgeführt.

Die Verwendung von Objektvariablen nach DBReturnDataModuleToPool() ist nicht mehr zulässig und kann zu falschen Ergebnissen führen.

Vor Rückgabe eines DatenModul-Objekts an den Pool muss die Transaktion beendet werden.

Eine Änderung der Objekteigenschaften ist zwar möglich, muss jedoch vor DBReturnDataModuleToPool() rückgängig gemacht werden!

Events, Indices, Scopes, Ranges und Filter dürfen zwar auf den benutzten Tabellen zugewiesen bleiben, werden aber automatisch entfernt.

Es muss durch Fehlerauffangroutinen sichergestellt werden, dass für jeden DBGetDataModuleFromPool()-Befehl ein zugehöriger

DBReturnDataModuleToPool()-Befehl ausgeführt wird!

Parameter

cAliasName:C

Alias; Ist der Parameter nicht vorhanden oder leer, wird intern '*' als Default verwendet.

Rückgabewert

Objekt - DatenModul (TBeDbGet)

Beispiel

// Performance-Vergleich DBGetDataModuleFromPool() / CreateObject('TBeDBGet')

| aDab010, i, aTime, aCount, aBeOpenTime, aOpenTime, oBeDBGet|

aCount := 5,

aTime := GetExTimer(),

for i := 1 to aCount do

   oBeDBGet := DBGetDataModuleFromPool(),

   aDab010 := DBGetTable(oBeDBGet, waDab010),

//   aDab010 := BeOpen(waDAB010),

   startseq,

      DbGoTop(aDab010),

      Writeln(aDab010:ArtNr)

   always,

      DBReturnDataModuleToPool(oBeDBGet),

   stopseq,

next,

aBeOpenTime := Str(GetExTimer() - aTime),

aTime := GetExTimer(),

for i := 1 to aCount do

   oBeDBGet := CreateObject('TBeDBGet'),

   aDab010 := DBGetTable(oBeDBGet, waDab010),

   //aDab010 := DBOpen(waDAB010),

   startseq,

      DbGoTop(aDab010),

      Writeln(aDab010:ArtNr)

   always,

      DestroyObject(oBeDBGet)

   stopseq,

next,

aOpenTime := Str(GetExTimer() - aTime),

WriteLn(Replicate('=',  2*aCount) + crlf +

        'Tabelle DAB010 ' + Str(aCount) + ' Mal öffnen:' + crlf +

        'aus Cache: '     + Chr(9) + aBeOpenTime + crlf +

        'konventionell: ' + Chr(9) + aOpenTime + crlf +

        Replicate('=',  2*aCount)),

Siehe auch:

DBGetTable()

DBReturnDataModuleToPool()


DBGetLockClientName()

DBGetLockClientName() – Computernamen des sperrenden Windows-Clients ermitteln

Beschreibung

Die Funktion ermittelt den Computernamen des Windows-Clients, von dem der aktuelle Datensatz gesperrt wurde.

Hinweis

Wird die sperrende Applikation in einer Teminalserver-Sitzung ausgeführt, dann wird der Computername des Terminalservers zurück gegeben.

Parameter

aTable:O

Tabellen-Objekt

Rückgabewert

Alphanumerisch, Name des Windows-Clients.

Beispiel

| oDab065:DB := 'waDAB065, DAB066', cClientName:C |

DBGoTop(oDab065),                                 // Memo-Tabelle öffnen

startseq,

   DBEdit(oDab065),                               // Datensatz editieren und damit sperren

   cClientName := DbGetLockClientName(oDab065),   // Sperr-Client ermitteln

   WriteLn('sperrender Client: ' + cClientName),

always,

   DBCancel(oDab065),

stopseq,


DBGetLookup()

DBGetLookup() – Lookup Tabelle für Container erzeugen

Beschreibung

Die Funktion erzeugt oder holt eine Tabelle zur Nutzung für Datenlookups und ähnlichem aus einem Kontainer-Objekt. Die Tabelle darf nur lesend verwendet werden, muss sich jedoch nicht auf der Connection des Kontainers befinden.

Parameter

oOwner:O | Kontainer-Objekt
nWorkarea:N | WorkArea der zu holenden Tabelle
cAliasName:C | Alias-Name der Tabelle; default = Leerstring

Rückgabewert

Objekt - Lookup Tabelle

Beispiel

| oDM, oLookup |

oDM     := CreateObject('TBeDBGet'),

oLookup := DBGetLookup(oDM, waDAB010),

WriteLn(oLookup:BEZ1),

Siehe auch:

DBGetMemTable()

DBGetTable()


DBGetMemTable()

DBGetMemTable() – Memory Table für Kontainer erzeugen

Beschreibung

Die Funktion erzeugt oder holt eine Memory-Tabelle, mit der Feld-Struktur der Tabelle der angegebenen Workarea, aus einem Kontainer-Objekt.

Parameter

oOwner:O | Kontainer-Objekt
nWorkarea:N | WorkArea der zu holenden Tabelle
cAliasName:C | Alias-Name der Tabelle; default = Standard-Tabelle

Rückgabewert

Objekt - Memory Table

Beispiel

| oDM, oMemTable |

oDM       := CreateObject('TBeDBGet'),

oMemTable := DbGetMemTable(oDM, waDAB000),

DBInsert(oMemTable),

oMemTable:NAME1 := 'Hans Mustermann',

DBPost(oMemTable),

WriteLn(oMemTable:NAME1),

Siehe auch:

DBGetLookup()

DBGetTable()


DBGetTable()

DBGetTable() – Tabelle für Kontainer erzeugen

Beschreibung

Die Funktion erzeugt oder holt eine Tabelle zur Datenverarbeitung und transaktionsgestützten Nutzung aus einem Kontainer-Objekt (Datenmodul).

Sie darf zum Lesen und Schreiben verwendet werden und befindet sich immer auf der Connection des Kontainers.

Parameter

oOwner:O | Kontainer-Objekt (Datenmodul)
nWorkarea:N | WorkArea der zu holenden Tabelle
cAliasName:C | Alias-Name der Tabelle; Standard-Tabelle; bei globalem Datenmodul nur Großschreibung verwenden

Rückgabewert

Objekt - Tabelle

Beispiel

| oDM, oTable |

oDM    := CreateObject('TBeDBGet'),

oTable := DBGetTable( oDM, waDAB010),

oTable:ARTNR

Siehe auch:

DBGetLookup()

DBGetMemTable()


DBGoBottom()

DBGoBottom() – Auf letzten Datensatz positionieren

Beschreibung

Die Funktion springt zum letzten Datensatz der Tabelle.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbLast()

Parameter

aTable:U

Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Keiner

Beispiel

| oDab000:DB := 'waDAB000' |

DBGoBottom(oDab000),

WriteLn(oDab000:KDNR),

Siehe auch:

DBGoTo()

DBGoTop()

DBSeek()


DBGoTo()

DBGoTo() – Auf Datensatz positionieren

Beschreibung

Die Funktion springt zu dem Datensatz wo REC_NO gleich aRecNo ist.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbGoTo()

Parameter

aRecNo:U | REC_NO des Datensatzes zu dem gesprungen werden soll
aTable:O | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Logisch / Boolean - Positionierung erfolgreich

Beispiel

| oDM, oTable |

oDM    := CreateObject('TBEDBGet'),

oTable := DBGetTable(oDM, waDAB010),

if DBGoTo(12, oTable) then

   WriteLn(oTable:ARTNR),

endif,

Siehe auch:

DBGoBottom()

DBGoTop()

DBSeek()


DBGoTop()

DBGoTop() – Auf ersten Datensatz positionieren

Beschreibung

Die Funktion springt zum ersten Datensatz der Tabelle.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbFirst()

Parameter

aTable:O

Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Keiner

Beispiel

| oDab000:DB := 'waDAB000, 1', nX |

DBGoTop(oDab000),

nX := 0,

while not EoF(oDab000) and nX <= 100 do

   WriteLn(oDab000:KDNR),

   DBSkip(1, oDab000),

   nX++

end,

Siehe auch:

DBGoBottom()

DBGoTo()

DBSeek()


DBIndex()

DBIndex() – Index erstellen

Beschreibung

Die Funktion erstellt einen neuen Index für eine Tabelle. Falls dieser erfolgreich erstellt wurde, ist der neue Index sofort aktiv.

Hinweis

Die übergebene Tabelle muss aktiv sein.

Parameter

aExpression:C | Datenbankfeld oder Ausdruck mit dem indiziert werden soll
aIndexName:C | Name der Indexdatei ohne Extension
aCondition:C | Bedingung, die erfüllt sein muss, damit ein Datensatz in den neuen Index aufgenommen wird default = Leerstring
aOptions:N | Index-Optionen default = 0; Um Optionen zu kombinieren, müssen die Zahlen logisch mit _OR() verknüpft werden: 1 - UNIQUE (eindeutig); 2 - COMPOUND (zusammengesetzt); 4 - DESCENDING (absteigend)
aTable:O | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Logisch / Boolean - Index erfolgreich erstellt

Beispiel

| oTable |

//******************************************************************************

// Tabelle erstellen

//******************************************************************************

function CreateTable()

   | cPfad, aTableName, aFields |

   startseq,

      cPfad := mbedefault + '\TransaktionsLog',

      if not ForceDirectories(cPfad) then

         SetError('Verzeichnis <' + cPfad + '> kann nicht erstellt werden'),

      endif,

      aTableName := cPfad + '\Transaktionen.ADT',

      aFields    := {{'DATUMZEIT', 'C', 19, 0},

                     {'USER',      'C',  3, 0},

                     {'ID',        'N',  8, 0}},

      Result     := nil,

      Result     := DBCreate(aTableName,  aFields),

      if empty(Result) then

         SetError('Tabelle <' + aTableName + '> wurde nicht erstellt'),

      endif,

      Result.Active := true,    // Tabelle muss für die Indizierung aktiv sein!

      DBIndex('ID', 'ID', '', 2, Result),

   onerror,

      SetError('"CreateTransLogTables()": ' + GetErrorText()),

   stopseq,

end,

oTable := CreateTable(),

DBAppend(oTable),

oTable:DatumZeit := FormatDateTime('YYYY-MM-DD HH:NN:SS', Now()),

oTable:User      := c_usr,

oTable:ID        := 1,

DBPost(oTable),

oTable.Active    := false,


DBIndexList()

DBIndexList() – Liste der Indices einer Tabelle

Beschreibung

Die Funktion gibt ein mehrdimensionales Array zurück, in welchem der Dateiname, Bezeichnung, Indexausdruck, Indexbedingung und Optionen enthalten sind.

Parameter

aWorkArea:N

Nummer der BE-Datenbank

Rückgabewert

Array - Index-Liste.

Format:

 {

   { Dateiname, Bezeichnung, Indexausdruck, Indexbedingung , UNIQUE, COMPOUND, DESCENDING },

   { ..., ..., ..., ..., ..., ..., ... }

 }

Beispiel

| oDab100:DB := 'waDAB100', aIndexL |

aIndexL := DBIndexList(oDab100.workarea),

WriteLn(aIndexL[1]),

aIndexL := DBIndexList(5),

WriteLn(aIndexL[1, 3])


DBInsert()

DBInsert() – Datensatz einfügen

Beschreibung

Die Funktion fügt einen neuen Datensatz an eine Tabelle an. Nach dem Aufruf von DBInsert() können Werte für die Datenfelder des neuen Datensatzes zugewiesen werden. Um den neuen Datensatz zu speichern, muss die Funktion DBPost() aufgerufen werden.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbInsert()

DBInsert() löst keine Exception aus, falls der Vorgang nicht möglich war und UseDbExceptions nicht gesetzt ist (default).

oTable.CbInsert() löst hingegen immer eine Exception aus, wenn der Vorgang nicht möglich war.

Parameter

aTable:U

Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Logisch / Boolean - Einfügen erfolgreich

Beispiel

| oDab000:DB := 'waDAB000', aKdNr |

DBGoBottom(oDab000),

WriteLn(oDab000:KDNR),

WriteLn(oDab000:NAME1),

aKdNr := oDab000:KDNR + 1,

DBInsert(oDab000),

oDab000:KDNR  := aKdNr,

oDab000:NAME1 := "Neue Firma (TEST!)",

DBPost(oDab000),

DBGoBottom(oDab000),

WriteLn(oDab000:KDNR),

WriteLn(oDab000:NAME1),

Siehe auch:

DBAppend()

DBCancel()

DBEdit()

DBPost()


DBInTrans()

DBInTrans() – Transaktionszustand abfragen

Beschreibung

Die Funktion überprüft, ob sich die Datenbank in einer Transaktion befindet.

Parameter

keine Parameter erwartet

Rückgabewert

Logisch / Boolean - Transaktion aktiv

Beispiel

startseq,

   DBStartTrans(),

   WriteLn('------'),

   WriteLn('Verschiedene Datenbankoperationen ausführen'),

   WriteLn('------'),

   iif(JN('Änderungen übernehmen?'), DBCommit(), DBRollBack()),

onerror,

   DBRollBack(),

stopseq,

if DBInTrans() then

   Meld('Transaktion läuft'),

else

   Meld('Transaktion beendet'),

endif,

Siehe auch:

DBCommit()

DBRollBack()

DBStartTrans()


DBLinkTable()

DBLinkTable() – Tabelle mit Datenmodul verbinden

Beschreibung

Die Funktion verbindet eine bereits existierende Tabelle mit einem Kontainer-Objekt (Datenmodul).

Hinweis

Im Gegensatz zu den DBGet...()-Funktionen kann mit der DBLinkTable()-Funktion eine bereits existierende Tabelle mit einem "TBeDBGet"-Kontainer (Datenmodul) verbunden werden.

Nach Erstellen den Verbindung, kann die Tabelle über DBGetLookup() geholt werden. Ein Holen der Tabelle mit DBGetTable() ist nur möglich, falls die Tabelle sich bereits auf der Connection des Datenmoduls befindet.

Die Tabelle muss eine im Datenmodul eindeutige Workarea / Alias-Kombination besitzen.

Parameter

oBeDBGet:O | Kontainer-Objekt (ausschließlich TBeDBGet-Objekt)
oTable:O | Tabellen-Objekt

Rückgabewert

Keiner

Beispiel

| oDM, oTable:DB := 'waDAB000', oTable2 |

oDM     := CreateObject('TBeDBGet'),

oTable2 := DBGetTable(oDM, waDAB010),

DBLinkTable(oDM, oTable),

Siehe auch:

DBUnLinkTable()


DBLocate()

DBLocate() – Nach Datensatz suchen

Beschreibung

Die Funktion sucht in einer Tabelle nach einem frei definierbaren Wert über frei definierbare Felder.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbLocate()

Parameter

aKeyFields:C | Feldnamen der Felder die durchsucht werden sollen. Durch Semikolon getrennt: 'Feld1;Feld2'
aKeyValues:U | Suchbegriffe als Array: { Wert1, Wert2 }; Wobei sich Wert1 immer auf Feld1 bezieht und Wert2 immer auf Feld2
aOptions:N | Optionen loCaseInsensitive - Schlüsselfelder und Schlüsselwerte werden ohne Berücksichtigung der; Groß-/Kleinschreibung verglichen. loPartialKey - Schlüsselwerte müssen nicht vollständig übereinstimmen. Beispielsweise könnte der String 'HAMMER' sowohl mit 'HAM' als auch mit 'HAMM' gesucht werden.
aTable:U | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Logisch - Suche erfolgreich

Beispiel

| oDab010:DB := 'waDAB010' |

DBLocate('ARTNR;BEZ1', {'LS-200', 'Verbinder, 2-fach'}, 0, oDab010)


DBLock()

DBLock() – Datensatz sperren

Beschreibung

Die Funktion sperrt einen Datensatz. Der Datensatz kann solange von anderen Benutzern nicht mehr editiert werden, bis die Datensatzsperre mit DBUnlock() wieder aufgehoben wird.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbLockRecord()

Parameter

aTable:O

Bezugstabellen-Objekt; default = Standard-Tabelle

Rückgabewert

Logisch / Boolean - Sperren erfolgreich

Beispiel

| oDab010:DB := 'waDAB010, DAB011', oDab010_2:DB := 'waDAB010, DAB011' |

startseq,

   DBGoTop(oDab010),

   if DBLock(oDab010) then

      DBGoTop(oDab010_2),

      DBEdit(oDab010_2),

      oDab010_2:ARTNR := 'Test-Artikel',

      DBCancel(oDab010_2),

   endif,

onerror

   Meld('Datensatz kann nicht editiert werden, da er gesperrt ist'),

stopseq,

Siehe auch:

DBUnLock()


DBOldVal()

DBOldVal() – Alter Wert eines Datenbankfeldes

Beschreibung

Die Funktion gibt nach einem DBEdit() und vor dem nächsten DBPost() den ursprüglichen Wert eines Datenbankfeldes zurück.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbOldValue()

Parameter

aFieldName:C | Name des Datenfeldes
aTable:U | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Alphanumerisch - Alter Wert

Beispiel

| oDab010:DB := 'waDAB010', cOld |

DBGoTop(oDab010),

DBEdit(oDab010),

oDab010:ARTNR := 'Test',

cOld          := DBOldVal('ARTNR', oDab010),

oDab010:ARTNR := cOld,

DBPost(oDab010),


DBOpen()

DBOpen() – Tabelle öffnen

Beschreibung

Die Funktion öffnet eine Tabelle.

Parameter

aWorkArea:U | Nummer der BE-Datenbank
aTableName:C | Name der Tabelle; default = Leerstring
aConnection:O | Connection-Objekt; default = null();

Rückgabewert

Objekt - Geöffnete Tabelle

Beispiel

| oTable, cString |

oTable := DBOpen(waDAB000, 'C:\temp\test'),

DBEdit(oTable),

oTable:TEST := 12,

DBPost(oTable),


DBPost()

DBPost() – Datensatz abspeichern

Beschreibung

Die Funktion schreibt die nach DBEdit() zugewiesenen neuen Werte der Datenfelder in die Tabelle.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbPost()

DBPost() löst keine Exception aus, falls der Vorgang nicht möglich war und UseDbExceptions nicht gesetzt ist (default).

oTable.CbPost() löst hingegen immer eine Exception aus, wenn der Vorgang nicht möglich war.

Parameter

aTable:U

Bezugstabelle; default = Standardtabelle

Rückgabewert

Logisch / Boolean - Speichern erfolgreich

Beispiel

| oTable, cString |

oTable := DBOpen(waDAB000, 'C:\temp\test'),

DBEdit(oTable),

oTable:TEST := 12,

DBPost(oTable),

Siehe auch:

DBAppend()

DBCancel()

DBEdit()

DBInsert()


DBRec2CSV()

DBRec2CSV() – Datensatz in CSV

Beschreibung

Die Funktion formatiert einen Datensatz in einen "Comma Seperated Value"-String.

Parameter

aFields:A | Array mit Feldnamen; default = Unassigned (Alle Felder)
aHeader:L | Ausgabe des FeldHeaders; default = false
aDateFormat:C | Bei Datumsfeldern Ausgabe im entsprechenden Format; default = Leerstring
aTable | Tabellenobjekt; default = Standardtabelle

Rückgabewert

Alphanumerisch - Datensatz als CSV-String

Beispiel

| oDAB010:DB := 'waDAB010, DAB011' |

DBRec2CSV(,,, oDAB010)


DBRecNo()

DBRecNo() – Nummer des aktuellen Datensatzes

Beschreibung

Die Funktion gibt die REC_NO Nummer des aktuellen Datensatzes zurück. REC_NO entspricht nicht zwingend der Position eines Datensatzes.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbRecNo

Parameter

aTable:O

Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Numerisch - REC_NO

Beispiel

| oDab010:DB := 'waDAB010, DAB011' |

DBGoTop(oDab010),

WriteLn(DBRecNo(oDab010)),


DBRefresh()

DBRefresh() – Datenbank aktualisieren

Beschreibung

Die Funktion aktualisiert die angegebene Datenbank, d.h. alle Datensätze werden erneut eingelesen.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbRefresh()

Parameter

aTable:U

Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Logisch / Boolean - Refresh erfolgreich

Beispiel

DBRefresh(oTable)


DBRelation()

DBRelation() – Tabellen verbinden

Beschreibung

Die Funktion verbindet zwei geöffnete Tabellen über einen Ausdruck miteinander. Ist Parameter 3 (nicht 4!) das Tabellenobjekt für die Mastertabelle, dann kann Parameter 4 entfallen und der ursprüngliche Parameter 3 wird mit dem Defaultwert (.F.) initialisiert. Ist gar kein Parameter angegeben, dann werden alle Relationen für die Tabelle aufgehoben!

Parameter

aRelFunction:C | Ausdruck, über den der Schlüssel für die Detailtabelle berechnet werden kann; default = Leerstring
aDetailTable:O | Detailtabelle (muss aktiv sein!); default = Default-Tabelle
aDoAddRel:U | Gibt an ob bestehende Relation bestehen bleiben sollen (.T.) oder gelöscht werden sollen (.F.); default = false
aMasterTable | Mastertabelle mit der die Detailtablle synchronisiert wird; default = Default-Tabelle

Rückgabewert

Objekt - Relationsobjekt

Beispiel

| oDab000:DB := 'waDAB000', oDab005:DB := 'waDAB005' |

DBRelation('"K" + Str(KDNR,8)', oDab005, oDab000),

DBFilter("kdnr <= 16000", odab000),

DBGoTop(oDab000),

while not EoF(oDab000),

   WriteLn(Str(oDab000:KDNR) + " " + oDab000:NAME1),

   while not Empty(oDab005:NAME) and oDab005:PERSNR = oDab000:KDNR do

      WriteLn(Space(2) + oDab005:NAME),

      DBSkip(1, oDab005)

   end,

   WriteLn(""),

   DBSkip(1, oDab000),

end,


DBReplace()

DBReplace() – Tabellen verbinden

Beschreibung

Die Funktion ersetzt den Wert eines Datenbankfeldes. Die Tabelle des Feldes muss sich im Editmodus befinden (DBEdit()) und die Änderungen müssen über DBPost() gespeichert werden.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbReplace()

Parameter

aField:U | Feld-Objekt ( z.B. durch DBField() )
aNewValue:U | Neuer Wert

Rückgabewert

Logisch / Boolean - Ersetzen erfolgreich

Beispiel

| oDab010:DB := 'waDAB010' |

DBEdit(oDab010),

DBReplace(DBField('ARTNR', oDab010), 'Test-ARTNR'),

iif(JN('Wollen Sie tatsächlich speichern?'), DBPost(oDab010), DBCancel(oDAb010)),


DBResetDM()

DBResetDM() – Datenmodul in Ursprungszustand versetzen

Beschreibung

Alle Tabellen im Datenmodul werden in ihren ursprünglichen Zustand versetzt.

- der Bearbeitungs-Modus wird abgebrochen

- alle Datensatz-Sperren werden aufgehoben

- ein evtl. vorhandener Filter wird entfernt

- ein evtl. gesetzter Scope/Range wird entfernt

- der erste verfügbare Index wird aktiviert

Parameter

oBeDbGet:O | Objekt der Klasse TBeDbGet (Datenmodul)
lRollback:L | True - Aktive Transaktion des Datenmoduls wird abgebrochen; Default = False

Rückgabewert

Keiner - Exception bei Fehler

Beispiel

| oDM, oDab010 |

// das Beispiel geht davon aus, dass es Artikel mit

// Artikel-Gruppe 1 oder 2 und Artikel ohne Artikelgruppen-Zuordnung gibt

oDM := CreateObject('TBeDbGet'),

startseq

   WriteLn('-- Artikel-Gruppe 1/2 --'),

   oDab010           := DbGetTable(oDM, waDAB010),

   oDab010.IndexName := 'DAB013',

   DBScope({1}, {2}, oDab010),

   DBGoTop(oDab010),

   while not EoF(oDab010) do

      WriteLn(oDab010:BEZ2),

      DBSkip(1, oDab010),

   end,

   DBResetDM(oDM), // der auf der Dab010 gesetzte Scope wird hier aufgehoben

   WriteLn('-- Keine Artikel-Gruppe --'),

   DBFilter('ARTGRUPPE = 0', oDab010),

   WriteLn(oDab010:BEZ2),

onerror,

   DBResetDM(oDM), // Im Fehlerfall wird das Datenmodul in den Ursprungszustand

                   // versetzt (wichtig, falls das Datenmodul in anderen

                   // Programmteilen weiter verwendet würde, o.ä.).

stopseq,

DestroyObject(oDM),

Siehe auch:

DBCancel()

DBCancelAll()

DBFilter()

DBScope()

DBUnLock()


DBReturnDataModuleToPool()

DBReturnDataModuleToPool() – DatenModul zurückgeben

Beschreibung

Die Funktion gibt ein DatenModul-Objekt (TBeDbGet), das mit DBGetDataModuleFromPool() aus dem DatenModul-Pool geholt wurde, wieder an den Pool zurück.

Parameter

oBeDBGet:O

DatenModul-Objekt, das wieder an den Pool zurückgegeben wird

Rückgabewert

Undefiniert

Beispiel

siehe DBGetDataModuleFromPool

Siehe auch:

DBGetDataModuleFromPool()


DBRollBack()

DBRollBack() – Transaktion löschen

Beschreibung

Die Funktion löscht alle Befehle aus einer Transaktion und beendet diese.

Parameter

keine Parameter erwartet

Rückgabewert

Logisch / Boolean - Beenden erfolgreich

Beispiel

startseq,

   DBStartTrans(),

   WriteLn('------'),

   WriteLn('Verschiedene Datenbankoperationen ausführen'),

   WriteLn('------'),

   iif(JN('Änderungen übernehmen?'), DBCommit(), DBRollBack()),

onerror,

   DBRollBack(),

stopseq,

Siehe auch:

DBCommit()

DBInTrans()

DBStartTrans()


DBScope()

DBScope() – Sichtbereich einer Tabelle setzen

Beschreibung

Die Funktion begrenzt die sichtbaren Datensätze einer Tabelle. Es muss ein gültiger Index auf der Tabelle aktiv sein. Falls aTopScope:U gleich null() ist, wird die Begrenzung der Tabelle aufgehoben.

Hinweis

Ab Version 6.5 stehen nun alternativ direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbSetRange()

oTable.CbSetRangeEx()

oTable.CbCancelRange()

Parameter

aTopScope:U | Scope-Beginn
aBottomScope:U | Scope-Ende; default = null()
aTable:U | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Keiner

Beispiel

| aStartNo:N := 70000, aStopNo:N := 80000, oDab000:DB := 'waDAB000' |

DBScope({aStartNo}, {aStopNo}, oDab000), // Array-Schreibweise funktioniert für DBF- und ADT-Tabellen

DBGoTop(oDab000),

while not EoF(oDab000) do

   WriteLn(oDab000:KdNr),

   Skip(1, oDab000),

end,

DBScope(nil, oDab000),

DBGoTop(oDab000),

WriteLn(oDab000:KdNr)

Siehe auch:

DBFilter()

DBGoBottom()

DBGoTop()


DBSeek()

DBSeek() – Datensatz suchen

Beschreibung

Die Funktion sucht einen Datensatz, gemäß dem Suchkriterium von aKey.

Hinweis

&#183 Ab Version 6.5 stehen nun alternativ direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung:
oTable.CbFindKey()
oTable.CbFindNearest()

&#183 Ab Version 6.5.65.222 sollte aKey immer als Array übergeben werden. Deshalb wird beim Syntax-Test eine Warnung ausgegeben, wenn dies nicht der Fall ist.

Parameter

aKey:U | Schlüssel / Suchkriterium
aTable:O | Bezugstabelle; default = Standard-Tabelle
aSoftSeek:L | Softseek. Nicht nur ein exakter Treffer sondern auch ein teilweiser Treffer (aKey = 'Musterwort', Datensatz = 'Muster') zählt als gefunden; default = false

Rückgabewert

Logisch / Boolean - Datensatz gefunden

Beispiel

| oDab000:DB := 'waDAB000', oDab010:DB := 'waDAB010' |

if DBSeek({Str(3, 8)}, oDab000) then

   WriteLn(oDab000:Name1)

endif,

if DBSeek({'L'}, oDab010, true) then

   WriteLn(oDab010:ARTNR)

endif,

Siehe auch:

DBGoBottom()

DBGoTo()

DBGoTop()


DBSkip()

DBSkip() – Datensatz wechseln

Beschreibung

Mit dieser Funktion wird der Zeiger um aRecCount:N Datensätze verschoben.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbNext()

oTable.CbPrior(),

Parameter

aRecCount:N | Anzahl um wie viele Datensätze der Zeiger verschoben werden soll
aTable:U | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Logisch / Boolean - Verschieben erfolgreich

Beispiel

| nX, oDab000:DB := 'waDAB000' |

nx := 0,

DBScope(Str(5000, 8), Str(80000, 8), oDab000),

DBGoTop(oDab000),

while not EoF(oDab000) do

   nX++,

   DBSkip(1,oDab000),

end,

nx


DBSQLTableName()

DBSQLTableName() – Tabellenname für SQL

Beschreibung

Die Funktion gibt den Tabellennamen zzgl. Aliasnamen für SQL Abfragen aus.

Parameter

nWorkarea | Nummer der Workarea
bAlias | Anzeige des Alias; default = false

Rückgabewert

Alphanumerisch - Tabellenname

Beispiel

DBSQLTableName(waDAB000, true)


DBStartTrans()

DBStartTrans() – Transaktion starten

Beschreibung

Die Funktion startet eine Transaktion. Während einer Transaktion können mehrere Datenbankoperationen auf der Datenbank nacheinander abgearbeitet werden. Wenn keine Transaktion gestartet wird, würden sich Edit(), Delete(), Insert() usw., die gleichzeitig von mehreren Programmen ausgeführt werden, sich gegenseitig behindern und das Ergebnis womöglich verfälschen. Mit DBRollBack() können alle Aktionen einer Transaktion rückgängig gemacht werden. DBCommit() beendet eine Transaktion.

Parameter

keine Parameter erwartet

Rückgabewert

Logisch / Boolean - Transaktionsbeginn

Beispiel

startseq,

   DBStartTrans(),

   WriteLn('------'),

   WriteLn('Verschiedene Datenbankoperationen ausführen'),

   WriteLn('------'),

   iif(JN('Änderungen übernehmen?'), DBCommit(), DBRollBack()),

onerror,

   DBRollBack(),

stopseq,

Siehe auch:

DBCommit()

DBInTrans()

DBRollBack()


DBState()

DBState() – Status der Datenbank

Beschreibung

Die Funktion gibt den Status der Datenbank wieder.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbState

Parameter

aTable:U

Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Numerisch

  0           dsInactive      // Inaktiv

  1           dsBrowse        // Browse

  2           dsEdit          // Editmodus

  3           dsInsert        // Einfügen

  4           dsSetKey        // Schlüssel setzen

  5           dsCalcFields    // Calc Felder

  6           dsFilter        // Filtern

  7           dsNewValue      // Neuer Wert

  8           dsOldValue      // Alter Wert

  9           dsCurValue      // Jetziger Wert

  10          dsBlockRead     // Block lesen

  11          dsInternalCalc  // Internal Calc

  12          dsOpening       // Öffnen

Beispiel

| oDab010:DB := 'waDAB010' |

if not(DBState(oDab010) = dsedit) then

   DBEdit(oDab010),

endif,

oDab010:BEZ1 := 'test',

iif(JN('Änderungen wircklich speichern?'), DBPost(oDab010), DBCancel(oDab010)),


DBType()

DBType() – Typ des Datenbankfeldes

Beschreibung

Die Funktion gibt den Typ eines Datenfeldes zurück.

Parameter

aFieldName:C | Feldname
aTable:U | Bezugstabelle; default = Standard-Tabelle

Rückgabewert

Alphanumerisch - Datentyp des Feldes

Beispiel

| oDab000:DB := 'waDAB000' |

WriteLn(DBType('KDNR', oDAB000)),

WriteLn(DBType('PLZORT', oDAB000)),


DBUnLinkTable()

DBUnLinkTable() – Tabelle von Datenmodul lösen

Beschreibung

Die Funktion löst die Verbindung einer existierenden Tabelle von einem Kontainer-Objekt (Datenmodul).

Parameter

oBeDBGet:O | Kontainer-Objekt (ausschließlich TBeDBGet-Objekt)
oTable:O | Tabellen-Objekt

Rückgabewert

Keiner

Siehe auch:

DBLinkTable()


DBUnLock()

DBUnLock() – Datensatz entsperren

Beschreibung

Die Funktion entsperrt einen Datensatz, der zuvor mit DBLock() gesperrt wurde.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbUnLockRecord()

Parameter

aTable:O

Bezugstabellen-Objekt; default = Standard-Tabelle

Rückgabewert

Logisch / Boolean - Entsperren erfolgreich

Siehe auch:

DBLock()


DBUseExceptions()

DBUseExceptions() – Exception-Handling für Datenbank-Funktionen

Beschreibung

Die Funktion bietet die Möglichkeit, die Datenbankfunktionen auf Exception-Handling umzustellen. Die Umstellung gilt nur für den aktuellen Codeblock. Globale Funktionen verhalten sich wie der Kontext, aus dem sie aufgerufen werden. In diesen Funktionen sollten möglichst keine Änderungen am Exception-Handling vorgenommen werden. Falls es doch notwendig ist, muß vor dem Verlassen der globalen Funktion der alte Wert zurückgeschrieben werden. Module, die per Call() aufgerufen werden, sind kontextunabhängig und ändern ihr Verhalten nicht.

Der Rückgabewert von DBUseExceptions ist die vorherige Einstellung.

Der Vorgabewert für jeden Codeblock ist False, d.h. alle Datenbankfunktionen arbeiten per Default ohne Exceptions.

Vergleich des Verhaltens

Zuweisungen auf geschützte Datenbank-Felder erzeugen im Exception-Modus einen Laufzeitfehler. Folgende Funktionen weisen ein geändertes Verhalten auf:

Funktion:     Fehler             Rückgabe          mit Exception

                                 ohne Exception    Laufzeitfehler

=================================================================

AsString      Falsches Argument  EmptyValue        Abort()

AsVariant     Falsches Argument  EmptyValue        Abort()

DbAppend      Falsches Argument  .F.               Abort()

              Rechtefehler       .F.               Abort()

DbCancel      Falsches Argument  .F.               Abort()

              Rechtefehler       .F.               Abort()

DbDelete      Falsches Argument  .F.               Abort()

              Rechtefehler       .F.               Abort()

DbEdit        Falsches Argument  .F.               Abort()

              Rechtefehler       .F.               Abort()

DbFCount      Falsches Argument   0                Abort()

DbGoBottom    Falsches Argument  EmptyValue        Abort()

DbGoTop       Falsches Argument  EmptyValue        Abort()

DbInsert      Falsches Argument  .F.               Abort()

              Rechtefehler       .F.               Abort()

DbOldVal      Falsches Argument  EmptyValue        Abort()

DbPost        Falsches Argument  .F.               Abort()

              Rechtefehler       .F.               Abort()

DbRefresh     Falsches Argument  .F.               Abort()

DbReplace     Falsches Argument  .F.               Abort()

              Rechtefehler       .F.               Abort()

DbState       Falsches Argument  .F.               Abort()

DbType        Falsches Argument  Leerstring        Abort()

BoF           Falsches Argument  .F.               Abort()

EoF           Falsches Argument  .F.               Abort()

DbRecNo       Falsches Argument   0                Abort()

LastRec       Falsches Argument   0                Abort()

DbReplace     Falsches Argument  .F.               Abort()

              Rechtefehler       .F.               Abort()

DbSkip        Falsches Argument  .F.               Abort()

DbSeek        Falsches Argument  .F.               Abort()

DbOpen        Fehler beim Öffnen EmptyValue        Abort()

DbRecNo       Falsches Argument  -1                Abort()

DbGoTo        Falsches Argument  .F.               Abort()

DbLock        Falsches Argument  .F.               Abort()

DbUnlock      Falsches Argument  .F.               Abort()

DbFilter      Falsches Argument  EmptyValue        Abort()

DbIndex       Falsches Argument  .F.               Abort()

              Nicht ausgeführt   .F.               Abort()

DbZap         Falsches Argument  .F.               Abort()

              Nicht ausgeführt   .F.               Abort()

Parameter

aDoUse:L

Exception-Handling aktivieren / deaktivieren

Rückgabewert

Logisch - Wert der vorherigen Einstellung

Beispiel

// Beispiel im alten Modus:

// ------------------------

| oDab000:DB := 'waDAB000, 1', aFehler |

aFehler := .T.,

If DbEdit(oDab000) then

   If DbReplace(DbField('NAME1', 'XXX') then

      If DbPost(oDab000) then

         aFehler := .F.,

      EndIf,

   EndIf,

EndIf,

WriteLn('Kundenname ' + If(aFehler, 'nicht ', '') + 'geändert!')

 Beispiel im neuen Modus:

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

| oDab000:DB := 'waDAB000, 1', aFehler |

StartSeq

   DbEdit(oDab000),

   DbReplace(DbField('NAME1', oDab000), 'XXX'),

   DbPost(oDab000),

   aFehler := .F.,

OnError

   aFehler := .T.,

StopSeq,

WriteLn('Kundenname ' + If(aFehler, 'nicht ', '') + 'geändert!')


DBZap()

DBZap() – Tabelle komplett leeren

Beschreibung

Die Funktion löscht den gesamten Inhalt einer Tabelle.

Hinweis

Die Tabelle muss geöffnet sein. Ist die Tabelle nicht exklusiv geöffnet, dann wird sie geschlossen und es wird versucht, sie exklusiv zu öffnen. Mit dieser Funktion können keine BE-Tabellen bearbeitet werden! BE-Tabellen sind alle Tabellen, deren physikalischer Dateiname mit den Zeichenfolgen 'DAB', 'DF', DJ' oder 'BE' beginnt.

Parameter

aTable:O

Tabellenobjekt

Rückgabewert

Logisch - Löschung erfolgreich

Siehe auch:

DBDelete()


EoF()

EoF() – Tabellenende erreicht

Beschreibung

Die Funktion gibt zurück, ob die Tabelle auf dem letzten Datensatz steht. ("end of file")

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbEoF

Parameter

aTable:U

Bezugstabelle; default = Standardtabelle

Rückgabewert

Logisch / Boolean - Ende der Tabelle

Siehe auch:

BoF()


GetBookMarkEx()

GetBookMarkEx() - Information über Index / Scope / Filter einer Tabelle ermitteln

Beschreibung

Die Funktion gibt ein Objekt vom Typ TBookMarkEx zurück, welches detaillierte Information über den aktuellen Zustand einer Tabelle (keine MemTable) bzgl. gesetztem Index / Scope / Filter enthält.

Hinweis

Das übergebene Tabellen-Objekt muss sich im Status dsbrowse befinden, da GetBookMarkEx() einen evtl. gesetzten Editmodus verwerfen würde.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbGetBookmarkEx()

Parameter

oDataSet

Tabellen-Objekt

Rückgabewert

Objekt vom Typ TBookMarkEx

Beispiel

| oTable, oDM, oBookMark, i, cResult, aIndexList, cIndexFields |

startseq,

   oDM              := CreateoBject('TBeDbGet'),

   oTable           := DBGetTable(oDM, waDAB010),

   oTable.IndexName := 'DAB011',

   // Filter + Scope setzen

   DBFilter("ARTNR >= 'A' and ARTNR <= 'B'", oTable),

   DBScope({'A'}, {'B'}, oTable),

   aIndexList   := DBIndexList(oTable.Workarea),

   cIndexFields := '',

   for i := 1 to aLen(aIndexList) do

      if aIndexList[i, 2] == oTable.IndexName then

         cIndexFields := aIndexList[i, 3],

      break,

      endif,

   next,

  oBookMark := GetBookMarkEx(oTable),

  cResult   := 'Tabelle aktiv  : ' + if(oBookMark.Active, 'Ja', 'Nein')   + crlf +

               ' Filter'           + crlf +

               '   aktiv       : ' + if(oBookMark.Filtered, 'Ja', 'Nein') + crlf +

               '   Filter      : ' + AllTrim(oBookMark.Filter)            + crlf +

               '   AdsFilter   : ' + AllTrim(oBookMark.AdsFilter)         + crlf +

               ' Scope / Range'    + crlf +

               '   Scope (alt) : ' + if(oBookMark.IsScope, 'Ja', 'Nein')  + crlf +

               '   Range       : ' + if(oBookMark.IsRange, 'Ja', 'Nein')  + crlf +

               '   Index       : ' + AllTrim(oBookMark.IndexOrder)        + crlf +

               '   Felder      : ' + cIndexFields                         + crlf +

               '   TopScope    : ' + AllTrim(oBookMark.TopScope)          + crlf +

               '   BottomScope : ' + AllTrim(oBookMark.BottomScope),

onerror,

   MessageDlg(GetErrorText()),

stopseq,

DestroyObject(oDM),

DestroyObject(oBookMark),

cResult

Siehe auch:

SetBookMarkEx()


IsEvenRecNo()

IsEvenRecNo() – Datensatz auf gerade Recordnummer prüfen

Beschreibung

Die Funktion prüft, ob die aktuelle Datensatznummer der übergebenen Tabelle eine gerade Zahl ist.

Hinweis

Bei Nachfahren von ADS-Tabellen (also u.a. alle business express Tabellen) wird für die Prüfung die Nummer des logischen Datensatzes unter Beachtung eines gesetzten Index ermittelt. Der erste Datensatz eines Index hat die logische Nummer 1.

Parameter

aTable:O

Tabellenobjekt, Default = Standard-Tabelle

Rückgabewert

Logisch

Beispiel

| oDab065:DB := 'waDAB065, DAB066' |

DBGoTop(oDab065),

WriteLn(DbRecNo(oDab065), IsEvenRecNo(oDab065)),   // Ergebnis: {1; .F.}

DBSkip(1, oDab065),

WriteLn(DbRecNo(oDab065), IsEvenRecNo(oDab065)),   // Ergebnis: {4; .T.}

Siehe auch:

DBRecNo()


IsRecordLocked()

IsRecordLocked() – Sperr-Prüfung eines Datensatzes

Beschreibung

Die Funktion prüft, ob der aktuelle Datensatz vom eigenen oder einem anderen Benutzer gesperrt ist.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbIsRecordLocked()

Parameter

aTable:O

Tabellenobjekt, Default = Standard-Tabelle

Rückgabewert

Logisch

Beispiel

|oDab000:DB:='waDAB000, 1', bIsLocked|

// Datensatz ggf. entsperren

bIsLocked := IsRecordLocked(oDab000),

if bIsLocked then

   DBUnlock(oDab000),

endif,

writeln(IsRecordLocked(oDab000), recno(oDab000)), //.F. (Datensatz nicht gelockt)

DBLock(oDab000),                                  // Datensatz locken

writeln(IsRecordLocked(oDab000), recno(oDab000)), //.T. (Datensatz gelockt)

// Ursprungszustand herstellen

if not bIsLocked then

   DBUnlock(oDab000)

endif,

Siehe auch:

DBLock()

DBUnLock()


LastRec()

LastRec() – Anzahl der Datensätze einer Tabelle

Beschreibung

Die Funktion ermittelt die Anzahl der Datensätze der übergebenen Tabelle über die Ads-Funktion "RecordCount".

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbRecordCount

Parameter

aTable:U

Tabellenobjekt, Default = Standard-Tabelle

Rückgabewert

Numerisch - Anzahl Datensätze

Beispiel

| oDab065:DB := "waDAB065, DAB066" |

LastRec(oDab065)


LookUp()

LookUp()

Beschreibung

Die Funktion führt eine definierte Codeblock-(Rechen-)Operation auf einem per Workarea, Index und Suchwert definierten Datensatz oder einer solchen definierten Datenmenge aus und liefert das Ergebnis zurück.

Hinweis

&#183 Die optionalen Parameter aErrRetVal und aMode sollten optimalerweise immer angegeben werden, insbesondere falls der Lookup in einem Browser, Report oder Maske verwendet wird. Wird kein aErrRetVal angegeben, wird im Fehlerfall u.U. eine endlose Schleife von Fehler-Meldungen angezeigt.

&#183 Ab Version 6.5.65.222 sollte aKey immer als Array übergeben werden. Deshalb wird beim Syntax-Test eine Warnung ausgegeben, wenn dies nicht der Fall ist.

Parameter

aFileNo:N | Workarea
aIndex:U | Indexname, 0 für Suche per Record-Nr.
aKey:U | Typ Character -> Schlüssel; Typ 1-Dim. Array -> enthält [von / bis] Schlüssel; Typ 2-Dim. Array -> enthält Schlüssel [für ADT-Tabellen]; Typ Integer -> Record-Nr.
aExpression:C | Codeblock Funktionsausdruck für Rückgabewert
aErrRetVal:U | Rückgabe im Fehlerfall (Default = leer => Fehlermeldung anzeigen!)
aMode:N | lm_Lookup = LookUp (= Default) lm_Sum = Summe lm_Max = Maximum lm_Min = Minimum lm_Avarage = Durchschnitt lm_RecCount = Anzahl Sätze lm_GroupCount = Anzahl unterschiedlicher Werte
aFilter:C | aMode >= 1 => Bedingung/Filter (Default = leer) aMode = 0 => keine Auswirkung
aLocation:N | aLocation >= 0 => Standort für Filter auf Lookup-Tabelle aLocation = -1 => aktiven Standort für Filter verwenden (= Default) aLocation = -2 => Standortfilter deaktivieren
aForceRefr:L | True = Gefundenen Satz immer aktualisieren (nur LM_LOOKUP) (Default = False)

Rückgabewert

Ergebnis des aExpression Codeblocks, je nach aMode

Beispiel

// Einige Beispiele zu verschiedenen Index-Typen und LookUp-Keys

// (für ADT- und DBF-Tabellen)

// Unter LookUp-Key versteht sich der 3. Parameter (aKey)

// Einfacher (DBF oder ADT) Character-Index (ein Feld, Character):

Index: "ARTNR"

LookUp-Key: {{PadR("MEIN_ART", mBeArtNoLen)}}

// Zusammengesetzter (DBF oder ADT) Character-Index

// (mehrere Felder, auf Character konvertiert):

Index: "ARTNR + STRZERO(KDNR, 8)"

LookUp-Key: {{PadR("MEIN_ART", mBeArtNoLen) + StrZero(4711, 8)}} // oder

LookUp-Key: {{"MEIN_ART", 4711}}

// Einfacher (DBF oder ADT) Nicht-Character-Index (ein Feld, nicht Character):

Index: "KDNR"

LookUp-Key: {{4711}}

// Zusammengesetzter (nur ADT) RAW-Index

// (mehrere Felder, per Semikolon getrennt, Typ egal):

Index: "ARTNR; KDNR"

LookUp-Key: {{"MEIN_ART", 4711}} // oder

LookUp-Key: {{"MEIN_ART", 4711}}

// Beispiel: Workarea 86, Index: "AENR;POSITNR" (beide Felder numerisch)

LookUp(waDIA065, 'AENR', {{33  }},         "not EoF()")

LookUp(waDIA065, 'AENR', {{33,1}},         "not EoF()")

LookUp(waDIA065, 'AENR', {{31,0}, {33,1}}, "not EoF()", 0, LM_RECCOUNT) > 0

LookUp(waDIA065, 'AENR', {{31  }, {33  }}, "not EoF()", 0, LM_RECCOUNT) > 0

// Unzulässige Aufrufe

LookUp(waDIA065, 'AENR', {31},    "not EoF()", false)

LookUp(waDIA065, 'AENR', {31,33}, "not EoF()", 0, LM_RECCOUNT) > 0


RecNo()

RecNo() – Nummer des aktuellen Datensatzes

Beschreibung

Diese Funktion entspricht der Funktion DbRecNo().

Siehe auch:

DBRecNo()


Replace()

Replace()

Beschreibung

Diese Funktion entspricht der Funktion DBReplace().

Siehe auch:

DBReplace()


SetBookMarkEx()

SetBookMarkEx() - Zustand einer Tabelle auf zuvor gespeicherten Zustand setzen

Beschreibung

Die Funktion setzt den Zustand einer Tabelle (keine MemTable) auf einen zuvor mit GetBookMarkEx() ermittelten Zustand zurück. Gesetzt werden Index, Scope und Filter.

Hinweis

Das übergebene Tabellen-Objekt muss sich im Status dsbrowse befinden, da SetBookMarkEx() einen evtl. gesetzten Editmodus verwerfen würde.

Hinweis

Die Funktion sollte ab Version 6.1 nicht mehr verwendet werden. Dafür stehen nun direkte Funktionen der Tabellen (TBeStandardTable, TBeRightsTable, TBeAdsQuery oder TBeMemTable) zur Verfügung.

oTable.CbGoToBookmark()

Parameter

oDataSet:O | Tabellen-Objekt
oBookMarkEx:O | TBookMarkEx-Objekt
lFreeBookmark:L | TBookMarkEx-Objekt nach dem Setzen freigeben; Default = true

Rückgabewert

keiner

Beispiel

| oTable, oDM, oBookMark |

startseq,

   oDM              := CreateoBject('TBeDbGet'),

   oTable           := DBGetTable(oDM, waDAB010),

   oTable.IndexName := 'DAB011',

   // Filter + Scope setzen

   DBFilter("ARTNR >= 'A' and ARTNR <= 'B'", oTable),

   DBScope({'A'}, {'B'}, oTable),

   // aktuelle Einstellungen merken

   oBookMark := GetBookMarkEx(oTable),

   WriteLn('aktueller Filter: ' + oTable.Filter),

   // Filter + Scope verändern

   DBFilter("ARTNR >= 'F' and ARTNR <= 'G'", oTable),

   DBScope({'F'}, {'G'}, oTable),

   WriteLn('aktueller Filter: ' + oTable.Filter),

   // Einstellungen zurücksetzen

   // soll der übergebene oBookMark später noch vewendet werden,

   // muss der Parameter lFreeBookmark = true gesetzt werden,

   // da sonst das Objekt zerstört wird.

   SetBookMarkEx(oTable, oBookMark),

   WriteLn('aktueller Filter: ' + oTable.Filter),

onerror,

   WriteLn(GetErrorText()),

stopseq,

DestroyObject(oDM),

oBookMark

Siehe auch:

GetBookMarkEx()


Skip()

Skip() – Datensatz wechseln

Beschreibung

Diese Funktion entspricht der Funktion DBSkip().

Siehe auch:

DBSkip()


SQL()

SQL() – SQL-Statement im Codeblock definieren

Beschreibung

Die Funktion SQL() kann zum Öffnen von SQL-Abfragen verwendet werden. Der Parameter dieser Funktion ist ein SQL-Statement, dessen Syntax NICHT über den Codeblock geprüft wird. Das Statement wird nicht als String eingegeben, sondern als SQL-Text, d.h. ohne Anführungszeichen. SQL-Text ist ein eigenständiger Typ (S) und zu keinem anderen Codeblock-Typ kompatibel.

Über die Funktion SQLDefaults() können Eigenschaften definiert werden, die bei der Ausführung berücksichtigt werden (Owner-Objekt, ADS-Connection und Open-Modus).

Hinweis

Ein SQL-Text kann Parameter enthalten, die automatisch ersetzt werden sollen.

Ein '&'-Zeichen leitet einen Parameter ein. Ein Parameter ist definiert als:

1) ein Bezeichner

  SQL(Select kdnr from &aMyTableName where kdnr = 4711)

2) ein Funktionsaufruf

  SQL(Select kdnr, name1, name2 from &.DbSqlTableName(1) where kdnr = 4711)

3) ein geklammerter Ausdruck

  SQL(Select * from &@Dab000 where kdnr = &(aKdNr + 1))

Die Parameter werden unmittelbar vor Ausführung des SQL-Statements berechnet. Für die möglichen Ergebnis-Typen einer Parameterberechnung gilt:

1) Ist das Ergebnis eine Zahl, wird diese als Zahl in den SQL-Text eingefügt.

2) Ist das Ergebnis ein Text, wird dieser im Statement automatisch in Anführungszeichen gestellt.

Dies kann unterbunden werden, indem unmittelbar nach dem '&'-Zeichen ein '.' geschrieben wird.

3) Ist das Ergebnis ein logischer Wert, wird entweder True oder False eingesetzt.

4) Ist das Ergebnis ein Datum, wird ein Text in der Form 'YYYY-MM-DD' erzeugt.

5) Ist das Ergebnis ein Objekt, wird eine Exception ausgelöst.

Ein Sonderfall ist der Parameter &@<Alias>. Diese Kombination dient dazu, den Namen einer Tabelle als Parameter einzusetzen.

Im SQL-Statement wird nur während der Optimierung nach Parametern gesucht. Zur Laufzeit werden lediglich die Parameter berechnet und eingesetzt.

Die Position eines Parameters entscheidet über die Reihenfolge der Berechnung. Wird das Zeichen '&' direkt in einem Statement benötigt, muss es doppelt angegeben werden. Die Syntax innerhalb eines Parameters muss regulärer Codeblock-Code sein. Ein fehlerhafter Parameter führt zu einem Syntaxfehler.

ACHTUNG: Diese Funktion kann nicht in globalen Codeblock-Funktionen verwendet werden. Aufgrund der internen Codeblock-Struktur ist dies nicht möglich. Bitte SQL direkt per Query.SQL zuweisen.

Parameter

aStatement:S

SQL-Statement

Rückgabewert

SQL-Query-Objekt (Typ TBeAdsQuery)

Beispiel

| nStart, nStop, oQuery, aOrder |

WriteLn(SQLEngine()),

nStart := 70000,

nStop  := 80000,

aOrder := 'PLZORT',

//

//

//

//

//

oQuery := SQL(Select LiNr, Name1, Name2, Strasse, PlzOrt

              From

              Where LiNr >=

                    LiNr <=

              Order By

             ),

startseq,

   while not EoF(oQuery) do

      WriteLn(oQuery:PlzOrt, oQuery:LiNr, oQuery:Name1),

      DBSkip(1, oQuery),

   end,

always,

   DestroyObject(oQuery)

stopseq,

Siehe auch:

SQLDefaults()

SQLEngine()

SQLStr()


SQLDefaults()

SQLDefaults() – SQL-Default-Eigenschaften setzen

Beschreibung

Mit dieser Funktion werden Standard-Eigenschaften eingestellt, die die Funktion SQL() zum Erzeugen der Abfrage verwendet.

Parameter

aOwner:O | Besitzer des Objektes; Default ist Nil; kann ausgelassen werden;
aConncetion:O | Datenbank-Verbindung, in der die SQL-Abfrage ausgeführt wird;
aOpen:L | Legt fest, ob die Abfrage bereits geöffnet sein soll, wenn das Abfrageobjekt zurückgegeben wird; Default = True

Rückgabewert

Keiner

Siehe auch:

SQL()

SQLEngine()

SQLStr()


SQLEngine()

SQLEngine() – SQL-Engine aktivieren

Beschreibung

Die Funktion SQLEngine() setzt eine registrierte SQL-Engine als aktiv ein. Gleichzeitig liefert die Funktion den Namen der zuletzt aktiven Engine zurück.

Eine Engine steuert das Erscheinungsbild einiger Parameter der SQL-Abfrage, wie z.B die Auflösung des Datumsformates oder die Art wie Tabellen-Namen angegeben werden.

Hinweis

Momentan ist nur eine Engine mit dem Namen 'ADS' registriert.

Parameter

aEngine:C

Name der zu aktivierenden SQL-Engine

Rückgabewert

Alphanumerisch - Name der zuletzt aktiven Engine

Siehe auch:

SQL()

SQLDefaults()

SQLStr()


SQLStr()

SQLStr() – SQL-Statement im Codeblock definieren

Beschreibung

Die Funktion erzeugt einen SQL-Text als Zeichenfolge. Die Funktion der Parameter ist identisch mit der in der Funktion SQL.

ACHTUNG: Diese Funktion kann nicht in globalen Codeblock-Funktionen verwendet werden. Aufgrund der internen Codeblock-Struktur ist dies nicht möglich. Bitte SQL direkt per Query.SQL zuweisen.

Parameter

aStatement:S

SQL-Statement

Rückgabewert

Alphanumerisch

Beispiel

siehe Funktion SQL()

Siehe auch:

SQL()

SQLDefaults()

SQLEngine()


AllTrim()

AllTrim() – Leerzeichen entfernen

Beschreibung

Die Funktion entfernt alle links- und rechtsbündigen Leerzeichen, die am Anfang oder am Ende einer Zeichenkette (String) stehen.

Parameter

aText:C

Beliebige Zeichenkette

Rückgabewert

Alphanumerisch

Beispiel

AllTrim('     Dontenwill   BE     ')   // Ergebnis: 'Dontenwill   BE'

Siehe auch:

LTrim()

RTrim()

Trim()


AnsiToOem()

AnsiToOem() – Ansi-Format in Oem-Format umwandeln

Beschreibung

Die Funktion konvertiert eine Zeichenkette (String) aus dem Ansi-Format in das Oem-Format.

Parameter

aText:C

Text, der umgewandelt werden soll

Rückgabewert

Alphanumerisch

Beispiel

Asc(AnsiToOem('ä'))   // Ergebnis: '132'

Asc('ä')              // Ergebnis: '228'

Siehe auch:

OemToAnsi()


Asc()

Asc() – Ascii-Code eines Zeichens

Beschreibung

Die Funktion gibt den ASCII-Code (Numerisch) des ersten Zeichens einer Zeichenkette (String) zurück.

Parameter

aText:C

Beliebige Zeichenkette

Rückgabewert

Numerisch

Beispiel

Asc('Dontenwill')   // Ergebnis: 68

Asc(CrLf)           // Ergebnis: 13

Siehe auch:

Chr()


At()

At() – Position in Zeichenkette

Beschreibung

Die Funktion gibt die Position des ersten Zeichens einer Zeichenkette innerhalb einer anderen Zeichenkette zurück.

Parameter

aSearchText:C | Gesuchte Zeichenkette
aText:C | Zeichenkette, die durchsucht werden soll

Rückgabewert

Numerisch; wird 0 zurück geliefert wurde die gesuchte Zeichenkette nicht gefunden.

Beispiel

At("ex", "business express")   // Ergebnis: 10

Siehe auch:

RAt()

SubStr()


AttachmentsToText()

AttachmentsToText() – Extrahieren von Texten aus Memoanhängen

Beschreibung

Extrahiert Texte aus Anhängen der Memoverwaltung

Hinweis

Geeignet z.B. für Dab065:DATA und Dab700:ANHANG

Parameter

oField:O | Feldobjekt (-> Funktion DbField )
lGetPdf:L lGetTxt:L lGetRtf:L | Texte aus PDF-Anhängen extrahieren; Default = True; Texte aus TXT-Anhängen extrahieren; Default = True; Texte aus RTF-Anhängen extrahieren; Default = True

Rückgabewert

Alphanumerisch; Texte aus den Anhängen

Beispiel

// Beispiel für Updaterecht in Dab700:Text

| cRes1, cRes2 |

cRes1:= '',

cRes2:= '',

// Angebot, Lieferschein, Rechnung, Bestellung, Reparaturbericht

If BELEG_ART = 10  or

   BELEG_ART = 60  or

   BELEG_ART = 160 or

   BELEG_ART = 230 or

   BELEG_ART = 910 then

   StartSeq

     cRes1:= D700_VoucherAsText('DATEN', Dab700),

   OnError

   StopSeq,

   StartSeq

     cRes2:= AttachmentsToText(DbField('ANHANG', Dab700)),

   OnError

   StopSeq,

EndIf,

Alltrim(cRes1 + ' ' + cRes2)

Siehe auch:

Pdf2Text()


Base64Decode()

Base64Encode() – Dekodiert einen Base64 kodierten String

Beschreibung

Diese Funktion dient dazu einen String welcher mit Base64 kodiert wurde wieder zu dekodieren.

Parameter

cStringToDecode:C

Base64-String der dekodiert werden soll

Rückgabewert

Alphanumerisch

Beispiel

siehe Base64Encode()

Siehe auch:

Base64Encode()


Base64Encode()

Base64Encode() – Wandelt einen String in einen Base64 kodierten String um

Beschreibung

Diese Funktion dient dazu einen String welcher Steuerzeichen (z.B. Zeilenumbruch, Tabulator) enthalten kann so zu kodieren das nur noch "normale" Zeichen verwendet werden. Der so kodierte String kann dann z.B. über Schnittstellen übertragen werden welche sich an Steuerzeichen stören oder diese verändern. Zur Kodierung werden die Zeichen A–Z, a–z, 0–9, + und / verwendet, sowie = als Füllzeichen am Ende. Der kodierte String ist ~30% länger als der ursprüngliche.

Hinweis

Diese Funktion dient nur zum kodieren und stellt keine Verschlüsselung dar!

Parameter

cStringToEncode:C

String welcher Base64 kodiert werden soll

Rückgabewert

Alphanumerisch

Beispiel

|aString, aEncodedString|

// String Base64 kodieren

aString := 'Hallo Welt ' + chr(9) + ' Hallo Weltall',

aEncodedString := Base64Encode(aString),

writeln(aEncodedString), // SGFsbG8gV2VsdCAJIEhhbGxvIFdlbHRhbGw

// Base64-String dekodieren

aString := Base64Decode(aEncodedString),

writeln(aString),        // Hallo Welt      Hallo Weltall

Siehe auch:

Base64Decode()


Base64UrlDecode()

Base64UrlDecode() – Konvertiert eine HTTP-konforme Zeichenkette zurück in "normale" Darstellung

Beschreibung

Um HTTP-GET Parameter nach der Übertragung korrekt auslesen zu können, müssen diese dekodiert werden.

Diese Funktion wandelt alle entsprechenden Zeichenkette in ein "normales" Textformat.

Parameter

aValue:String

Zu konvertierende Zeichenkette

Rückgabewert

Alphanumerisch

Beispiel

WriteLn(Base64UrlDecode('aHR0cDovL3d3dy5kb250ZW53aWxsLmRl'),

// Ergebnis: http://www.dontenwill.de

Siehe auch:

Base64UrlEncode()


Base64UrlEncode()

Base64UrlEncode() – Konvertiert eine Zeichenkette in HTTP-konforme Darstellung

Beschreibung

Um beispielsweise Zeichenketten als Querystring im HTTP-GET übertragen zu können, muss diese vorher entsprechend encodiert werden.

Diese Funktion wandelt alle entsprechenden Zeichen in ein HTTP-konformes Format um.

Parameter

aValue:String

Zu konvertierende Zeichenkette

Rückgabewert

Alphanumerisch (HTTP-konform)

Beispiel

WriteLn(Base64UrlEncode('http://www.dontenwill.de'),

// Ergebnis: aHR0cDovL3d3dy5kb250ZW53aWxsLmRl

Siehe auch:

Base64UrlDecode()


BeFormat()

BeFormat() – Wertformatierung

Beschreibung

Die Funktion formatiert einen übergebenen Wert anhand der angegebenen Maske.

Hinweis

# -> Platzhalter für numerische Ausdrücke

! -> Platzhalter für alphanumerische Ausdrücke

X -> Platzhalter, der die ursprüngliche Formatierung alphanumerischer Zeichen beibehält

Sonstige Zeichen werden in den formatierten Text direkt übernommen.

Parameter

aValue:U | Wert, der formatiert werden soll
aMask:C | Maske, nach der formatiert werden soll

Rückgabewert

Alphanumerisch

Beispiel

BeFormat('Dontenwill123', '!!!!!!!')           // Ergebnis: 'DONTENW'

BeFormat('Dontenwill123', '!!!!XXXXXX')        // Ergebnis: 'DONTenwill'

BeFormat('Dontenwill123', '#############')     // Ergebnis: '123'

BeFormat('Dontenwill123', 'XXX/########.##')   // Ergebnis: 'Don/1.23'

Siehe auch:

FormatDateTime()

FormatFloat()


BeToken()

BeToken() – Token in Zeichenkette suchen

Beschreibung

Die Funktion liefert das Token (String) mit dem Index aIndex aus einer Zeichenkette aText (String) zurück, die durch ein oder mehrere Trennzeichen aDelimiter in mehrere Abschnitte unterteilt ist.

Hinweis

Das Erste Token in einer Zeichenkette hat den Index 1.

Parameter

aText:C | Beliebige Zeichenkette mit Trennzeichen
aDelimiter:C | Trennzeichen, durch das die Token voneinander getrennt sind
aIndex:N | Nummer des Tokens, welches gesucht wird

Rückgabewert

Alphanumerisch

Beispiel

BeToken('123,456,789,012,345,678,901', ',', 4)   // Ergebnis: '012'

Siehe auch:

SubStr()


BlStr()

BlStr() – Umwandlung in Zeichenkette mit Leerzeichen

Beschreibung

Die Funktion konvertiert den übergebenen numerischen Wert in eine Zeichenkette und füllt gegebenenfalls mit Leerzeichen auf.

Parameter

aValue:N | Beliebiger numerischer Wert
aLen:N | Gesamtlänge der umgewandelten Zeichenkette
aDecimals:N | Anzahl der Nachkommastellen; Default = 0
aZero:L | Mit true werden rechtsseitig nachgestellte Nullen entfernt; Default = false

Rückgabewert

Alphanumerisch

Beispiel

BlStr(560.05, 10)           // Ergebnis: '       560'

BlStr(560.05, 10, 2)        // Ergebnis: '    560.05'

BlStr(560.00, 10, 2)        // Ergebnis: '    560

BlStr(560.05, 10, 6, .T.)   // Ergebnis: '    560.05'

BlStr(560.05, 10, 6, .F.)   // Ergebnis: '560.050000'


CalcHashString()

CalcHashString() – Berechnet den Hash-Wert für einen String

Beschreibung

Die Funktion bildet aus dem übergebenen String einen Hash-Wert. Dieser Hash-Wert kann zur Überprüfung der Echtheit des Strings verwendet werden, z.B. zum Abgleich vor und nach einer Übertragung.

Hinweis

Um Kennwörter nach be-Vorgabe zu registrieren, verwenden Sie die Funktion GeneratePasswordHash()

Parameter

cStringToHash:C | Beliebige Zeichenkette
nMode:N | Verschlüsselungs-Modus: 1 = Binär; 2 = Base64 kodiert; 3 = Base64 URL kodiert; 4 = Hex-Format; Default = 1
nHashFunction:N | Hash-Funktion; 1 = Haval; 3 = MD5; 8 = SHA512; Default = 1

Rückgabewert

Alphanumerisch - Gebildeter Hash-Wert

Beispiel

WriteLn(CalcHashString('Dontenwill AG')),

// Ergebnis: fCJXAH7ZA9bqYZ5vCUVsqNLTNqhCxZBjJQszwHAdX4E=

WriteLn(CalcHashString('Dontenwill AG', 2, 8)),

// Ergebnis: TojHJT-WC3a57VRKDjzAXKmlzwnL8QvzY-o9Xd5mxWg3Ds1KtbHW4d_1SrLt0EluZp4y3K2XV6grfIuVOdhbnQ==

Siehe auch:

GeneratePasswordHash()


Chr()

Chr() – Umwandlung von ASCII-Code

Beschreibung

Umwandlung eines ASCII-Codes zwischen 0 und 255 in ein Zeichen.

Parameter

aInteger:N

Ein ASCII-Code zwischen 0 und 255

Rückgabewert

Alphanumerisch

Beispiel

Chr(65)   // Ergebnis: 'A'

Chr(97)   // Ergebnis: 'a'

Siehe auch:

Asc()


ConcatRTF()

ConcatRTF() – Zeichenketten verknüpfen

Beschreibung

Die Funktion verbindet zwei im RTF-Format übergebene Texte miteinander. Zwischen den Texten wird ein Zeilenumbruch vollzogen.

Hinweis

Wird einer der beiden Texte nicht formatiert (d.h. kein RTF-, sondern normaler ASCII-Text) übergeben, wird er automatisch mit den Default-Werten formatiert.

Parameter

cText1:C | Erster Text
cText2:C | Zweiter Text
cDefFontName:C | Default-Font-Name für Nicht-RTF-Text (Default = "Arial")
nDefFontSize:N | Default-Font-Größe für Nicht-RTF-Text (Default = 10)
nDefFontStyles:N | Default-Font-Stil für Nicht RTF-Text (Default = 0/normal)

Rückgabewert

Alphanumerisch - neuer RTF-Text

Beispiel

// Default-Formatierung für o[pvPosMemo] vorgeben ...

PrintVarVal(EinObjekt, ConcatRTF(o[pvPosMemo], "", "Arial Black", 12, 1))

Siehe auch:

IsTextRTF()

RTFToHTML()


D065_HistoryToSearchIndex()

ToDo: Mit MemoBo Umstellung über MemoBo-Objekt abgedeckt -> Doku löschen

D065_HistoryToSearchIndex() – Konvertiert History-Array-String in FTS-String

Beschreibung

Konvertiert ein Array des History-Einträge (DAB065:HISTORY) in einen String für die FTS-Suche (DAB065:SUCH_KZ) um.

Hinweis

Ist in der EventID des History-Arrays keine Benutzerkennung enthalten, so wird nach einer Benutzer-Kennung im Von-Feld gesucht.
Jede Kombination von Event-Typ & Benutzerkennung wird nur einmal in den FTS-String übernommen

Nachfolgend die Auflistung aller History Event-Typen und deren entsprechenden FTS-Suchkennzeichen

Event-Typ; (DAB065:HISTORY) | FTS-Suchkennzeichen; (DAB065:SUCHE) | Beschreibung
F | AF | Gesendetes Fax
I | EE | Eingegangene E-Mail
T | AE | Gesendete E-Mail
R | RE | Memo referenziert
Y | YE | Memo beantwortet
W | WE | Memo weitergeleitet
M | MR | Als "gelesen" markiert
U | MU | Als "ungelesen" markiert
P | PR | Memo (Brief) gedruckt
N |  | Notiz für intene Mitarbeiter (bei E-Mail-Versand); Wird nicht in FTS übernommen
V | VM | Manuell archiviert
A | MA | Memo auf andere Pers.-Nr. übertragen
S | SC | Memo-Anhänge durch Scannvorgang hinzugefügt

Parameter

cHistoryArray:C | History-Array-String

Rückgabewert

Alphanumerisch

Beispiel

| aRes, oDAB065:DB:='waDAB065, DAB06B'|

DbLocate('Memo_ID', 17466, , oDAB065),

aRes := D065_HistoryToSearchIndex(oDAB065:HISTORY),  //Inhalt: {"A","   181291","Demo, Dieter (065)","27.11.2009 20:56:00"}

Writeln(aRes)                                        //Ergibt: MA:065


EscapeFilterValue()

EscapeFilterValue() – Zeichenkette für Filterausdruck einfassen

Beschreibung

Soll in einem Filterausdruck auf einen bestimmten Feldinhalt geprüft werden, ist es möglich, dass dieser Feldinhalt die Zeichen [, ], ' oder " enthält. Die Funktion EscapeFilterValue() erzeugt eine Zeichenkette, die für alle möglichen Feldinhalte einen gültigen Filterausdruck darstellt.

Parameter

cValue:C

Die zu maskierende Zeichenkette

Rückgabewert

Alphanumerisch

Beispiel

|oDab010:DB:='waDab010,1', cFilter|

// fuer Testzwecke

// Artikel anlegen, der eines der folgend Zeichen oder mehrere davon in der Artikelnummer enthält, ', ", ], [

DbGoTo(99, oDab010), // Datensatz-Id des neuen Artikels eintragen

cFilter := 'ARTNR == ' + EscapeFilterValue(oDab010:ARTNR),

writeln(cFilter),

DbFilter(cFilter, oDab010),

oDab010:ARTNR


FieldMaskToEditMask()

FieldMaskToEditMask() – Konvertieren einer Eingabemaske in eine PictureMask

Beschreibung

Diese Funktion erzeugt aus einer Eingabe-Maske, welche z.B. mit MPicture() erzeugt werden kann,

eine PictureMask für alle gängigen be-Controls

Parameter

cText:C | Zeichenkette der zu konvertierenden Eingabemaske
bIncludeMinus:L | Kennzeichen, ob Minus enthalten sein darf default = true

Rückgabewert

Alphanumerisch - PictureMaske

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung:

//##############################################################################

//##############################################################################

|

   oForm, edt_ExamplePictureMask, lbl_ExamplePictureMask

|

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

function CreateForm()

   oForm                  := CreateObject('TFormEx',  'ExampleForm'),

   lbl_ExamplePictureMask := CreateObject('TBeLabel', 'ExampleLabel',  oForm, oForm),

   edt_ExamplePictureMask := CreateObject('TBeEdit',  'ExampleEdit', oForm, oForm),

   oForm.ClientWidth  := 250,

   oForm.ClientHeight := 50,

   oForm.Font.Name    := 'Segoe UI',

   lbl_ExamplePictureMask.Caption := 'Eingabe Maske testen',

   lbl_ExamplePictureMask.Top     := 10,

   lbl_ExamplePictureMask.Left    := 10,

   edt_ExamplePictureMask.Width := 100,

   edt_ExamplePictureMask.Top   := 7,

   edt_ExamplePictureMask.Left  := 125,

end,

function InitPictureMask()

| nLen, nDec, cText1, lWithMinus, cText2 |

   nLen                                        := 10,

   nDec                                        := 3,

   cText1                                      := MPicture(nLen, nDec),

   edt_ExamplePictureMask.Text                 := '',

   lWithMinus                                  := false,

   cText2                                      := FieldMaskToEditMask(cText1, lWithMinus),

   edt_ExamplePictureMask.PictureMaskFromField := false,

   edt_ExamplePictureMask.Picture.PictureMask  := cText2,

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   CreateForm(),

   startseq

      InitPictureMask(),

      ShowModal(oForm),

   always

      DestroyObject(oForm),

   stopseq,

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + crlf +

              GetErrorText() + crlf + crlf +

              DebugArr(GetErrorStack(true)), mtError),

stopseq,


FormatCurrency()

FormatCurrency() – Formatieren eines Werts in einen lesbaren Betrags-Text

Beschreibung

Die Funktion formatiert einen Übergebenen Wert in einen Betrags-Text inklusive Tausender-Trennzeichen und Nachkommastellen.

Parameter

aValueToFormat:N | Zu formatierender Wert
aDigits:N | Nachkommastellen (Default = 0)

Rückgabewert

Alphanumerisch

Beispiel

FormatCurrency(1234567.89, 2), // Ergebnis: '1.234.567,89'

FormatCurrency(0.23, 3),       // Ergebnis: '0,230'

FormatCurrency(-0.1, 2),       // Ergebnis: '-0,10'

FormatCurrency(12345.89),      // Ergebnis: '12345'

Siehe auch:

FormatDateTime()

BeFormat()

FormatFloat()


FormatFloat()

FormatFloat() – Fließkommazahl formatieren

Beschreibung

Die Funktion formatiert eine Fließkommazahl (Float) in das angegebene Format. Falls erforderlich, wird die zuletzt angezeigte Zahl gerundet.

Parameter

aFormat:C | Format, nach dem formatiert werden soll; Zulässige Zeichen für die Formatierung sind 0, #, Punkt(.), und Komma(,)
aValue:N | Zahl, die formatiert werden soll

Rückgabewert

Alphanumerisch

Beispiel

FormatFloat('000000.00', 415.2151)        // Ergebnis: '000415,22'

FormatFloat('00.0', 415.2151)             // Ergebnis: '415,2'

FormatFloat('000,000.00', 415.2151)       // Ergebnis: '000.415,22'

FormatFloat('0,000,000', 11785415.2151)   // Ergebnis: '11.785.415'

Siehe auch:

FormatDateTime()

BeFormat()


GeneratePasswordHash()

GeneratePasswordHash() – Generiert Kennwörter im be-Format

Beschreibung

Die Funktion bildet aus dem übergebenen Passwort (im Klartext) ein nach be-Passwortrichtlinien konformen Hash.

Dieser Hash-Wert kann extern durch andere Standardroutinen erzeugt werden.
Somit besteht die Möglichkeit, sich mit externer Software im System anzumelden.

Wichtig

Es ist darauf zu achten, die Zeichenkette in Großbuchstaben in die Funktion zu geben.

Parameter

cStringToHash:C | Beliebige Zeichenkette
nMode:N | Verschlüsselungs-Modus: ccmBinary = Binär ccmBase64 = Base64 kodiert ccmBase64Url = Base64 URL kodiert ccmHex = Hex-Format; Default = ccmBase64
nHashFunction:N | Hash-Funktion hfMD5 = MD5 hfSHA512 = SHA512; Default = hfSHA512

Rückgabewert

Alphanumerisch - Gehashtes Kennwort

Beispiel

WriteLn(GeneratePasswordHash('abc', ccmBase64Url, hfSHA512)),

// Ergebnis: RERBRjM1QTE5MzYxN0FCQUNDNDE3MzQ5QUUyMDQxMzExMkU2RkE0RTg5QTk3RUEyMEE5RUVFRTY0QjU1RDM5QTIxOTI5OTJBMjc0RkMxQTgzNkJBM0MyM0EzRkVFQkJENDU0RDQ0MjM2NDNDRTgwRTJBOUFDOTRGQTU0Q0E0OUY%3D

WriteLn(CalcHashString('BE32', ccmHEX, hfSHA512)),

// Ergebnis: A09931D4CE9F40CBF017E234E1457985C91763E36C80D1362E72F66AE4C913D6B4E4F0105DC74F71F83A32A9FA705EBAE19AB8E4CE10728CAFB5FEC64DF3A221


GetTextMod()

GetTextMod() – Ermitteln eines Textbausteins

Beschreibung

Ermittelt einen Textbaustein anhand der übergebenen Daten.

Hierbei wird auch der eventuell im Textbausteinfenster hinterlegte Codeblock des Textbausteins ausgeführt.

Parameter

uKey:U

ID oder Textname des gesuchten Textbausteins

oTargetDataSet:O

Tabelle, die im Autovervollständigungs-Codeblock des gewählten Textbausteins verfügbar sein soll.

z. B. beim Übergeben der DAB065 (Memos) kann in der Textbaustein-Verwaltung im Autovervollständigungs-Codeblock auf diese Tabelle zugegriffen werden um beispielsweise den Text aus dem Feld 'MEMO' auszulesen und verändert zurück zu geben.

cTargetDataField:C

Feldname des Feldes in das der Textbaustein nach der Auswertung eingefügt werden soll.

Dies ist ein reiner Informationswert für den Autovervollständigungs-Codeblock in der Textbausteinverwaltung.

Rückgabewert

Alphanumerisch - Textbaustein nach Auswertung des Codeblocks

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Testprogramm für die Funktion GetTextMod() mit Anzeige der

//               Ergebnisse in einem RichEdit

//##############################################################################

//##############################################################################

|

   m_oForm, m_oRichEdit, m_oInputPanel, m_oID, m_oTextName,

   m_oMemTable, m_oGetTextModButton,  m_oMemTableDataSource

|

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Erstellt eine Memtable die unter das RichEdit gelegt wird.

// @Result: null

//******************************************************************************

function OpenDataBase()

   m_oMemTable := CreateObject('TMemCalcTable', 'TEXTMODTABLE', m_oForm, m_oForm),

   MyAddMemField(m_oMemTable, 'MEMOFIELD', 'ftMemo', 9, ),

   m_oMemTable.Active := True,

   DBAppend(m_oMemTable),

   m_oMemTable:MEMOFIELD := 'TESTTEXT',

   DBPost(m_oMemTable),

   m_oMemTableDataSource := CreateObject('TDataSourceEx', 'MEMDS', m_oForm, m_oForm),

   m_oMemTableDataSource.DataSet := m_oMemTable,

end,

//##############################################################################

//##############################################################################

// Eventhandler

//##############################################################################

//##############################################################################

//******************************************************************************

// Beim Klicken auf den Button wird die Funktion GetTextMod ausgelöst und

// das Ergebnis in das Feld unter dem RichEdit geschrieben.

// @Result: null

//******************************************************************************

function DoOnGetTextModButtonClick()

| cTextModResult |

   cTextModResult := '',

   // Validierung

   if empty(m_oID.Text) and empty(m_oTextName.Text) then

      MessageDlg('Bitte eine ID oder einen Textbaustein-Namen eintragen'),

   endif,

   if not empty(m_oID.Text) then

      cTextModResult := GetTextMod(Val(m_oID.Text), m_oMemTable, 'MEMOFIELD')

   else if not empty(m_oTextName.Text) then

      cTextModResult := GetTextMod(Trim(m_oTextName.Text), m_oMemTable, 'MEMOFIELD')

   endif,

   endif,

   DBEdit(m_oMemTable),

   m_oMemTable:MEMOFIELD := cTextModResult, ,

   DBPost(m_oMemTable),

   m_oID.Text := '',

   m_oID.Text := '',

end,

//##############################################################################

//##############################################################################

// Oberflächen-Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Erstellt die Oberfläche

// @Result: null

//******************************************************************************

function CreateGUI()

   m_oForm                              := CreateObject('TFormEx', 'TEXTMODFORM'),

   m_oForm.OrigCapt                     := 'Anzeige des Ergebnis-Strings aus GetTextMod()',

   m_oForm.Font.Name                    := 'Segoe UI',

   m_oRichEdit                          := CreateObject('TBeRichEditEx', 'RICHEDT', m_oForm, m_oForm),

   m_oRichEdit.AlignWithMargins         := True,

   m_oRichEdit.Align                    := alClient,

   m_oRichEdit.Enabled                  := False,

   m_oRichEdit.DataSource               := m_oMemTableDataSource,

   m_oRichEdit.DataField                := 'MEMOFIELD',

   m_oInputPanel                        := CreateObject('TBePanel', 'OptionsPanel', m_oForm, m_oForm),

   m_oInputPanel.BevelOuter             := bvNone,

   m_oInputPanel.AlignWithMargins       := True,

   m_oInputPanel.Margins.Top            := 0,

   m_oInputPanel.Align                  := alBottom,

   m_oInputPanel.Height                 := 27,

   m_oID                                := CreateObject('TBeEdit', 'IDEDIT', m_oInputPanel, m_oInputPanel),

   m_oID.Picture.PictureMask            := '*[#]', // Nur Zahlen bei ID

   m_oID.Text := '',

   m_oID.TextHintProperties.TextHint := 'Hier eine ID eintragen',

   m_oTextName                          := CreateObject('TBeEdit', 'TNEDIT', m_oInputPanel, m_oInputPanel),

   m_oTextName.Width := 300,

   m_oTextName.Left := 127,

   m_oTextName.Text := '',

   m_oTextName.TextHintProperties.TextHint := 'oder hier einen Textbaustein-Namen',

   m_oGetTextModButton                  := CreateObject('TBeBitBtn', 'GETTXTMODBTN', m_oInputPanel, m_oInputPanel),

   m_oGetTextModButton.Align            := alRight,

   m_oGetTextModButton.Width            := 150,

   m_oGetTextModButton.Caption := 'Textbaustein auswerten',

   AssignEvent(m_oGetTextModButton, 'OnClick', 'DoOnGetTextModButtonClick'),

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   OpenDataBase(),

   CreateGUI(),

   ShowModal(m_oForm)

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + GetErrorText(), mtError),

stopseq,


IsTextHTML()

IsTextHTML() – Auf Formatierung prüfen

Beschreibung

Prüft ob im übergebenen Text HTML-Formatierungen verwendet wurden.

Parameter

cText:C

Text der auf Verwendung von HTML-Formatierungen geprüft werden soll

Rückgabewert

logisch

Beispiel

| oMemoBo |

oMemoBo := CreateObject('TBeMemoBo'),

startseq,

   oMemoBo.MemoID := 2289, // An ID mit z.B. E-Mail anpassen

   if IsTextHTML(oMemoBo.MemoValue) then

      writeln('Memo enthält HTML'),

   else

      writeln('Memo enthält kein HTML'),

   endif,

always,

   DestroyObject(oMemoBo),

stopseq,

Siehe auch:

ConcatRTF()

IsTextRTF()

RTFToText()

RTFToHTML()

MemoHTMLToRTF()


IsTextRTF()

IsTextRTF() – Auf Formatierung prüfen

Beschreibung

Die Funktion prüft, ob ein Text im RTF-Format vorliegt.

Parameter

cText:C

Zu prüfender Text

Rückgabewert

Logisch

Beispiel

IsTextRTF('Dontenwill')

// Ergebnis: false

IsTextRTF('{\rtf1Guten Tag!\par{\i Dies} ist ein formatierter {\b Text}.}')

// Ergebnis: true

Siehe auch:

ConcatRTF()

RTFToText()

RTFToHTML()


Left()

Left() – Linker Teil einer Zeichenkette

Beschreibung

Die Funktion gibt den linken Teil einer Zeichenkette zurück, begrenzt durch aChrCount.

Parameter

aText:C | Beliebige Zeichenkette
aChrCount:N | Anzahl der Zeichen, die zurück gegeben werden sollen

Rückgabewert

Alphanumerisch

Beispiel

Left('Dontenwill AG', 10)   // Ergebnis: 'Dontenwill'

Siehe auch:

Right()

SubStr()


Len()

Len() – Länge einer Zeichenkette ermitteln

Beschreibung

Die Funktion gibt die Länge einer Zeichenkette (String) zurück.

Parameter

aText:C

Zeichenkette

Rückgabewert

Numerisch

Beispiel

Len('Dontenwill')   // Ergebnis: 10


Lower()

Lower() – Umwandlung in Kleinbuchstaben

Beschreibung

Die Funktion wandelt alle Zeichen einer Zeichenkette in Kleinbuchstaben um.

Parameter

aText:C

Beliebige Zeichenkette

Rückgabewert

Alphanumerisch

Beispiel

Lower('Dontenwill')   // Ergebnis: 'dontenwill'

Siehe auch:

Upper()


LTrim()

LTrim() – Leerzeichen linksbündig löschen

Beschreibung

Die Funktion löscht alle linksbündigen Leerzeichen einer Zeichenkette.

Parameter

aText:C

Beliebige Zeichenkette

Rückgabewert

Alphanumerisch

Beispiel

LTrim('                 Dontenwill')   // Ergebnis: 'Dontenwill'

Siehe auch:

AllTrim()

RTrim()

Trim()


MemoHTMLToRTF()

MemoHTMLToRTF() – HTML-Text aus einem Memo in RTF konvertieren

Beschreibung

Konvertiert einen HTML-Inhalt aus der Groupware nach RTF. Hierbei werden auch die Bilder, aus dem Anhang mit in das

RTF-Dokument gezogen.

Parameter

cText:C | HTML-Text der konvertiert werden soll
nMemoID:N | Zugehörige Memo-ID

Rückgabewert

RTF-Text inklusive Bilder

Beispiel

| oMemoBo |

oMemoBo := CreateObject('TBeMemoBo'),

startseq,

   oMemoBo.MemoID := 2289, // An ID mit z.B. E-Mail anpassen

   // Handelt es sich um ein HTML-Memo -> Als RTF ausgeben

   if IsTextHTML(oMemoBo.MemoValue) then

      writeln(MemoHTMLToRTF(oMemoBo.MemoValue, oMemoBo.CbId)),

   else

      writeln('Memo enthält kein HTML'),

   endif,

always,

   DestroyObject(oMemoBo),

stopseq,

Siehe auch:

ConcatRTF()

IsTextRTF()

RTFToText()

RTFToHTML()

IsTextHTML()


MemoLine()

MemoLine() – Memozeile extrahieren

Beschreibung

Die Funktion extrahiert aus einem Memo eine beliebige Zeile oder Zeichenkette.

Parameter

aMemo:C | Beliebiges Memo
aLineLen:N | Zeilenlänge (Default = 70)
aLine:N | Nummer der Zeile (Default = 1)
aTabSize:N | Länge des Tabstopps
UseWordWrap:L | Zeilenumbruch (Default = true)

Rückgabewert

Alphanumerisch

Beispiel

| aFileName, aFile, aPath |

aPath     := 'c:\temp\',

aFileName := 'test.txt',

if !DirectoryExists(aPath) then

   CreateDir(aPath)

endif,

startseq,

   aFile := FOpen(aPath + aFilename, FO_CREATE),

   FWriteLn(aFile, 'Dontenwill AG'),

   FWriteLn(aFile, 'Datum ' + DToC(Date())),

   FClose(aFile)

onerror,

stopseq,

MemoLine(MemoRead(aPath + aFileName), 13, 1)   // Ergebnis: 'Dontenwill AG'


MemoRead()

MemoRead() – Datei als Memo einlesen

Beschreibung

Die Funktion liest eine komplette Datei als Memo ein und gibt deren Inhalt zurück.

Parameter

aFilename:C

Dateiname und Pfad

Rückgabewert

Alphanumerisch

Beispiel

| aFileName, aFile, aPath |

aPath     := 'c:\temp\',

aFileName := 'test.txt',

if !DirectoryExists(aPath) then

   CreateDir(aPath)

endif,

startseq,

   aFile := FOpen(aPath + aFilename, FO_CREATE),

   FWriteLn(aFile, 'Dontenwill AG'),

   FWriteLn(aFile, 'Datum ' + DToC(Date())),

   FClose(aFile)

onerror,

stopseq,

MemoRead(aPath + aFileName)

// Ergebnis: 'Dontenwill AG'

//           'Datum 26.02.09'

// Hinweis:  Als Datum wird natürlich das aktuelle Tagesdatum ausgegeben.


MLCount()

MLCount() – Zeilen in Memo zählen

Beschreibung

Die Funktion zählt die Anzahl der Zeilen in einem Memo.

Parameter

aMemo:C | Beliebiges Memo
aLineLen:N | Zeilenlänge (Default = 70)
aTabSize:N | Länge des Tabstopps
UseWordWrap:L | Zeilenumbruch (Default = true)

Rückgabewert

Numerisch

Beispiel

| aFileName, aFile, aPath |

aPath     := 'c:\temp\',

aFileName := 'test.txt',

if !DirectoryExists(aPath) then

   CreateDir(aPath)

endif,

startseq,

   aFile := FOpen(aPath + aFilename, FO_CREATE),

   FWriteLn(aFile, 'Dontenwill AG'),

   FWriteLn(aFile, 'Datum ' + DToC(Date())),

   FClose(aFile)

onerror,

stopseq,

MLCount(MemoRead(aPath + aFileName))   //Ergebnis: '2'


OemToAnsi()

OemToAnsi() – Oem-Format in Ansi-Format umwandeln

Beschreibung

Die Funktion konvertiert eine Zeichenkette (String) aus dem Oem-Format in das Ansi-Format.

Parameter

aText:C

Text, der umgewandelt werden soll

Rückgabewert

Alphanumerisch

Beispiel

Asc(OemToAnsi('ä'))   // Ergebnis: '245'

Asc('ä')              // Ergebnis: '228'

Siehe auch:

AnsiToOem()


Pad()

Pad() – Zeichenkette auffüllen, rechtsseitig

Beschreibung

Die Funktion füllt eine Zeichenkette rechtsseitig mit Leerzeichen auf.

Hinweis

Entspricht der Funktion PadR().

Parameter

aValue:U | Beliebiger Wert
aTotalLen:N | Anzahl Stellen, auf die aufgefüllt wird
aCharacter:C | Zeichen, mit dem gefüllt werden soll (Default = Leerzeichen)

Rückgabewert

Alphanumerisch

Beispiel

Pad('Dontenwill', 20)   // Ergebnis: 'Dontenwill          '

Siehe auch:

PadL()

PadR()


PadC()

PadC() – Zeichenkette auffüllen und zentrieren

Beschreibung

Die Funktion füllt eine Zeichenkette beidseitig mit Leerzeichen auf, welche dadurch zentriert wird.

Parameter

aValue:U | Beliebiger Wert
aTotalLen:N | Anzahl Stellen, auf die aufgefüllt wird
aCharacter:C | Zeichen, mit dem gefüllt werden soll (Default = Leerzeichen)

Rückgabewert

Alphanumerisch

Beispiel

PadC('Dontenwill', 30)   // Ergebnis: '          Dontenwill          '

PadC('Dontenwill', 6)    // Ergebnis: 'Donten"

Siehe auch:

PadL()

PadR()


PadL()

PadL() – Zeichenkette auffüllen, linksseitig

Beschreibung

Die Funktion füllt eine Zeichenkette linksseitig mit Leerzeichen auf.

Parameter

aValue:U | Beliebiger Wert
aTotalLen:N | Anzahl Stellen, auf die aufgefüllt wird
aCharacter:C | Zeichen, mit dem gefüllt werden soll (Default = Leerzeichen)

Rückgabewert

Alphanumerisch

Beispiel

PadL('Dontenwill', 20)   // Ergebnis: '          Dontenwill'

Siehe auch:

PadC()

PadR()


PadR()

PadR() – Zeichenkette auffüllen, rechtsseitig

Beschreibung

Die Funktion füllt eine Zeichenkette rechtsseitig mit Leerzeichen auf.

Parameter

aValue:U | Beliebiger Wert
aTotalLen:N | Anzahl Stellen, auf die aufgefüllt wird
aCharacter:C | Zeichen, mit dem gefüllt werden soll (Default = Leerzeichen)

Rückgabewert

Alphanumerisch

Beispiel

PadR('Dontenwill', 20)   // Ergebnis: 'Dontenwill          '

Siehe auch:

PadC()

PadL()


Pdf2Text()

Pdf2Text() – Texte aus PDF-Datei extrahieren

Beschreibung

Extrahiert den Text einer oder mehrerer Seiten aus einem PDF-Dokument.

Hinweis

Ein Fehler beim Zugriff auf das Dokument führt zu einer Exception.

Parameter

cPDFFileName:C | Dateiname des PDF-Dokuments, dem der Text entnommen werden soll
nPageFrom:N nPageTo:N | Nummer der ersten Seite; Default = eins; Nummer der letzten Seite; Default = maximale Seitennummer des Dokuments

Rückgabewert

Alphanumerisch; Texte der angegebenen Seite

Beispiel

| cText |

cText:= Pdf2text('c:\temp\Auftragsbestätigung 171286.pdf')

Siehe auch:

Pdf2Jpeg()

PdfCmd()

PdfMerge()

Pdf2Tiff()

PdfPageCount()

AttachmentsToText()


PrepareTextForFTS()

PrepareTextForFTS() – Optimiert Text-Feld für die FTS

Beschreibung

Diese Funktion optimiert einen übergebenen Text für die Volltextsuche (Full-Text-Search = FTS).

Hinweis

- Tabulatoren, doppelte Leerzeichen, Zeilenumbrüche, ignorierte Wörter (Noise-Words) und Format-Tags werden entfernt

- als Basis dient die FTS-Index-Definition des übergebenen Feldes (s. Datenbank-Verwaltung / Indexdefinitionen)
oder der mit cFTSIndexName vorgegebene FTS-Index

Parameter

nWorkArea:N | Workarea der Tabelle oder Null, falls ein Feld-Objekt übergeben wird
uFieldName:U | Feldname oder Feld-Objekt (Workarea = 0)
cText:C | Original-Text
lNoDuplicates:L | Duplikate werden entfernt (falls uFieldName auf ein gültiges Feld zeigt); das Ergebnis ist alphabetisch sortiert; Default = False
cFTSIndexName:C | Vorgabe für den FTS-Index, dann wird dieser nicht anhand des Feld-Namens ermittelt

Rückgabewert

Alphanumerisch

Beispiel

| oDAB065:DB:='waDAB065, DAB06B', oText|

DbLocate('Memo_ID', 17466, , oDAB065),

oText := PrepareTextForFTS(waDAB065,                         // Für DAB065 = Memos

                           'SUCHE',                          // Für Ziel-Feld "SUCHE"

                           AllTrim(oDAB065:BETREFF) +

                           ' ' +

                           RtfToText(oDAB065:MEMO) ),        // Ziel-Feld-Inhalt (unformatiert)

WriteLn(oText),

Siehe auch:

PrepareTextForFTSSearch()

Business Object Event "Berechnung Suchtext für Volltextsuche"


RAt()

RAt() – Position in Zeichenkette

Beschreibung

Die Funktion gibt die Position des ersten Zeichens einer Zeichenkette (String) zurück, welche zuletzt innerhalb einer anderen Zeichenkette vorkommt.

Parameter

aSearchText:C | Gesuchte Zeichenkette
aText:C | Zeichenkette, in der gesucht werden soll

Rückgabewert

Alphanumerisch

Beispiel

RAt('test', 'test dfdf test dfdf test df')   // Ergebnis: 21

Siehe auch:

At()


ReplaceRTF()

ReplaceRTF() – Ersetzen von formatiertem RTF Text

Beschreibung

Mit dieser Funktion lassen sich formatierte Zeichenketten in einem RTF-Text durch ebenfalls formatierten RTF-Text oder durch Plaintext ersetzen.

Die Formatierung des neuen Texts wird hierbei beibehalten.

Es werden nur ganze Wörter gesucht/ersetzt: Beispielsweise wird bei einer Suche nach "TEST" der Ausdruck "TEST123" nicht berücksichtigt./

Parameter

cText:C

Formatierter Text, in dem eine Zeichenkette ersetzt werden soll

cSearchFor:C

Text, der im gesamten cText ersetzt werden soll, z. B. das Wort "TEST"

cReplaceWith:C

Un-/Formatierter Text, der anstelle des Suchworts eingefügt werden soll.

Enthält der übergebene Text keine Formatierung so wird die bereits bestehende Formatierung des zu ersetzenden Worts übernommen.

Enthält der übergebene Text eine Formatierung so wird diese Formatierung an den Trefferstellen verwendet.

bIgnoreCase:L

Groß-/Kleinschreibung bei der Suche nach cSearchFor beachten

False findet bei einer Suche nach "TEST" nur "TEST"

True findet bei einer Suche nach "TEST" auch "Test" oder "teST"

cDelimiters:C

Liste an Zeichen, die als Worttrenner gesehen werden sollen.

Hiermit lässt sich definieren, wann eine Zeichenfolge als neues Wort erkannt werden soll.

Bei keiner Angabe gelten die Zeichen: ".;,:(){}"/\<>!?[]‘’“”-+*= „«»…" als Trennzeichen.

Gibt man nun z. B. ein "@" an so gilt nur noch dieses Zeichen als Trenner, das bedeutet die bisherigen Standard-Delimiter werden ersetzt.

Bei der Nutzung der Standard-Liste würde eine Suche nach "ABC" ein "@ABC" nicht finden, da das "@" nicht als Wort-Trenner zählt.
Die Suche findet also statt "ABC" nur ein "@ABC".

Der Vergleich "ABC" == "@ABC" schlägt also fehl.

Bei Angabe des "@" als Delimiter wird das "ABC" in "@ABC" gefunden und ersetzt.

Ergebnis wäre hier: "@MeinNeuerText"

Des weiteren ist zu beachten, dass die Angabe eigener Delimiters zu z.B. folgendem Fall führt:

Text: "@ABC ABC" - Suche: "ABC" - Ersetzen durch: "MeinText"

Nutzung ohne Angabe von cDelimiters:
Ergebnis: "@ABC MeinText"
Da das "@" nicht in der Standard-Liste enthalten ist wird nur das rechte "ABC" ersetzt

Angabe von "@":
Ergebnis: "@MeinText ABC"
Das rechte "ABC" wird nicht ersetzt, da sich das Leerzeichen nicht in der Delimiters-Liste befindet

Angabe von "@ ":
Ergebnis: "@MeinText MeinText"
Durch die zusätzliche Angabe des Leerzeichens wird jetzt auch das rechte "ABC" ersetzt

Rückgabewert

Alphanumerisch

Beispiel

| cText, cSearchFor, cReplaceWith, cNewText1, cNewText2, cNewText3 |

// Das Wort TEST mit ST fett formatiert

cText := '{\rtf1\ansi\ansicpg0\uc1\deff0\deflang0\deflangfe0{\fonttbl{\f0\fnil Arial;}}' +

         '{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;' +

         '\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;' +

         '\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;' +

         '\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;' +

         '\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}' +

         '\pard\fi0\li0\ql\ri0\sb0\sa0\itap0 \plain \f0\fs20 TE' +

         '\plain \f0\b\fs20 ST @TEST\par}',

// Das Wort, das ersetzt werden soll

cSearchFor := 'Test',

// ABCD komplett fett formatiert

cReplaceWith := '{\rtf1\ansi\ansicpg0\uc1\deff0\deflang0\deflangfe0{\fonttbl{\f0\fnil Arial;}}' +

                '{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;' +

                '\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;' +

                '\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;' +

                '\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;' +

                '\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;' +

                '\red192\green192\blue192;}' +

                '\pard\fi0\li0\ql\ri0\sb0\sa0\itap0 \plain \f0\b\fs20 ABCD\par}',

cNewText1 := ReplaceRTF(cText, cSearchFor, cReplaceWith),       // Mit diesem Aufruf wird die Groß-/Kleinschreibung berücksichtigt

writeln(RTFToText(cNewText1)),                                  // Ausgabe von TEST @TEST, da hier das Wort aufgrund der Groß-/Kleinschreibung

                                                                // nicht exakt übereinstimmt (Unformatiert aufgrund von RTFToText)

cNewText2 := ReplaceRTF(cText, cSearchFor, cReplaceWith, True), // Mit diesem Aufruf wird die Groß-/Kleinschreibung NICHT berücksichtigt.

writeln(RTFToText(cNewText2)),                                  // Ausgabe von ABCD @TEST (Unformatiert aufgrund von RTFToText)

// Bisher wird das TEST hinter dem @ nicht ersetzt, da das @ sich nicht in den Default-Delimitern befindet.

// Daraus ergeben sich folgende Konstellationen

// Angabe von "@" als einzigen Delimiter

cNewText1 := ReplaceRTF(cText, cSearchFor, cReplaceWith, True, '@'),

writeln(RTFToText(cNewText1)), // Ausgabe von TEST @ABCD (Nur das '@' gilt als Worttrennung)

// Angabe von "@ " als Delimiters (Gesprochen: "At und Leerzeichen")

cNewText1 := ReplaceRTF(cText, cSearchFor, cReplaceWith, True, '@ '),

writeln(RTFToText(cNewText1)), // Ausgabe von ABCD @ABCD

// Für eine sichtbare Formatierung wird beispielsweise ein TRichEdit benötigt, in das der Text geschrieben werden kann.

Siehe auch:

ConcatRTF()

IsTextRTF()

RTFToText()

RTFToHTML()

CopyRTFToClipboard()


Replicate()

Replicate() – Wiederholung von Zeichen

Beschreibung

Die Funktion dient dem wiederholten Ausgeben eines Zeichens oder einer Zeichenfolge.

Parameter

aText:C | Beliebige Zeichenfolge
aCount:N | Anzahl der Wiederholungen

Rückgabewert

Alphanumerisch

Beispiel

Replicate('-', 5)       // Ergebnis: '-----'

Replicate(Chr(65), 5)   // Ergebnis: 'AAAAA'


Right()

Right() – Rechter Teil einer Zeichenkette

Beschreibung

Die Funktion gibt den rechten Teil einer Zeichenkette zurück, begrenzt durch aChrCount.

Parameter

aText:C | Beliebige Zeichenkette
aChrCount:N | Anzahl der Zeichen, die von rechts beginnend zurückgegeben werden sollen

Rückgabewert

Alphanumerisch

Beispiel

Right('Dontenwill AG', 2)   // Ergebnis: 'AG'

Siehe auch:

Left()

SubStr()


RTFToHTML()

RTFToHTML() – RTF-Text in HTML konvertieren

Beschreibung

Konvertiert einen RTF-formatierten Text nach HTML

Parameter

cText:C | RTF-Text der konvertiert werden soll
lFullHTML:L | (default=True) Komplette HTML-Ausgabe, sonst nur HTML-Teil zwischen <body> & </body>.
lInlineCSS:L | (default=False) Jedes HTML Element direkt per CSS-Style-Eigenschaft designen, ansonsten wird das CSS im <header> eingefügt. Sollte bei lFullHTML = False auf True stehen für ein optimales Ergebnis.
lUTF8:L | (default=False) HTML-Ausgabe nach UTF8 konvertieren.
lEmbeddedImages:L | (default=False) Bilder werden in die HTML-Ausgabe eingebettet

Rückgabewert

HTML-Quelltext

Beispiel

|oMemoBo|

oMemoBo := CreateObject('TBeMemoBo'),

startseq,

  oMemoBo.MemoID := 2289,

  // Komplettes HTML ohne Inline-CSS ausgeben

  writeln(RTFToHTML(oMemoBo.MemoValue, True, False, False)),

always,

  DestroyObject(oMemoBo),

stopseq,

Siehe auch:

ConcatRTF()

IsTextRTF()

RTFToText()


RTFToText()

RTFToText() – Umwandlung von RTF- oder HTML-Text

Beschreibung

Die Funktion wandelt einen String im RTF- oder HTML-Format in einen String im Nur-Text-Format um.

Parameter

cText:C

Beliebiger RTF- oder HTML-Text

Rückgabewert

Alphanumerisch

Beispiel

| cText1 |

cText1 := '{\rtf1Guten Tag!\par{\i Dies} ist ein formatierter {\b Text}.}',

RTFToText(cText1)

// Ergebnis: Guten Tag!

//           Dies ist ein formatierter Text.

//

// Hinweis:  Die Umwandlung von HTML in Nur-Text wird erst ab Version 5.8.55 unterstützt.

Siehe auch:

IsTextRTF()

RTFToHTML()


RTrim()

RTrim() – Leerzeichen rechtsbündig löschen

Beschreibung

Die Funktion löscht alle rechtsbündigen Leerzeichen einer Zeichenkette.

Parameter

aText:C

Beliebige Zeichenkette

Rückgabewert

Alphanumerisch

Beispiel

RTrim('Dontenwill                ')   // Ergebnis: 'Dontenwill'

Siehe auch:

AllTrim()

LTrim()

Trim()


Space()

Space() – Leerzeichen erzeugen

Beschreibung

Die Funktion erzeugt eine Zeichenkette (String) aus Leerzeichen.

Parameter

aCount:N

Anzahl der Leerzeichen

Rückgabewert

Alphanumerisch

Beispiel

Space(20)   // Ergebnis: '                    '

Siehe auch:

Pad()


SplitTabbedText()

SplitTabbedText() – Spalte aus Tabbed-Text extrahieren

Beschreibung

Die Funktion extrahiert aus einem tabulatorgetrennten Text eine Spalte.

Parameter

aText:C | Text
aResultColumn:N | Spalte, die extrahiert werden soll
aMaxColumn:N | Anzahl vorhandener Spalten in aText

Rückgabewert

Alphanumerisch

Beispiel

| cText, cSplitted |

cText     := '1a' + chr(9) + '1b' + chr(9) + '1c' + chr(9) + '1d' + crlf  +

             '2a' + chr(9) + '2b' + chr(9) + '2c' + chr(9) + '2d',

cSplitted := SplitTabbedText(cText, 3),

// Die Werte werden von SplitTabbedText() durch chr(13) getrennt und

// für die Anzeige durch einen Zeilenumbruch ersetzt.

cSplitted := StrTran(cSplitted, chr(13), crlf),

cSplitted


Str()

Str() – Umwandlung in Zeichenkette

Beschreibung

Die Funktion wandelt einen numerischen Wert in eine alphanumerische Zeichenkette um.

Parameter

aValue:N | Beliebiger numerischer Wert
aWidth:N | Anzahl der Stellen insgesamt
aDecimals:N | Anzahl Nachkommastellen

Rückgabewert

Alphanumerisch

Beispiel

Str(410.37, 10, 2)   // Ergebnis: '    410.37'

Str(410.37, 10, 4)   // Ergebnis: '  410.3700'

Str(410.37, 8, 3)    // Ergebnis: ' 410.370'

Siehe auch:

CToD()

CurrToStr()

Val()

StrZero()

SubStr()


StrArray()

StrArray() – String in Array-Element umwandeln

Beschreibung

Die Funktion wandelt eine Zeichenkette, welche durch Zeilenumbruch getrennte Werte enthält, in eine Array um, wobei jede Zeile einem Array-Element entspricht.

Parameter

aText:C

Zeichenkette

Rückgabewert

Array

Beispiel

StrArray('Zeile 1' + crlf +

         'Zeile 2' + crlf +

         'Zeile 3')          // Ergebnis: <Array> = [Zeile 1, Zeile 2, Zeile 3]

Siehe auch:

StrToArr()


StringOfChar()

StringOfChar() – Zeichenkette aus Zeichen bilden

Beschreibung

Die Funktion bildet eine Zeichenkette (String) aus einem gegebenen Zeichen (Char).

Parameter

aChar:C | Beliebiges Zeichen
aChrCount:N | Länge der Zeichenkette, in der das Zeichen wiederholt wird

Rückgabewert

Alphanumerisch

Beispiel

StringOfChar('D', 10)   // Ergebnis: 'DDDDDDDDDD'

Siehe auch:

Asc()

Chr()


StrToken()

StrToken() – Zeichenfolge ausschneiden

Beschreibung

Die Funktion liefert einen Teil einer Zeichenkette an der Position aIndex zurück, welche durch Einteilungen des Textes mittels aDelimiter bestimmt wird.

Parameter

aText:C | Beliebige Zeichenkette
aDelimiter:C | Zeichen, das die Zeichenfolgen trennt
aIndex:N | Position in aText

Rückgabewert

Alphanumerisch

Beispiel

StrToken('80807 München', ' ', 2)    // Ergebnis: 'München'

StrToken('80807 München', '80', 3)   // Ergebnis: '7 München'

Siehe auch:

Token()

TokenCount()


StrTran()

StrTran() – Zeichen ersetzen

Beschreibung

Die Funktion durchsucht eine Zeichenkette nach dem Vorkommen einer bestimmten Zeichenkette und ersetzt diese durch einen anderen Wert.

Parameter

aText:C | Beliebige Zeichenkette
aSearchText:C | Zu suchende Zeichenkette
aReplaceText:C | Zeichenkette, mit der bei einem Treffer ersetzt werden soll
aStartPos:N | Position in aText, ab der aSearchText gesucht werden soll
aStopPos:N | Position in aText, bis zu der nach aSearchText gesucht werden soll

Rückgabewert

Alphanumerisch

Beispiel

StrTran('28.02.2009', '.', '')       // Ergebnis: '28022009'

StrTran('28.02.2009', '.02.', '#')   // Ergebnis: '28#2009'

Siehe auch:

Stuff()


StrZero()

StrZero() – Umwandlung in Zeichenkette mit führenden Nullen

Beschreibung

Die Funktion wandelt einen numerischen Wert in eine Zeichenkette um und ersetzt Leerzeichen linksbündig mit Nullen.

Hinweis

Wenn Sie Datenbankfelder verwenden und die optionalen Parameter N2 und N3 weglassen, wird bis zur vorgegebenen Feldlänge mit Nullen aufgefüllt.

Parameter

aValue:N | Beliebiger numerischer Wert
aWidth:N | Anzahl der Stellen insgesamt
aDecimals:N | Anzahl der Nachkommastellen

Rückgabewert

Alphanumerisch

Beispiel

StrZero(2009, 9, 2)   // Ergebnis: '002009.00'

Siehe auch:

Val()

Str()

SubStr()


StrZerol()

StrZerol() – Umwandlung in Zeichenkette mit Nullen

Beschreibung

Die Funktion wandelt einen numerischen Wert in eine Zeichenkette um und ersetzt Leerzeichen linksbündig mit Nullen.

Parameter

aValue:N | Beliebiger numerischer Wert
aLen:N | Anzahl der Stellen insgesamt
aDecimals:N | Anzahl der Nachkommastellen

Rückgabewert

Alphanumerisch

Siehe auch:

Val()

Str()

SubStr()


Stuff()

Stuff() – Zeichenkette einfügen

Beschreibung

Die Funktion fügt einer Zeichenkette eine weitere Zeichenkette an der angegebenen Stelle ein und löscht die angegebene Anzahl an Stellen nach der eingefügten Zeichenkette.

Parameter

aText:C | Beliebige Zeichenkette, in der ein Text eingefügt werden soll
aStartPos:N | Stelle, an der der Text eingefügt werden soll
aDelCount:N | Anzahl der Stellen, die nach dem eingefügten Text gelöscht werden sollen
aInsertText:C | Text, der eingefügt werden soll

Rückgabewert

Alphanumerisch

Beispiel

Stuff('Das ist ein Test!', 13, 0, 'Einfügen')   // Ergebnis: 'Das ist ein EinfügenTest!'

Stuff('Ich bin tun Text!', 9, 3, 'ein')         // Ergebnis: 'Ich bin ein Text!'

Siehe auch:

StrTran()

SubStr()


SubStr()

SubStr() – Zeichenfolge ausschneiden

Beschreibung

Die Funktion schneidet aus einer Zeichenkette eine Zeichenfolge beliebiger Länge aus.

Parameter

aText:C | Beliebige Zeichenkette
aStartPos:N | Position, ab der ausgeschnitten wird
aLen:N | Anzahl der auszuschneidenden Zeichen; (keine Angabe gibt Zeichenkette bis zum Ende zurück)

Rückgabewert

Alphanumerisch

Beispiel

SubStr('Dontenwill AG', 12, 2)   // Ergebnis: 'AG'

SubStr('83527 München', 7)       // Ergebnis: 'München'

Siehe auch:

Str()

Stuff()


Token()

Token() – Zeichenfolgen in Zeichenketten

Beschreibung

Die Funktion gibt eine Zeichenfolge einer Zeichenkette zurück, die durch ein Zeichen aDelimiter begrenzt ist.

Hinweis

Ist aIndex größer als die Anzahl der gefundenen Zeichenfolgen ('Tokens') oder gleich 0 wird ein leerer String zurückgegeben ('').

Parameter

aText:C | Beliebige Zeichenkette
aDelimiter:C | Zeichen, das die Zeichenfolgen trennt
aIndex:N | Gibt die Position der Zeichenfolge an (auf die Anzahl der Zeichenfolgen bezogen)

Rückgabewert

Alphanumerisch

Beispiel

Token('23/11/muc', '/', 1)   // Ergebnis: '23'

Token('23/11/muc', '/', 3)   // Ergebnis: 'muc'

Siehe auch:

StrToken()

TokenCount()


TokenCount()

TokenCount() – Anzahl der Tokens

Beschreibung

Die Funktion gibt die Anzahl der in aText gefundenen Zeichenfolgen zurück, die durch das Zeichen sDelimiter eingegrenzt sind.

Parameter

aText:C | Beliebige Zeichenkette
aDelimiter:C | Zeichen, das die Zeichenfolgen trennt

Rückgabewert

Numerisch

Beispiel

TokenCount('23/11/muc', '/')   // Ergebnis: 3

TokenCount('1.44.56.4', '.')   // Ergebnis: 4

Siehe auch:

StrToken()

Token()


Trim()

Trim() – Leerzeichen rechtsbündig löschen

Beschreibung

Die Funktion löscht alle rechtsbündigen Leerzeichen einer Zeichenkette.

Parameter

aText:C

Beliebige Zeichenkette

Rückgabewert

Alphanumerisch

Beispiel

Trim('Dontenwill                ')   // Ergebnis: 'Dontenwill'

Siehe auch:

AllTrim()

LTrim()

RTrim()


Upper()

Upper() – Umwandlung in Großbuchstaben

Beschreibung

Die Funktion wandelt alle Zeichen einer Zeichenkette in Großbuchstaben um.

Parameter

aText:C

Beliebige Zeichenkette

Rückgabewert

Alphanumerisch

Beispiel

Upper('Dontenwill')   // Ergebnis: 'DONTENWILL'

Siehe auch:

Lower()


URLDecode()

URLDecode() – Dekodiere gültige URL

Beschreibung

Dekodiert eine übergebene URL, so dass für Webbrowser umgewandelte Zeichen extrahierbar sind.

Hinweis

Die übergebene URL muss eine vom äußeren Format her gültige URL sein.

Parameter

aURL:C

URL, die dekodiert werden soll im Format
protocol://[user:password@]host[:port]/[url-path/][searchpart/][fragment]

Rückgabewert

Alphanumerisch

Beispiel

URLDecode("http://www.example.net/path/%C3%A4%C3%B6%C3%BC%20?param=%C3%A4%C3%B6%C3%BC%23info") // Ergebnis: 'http://www.example.net/path/äöü ?param=äöü#info'

Siehe auch:

URLEncode()


URLEncode()

URLEncode() – Kodiere in gültige URL

Beschreibung

Kodiert eine übergebene URL so, dass in einem Webbrowser aufgerufen kann (sog. GET-Request).

Zeichen, die nicht Bestandteil einer gültigen URL sind, werden entsprechend umgewandelt.

Funktion kann genutzt werden, um Inhalte von Datenbankfeldern, z.B. Namen oder Adressen, an einen Webservice weiterzugeben.

Hinweis

Die übergebene URL muss eine vom äußeren Format her gültige URL sein.

Parameter

aURL:C

URL, die kodiert werden soll im Format
protocol://[user:password@]host[:port]/[url-path/][searchpart/][fragment]

Rückgabewert

Alphanumerisch

Beispiel

URLEncode("http://www.example.net/path/äöü ?param=äöü#info") // Ergebnis: 'http://www.example.net/path/%C3%A4%C3%B6%C3%BC%20?param=%C3%A4%C3%B6%C3%BC%23info'

Siehe auch:

URLDecode()


Utf8ToAnsi()

UTF8ToAnsi() – UTF8-Format in ANSI-Format umwandeln

Beschreibung

Die Funktion konvertiert eine Zeichenkette (String) aus dem UTF8-Format in das ANSI-Format.

Parameter

aText:C

Text, der umgewandelt werden soll

Rückgabewert

Alphanumerisch

Beispiel

|aText|

aText := 'Mariä Himmelfahrt',

WriteLn('UTF8: ' + AnsiToUtf8(aText)),

WriteLn('ANSI: ' + Utf8ToAnsi(AnsiToUtf8(aText))),

Siehe auch:

AnsiToOem()

AnsiToUtf8()


Typenumwandlung

Siehe auch:

CurrToStr()

DateTimeToStr()

FloatToStr()

FormatDateTime()

IntToHex()

StrToDateTime()

StrToFloat()

StrToTime()

TextToShortCut()

TimeToStr()

Val()


CurrToStr()

CurrToStr() – Währung in Zeichenkette umwandeln

Beschreibung

Die Funktion wandelt eine Zahl (Numerisch) in eine Zeichenkette (String) um, wobei z.B. der aktuelle Dezimal-Trenner und die Genauigkeit für Währungsangaben berücksichtigt werden.

Parameter

aValue

Zahl

Rückgabewert

Alphanumerisch

Beispiel

CurrToStr(28.04)   // Ergebnis: '28,04'

Siehe auch:

Str()


DateTimeToStr()

DateTimeToStr() – Datum/Zeit in Zeichenkette umwandeln

Beschreibung

Die Funktion wandelt ein Datum (Timestamp) in eine Zeichenkette (String) um.

Parameter

aDate:D

Datum/Zeit

Rückgabewert

Alphanumerisch

Beispiel

DateTimeToStr(SToD('20090228'))   // Ergebnis: 28.02.2009

Siehe auch:

DToC()

DToS()

StrToDateTime()


FloatToStr()

FloatToStr() – Fließkommazahl in Zeichenkette umwandeln

Beschreibung

Die Funktion wandelt eine Fließkommazahl (Float) in eine Zeichenkette (String) um. Die Anzahl der Nachkommastellen kann festgelegt werden.

Parameter

aValue:N | Zahl, die umgewandelt werden soll
aDecimalCount:N | Anzahl der Nachkommastellen

Rückgabewert

Alphanumerisch

Beispiel

FloatToStr(23.06)        // Ergebnis: '23,06'

FloatToStr(27.3635, 1)   // Ergebnis: '27,4'

Siehe auch:

StrToFloat()


FormatDateTime()

FormatDateTime() – Datum/Zeit in Zeichenkette umwandeln

Beschreibung

Die Funktion wandelt ein Datum (Timestamp) in eine Zeichenkette (String) um. Die Darstellung kann dabei frei formatiert werden.

Hinweis

Wird beim Format z.B. bei Tag nur D angegeben, werden alle Tage von 1 bis 9 als 1, 2, 3 … angezeigt, wobei Tage größer 9 als 10, 11, 12 … dargestellt werden. Wird aber z.B. DD als Format für den Tag angegeben, werden auch die Tage von 1 bis 9 mit zwei Stellen angezeigt, also 01, 02, 03 … Diese Formatierung gilt für D, M, H, N, S, Z. Beim Jahr wird bei der Angabe von Y oder YY immer das Jahr im Format 04, 05, 06 … angezeigt und bei der Angabe von YYY oder YYYY wird immer das Jahr im Format 2004, 2005, 2006 … angezeigt.

Parameter

cDateFormat:C | Format, nach dem formatiert werden soll; D Tag (max. 2 Stellen); M Monat (max. 2 Stellen); Y Jahr (2 oder 4 Stellen); H Stunden (max. 2 Stellen); N Minuten (max. 2 Stellen); S Sekunden (max. 2 Stellen); Z Millisekunden (max. 3 Stellen)
aDate:D | Datum, das zu formatieren ist

Rückgabewert

Alphanumerisch

Beispiel

FormatDateTime('DD.MM.YY', Date())                        // 27.02.09

FormatDateTime('DD-MM-YYYY | hh:nn', Date() + TimeEx())   // 27-02-2009 | 11:59

FormatDateTime('D-MM | hh:nn:ss:z', Date() + TimeEx())    // 27-02 | 12:00:10:259

// Hinweis: Als Rückgabewert wird natürlich das aktuelle Systemdatum

//          und die aktuelle Uhrzeit ausgegeben.

Siehe auch:

BeFormat()

FormatFloat()


IntToHex()

IntToHex() – Dezimalzahl in Hexadezimalzahl umwandeln

Beschreibung

Die Funktion wandelt eine Dezimalzahl (Numerisch) in eine Hexadezimalzahl (String) um. Die Anzahl der zurückgegebenen Stellen kann festgelegt werden.

Hinweis

Es können bis zu 16 Stellen ausgegeben werden.

Parameter

aValue:N | Zahl, die umgewandelt werden soll
aDigitCount:N | Anzahl der zurückgegebenen Stellen

Rückgabewert

Alphanumerisch

Beispiel

IntToHex(5, 4)       // Ergebnis: '0005'

IntToHex(80331, 1)   // Ergebnis: '139CB'


StrToDateTime()

StrToDateTime() – Zeichenkette in Datum/Zeit umwandeln

Beschreibung

Die Funktion wandelt eine Zeichenkette (String) in ein Datum (Timestamp) um.

Parameter

aText:C

Text, der in ein Datum umgewandelt werden soll

Rückgabewert

Datum

Beispiel

StrToDateTime('28.02.2009 09:52:58')   // Ergebnis: 28.02.2009 09:52:58

StrToDateTime('28.02.2009')            // Ergebnis: 28.02.2009

StrToDateTime('28.02.09')              // Ergebnis: 28.02.2009

StrToDateTime('09:52:58')              // Ergebnis: 09:52:58

StrToDateTime('09:52')                 // Ergebnis: 09:52:00

Siehe auch:

DToC()

DToS()

DateTimeToStr()


StrToFloat()

StrToFloat() – Zeichenkette in eine Fließkommazahl umwandeln

Beschreibung

Die Funktion wandelt eine Zeichenkette (String) in eine Fließkommazahl (Float) um.

Parameter

aText:C

Text, der in eine Fließkommazahl umgewandelt werden soll

Rückgabewert

Numerisch

Beispiel

| a, b |

a := '12,5',

b := '17,6',

WriteLn(a + b),                          // Ergebnis: '12,517,6'

WriteLn(StrToFloat(a) + StrToFloat(b))   // Ergebnis: '30,1'

Siehe auch:

FloatToStr()


StrToTime()

StrToTime() – Zeichenkette in Zeit umwandeln

Beschreibung

Die Funktion wandelt eine Zeichenkette (String) in eine Zeiteinheit (Timestamp) um.

Parameter

aText:C

Text, der nach Zeit umgewandelt werden soll

Rückgabewert

Datum

Beispiel

StrToTime('18:12:05')   // Ergebnis: 18:12:05

StrToTime('23:5:12')    // Ergebnis: 23:05:12

StrToTime('05:12')      // Ergebnis: 05:12:00

Siehe auch:

TimeToStr()


TextToShortCut()

TextToShortCut() – ID eines Short-Cuts

Beschreibung

Die Funktion gibt die interne ID einen Shortcuts zurück.

Parameter

aText:C

Beschreibung der Tastenkombination

Rückgabewert

Numerisch; Referenziert einen Short-Cut anhand seiner internen ID oder liefert 0 wenn kein gültiger Short-Cut übergeben wurde.

Beispiel

TextToShortCut("Strg+C")               // Ergebnis: 16451

TextToShortCut("Strg+Alt+Leertaste")   // Ergebnis: 49184


TimeToStr()

TimeToStr() – Zeit in Zeichenkette umwandeln

Beschreibung

Die Funktion wandelt eine Zeiteinheit (Timestamp) in eine Zeichenkette (String) um.

Parameter

aDate:D

Zeit, die nach Text umgewandelt werden soll

Rückgabewert

Alphanumerisch

Beispiel

TimeToStr(TimeEx())   // Ergebnis: 12:30:00

                      // Hinweis:  Als Rückgabewert wird natürlich

                                   die aktuelle Systemzeit ausgegeben.

Siehe auch:

DToC()

DToS()

StrToTime()


Val()

Val() – Zeichenkette in Zahl umwandeln

Beschreibung

Die Funktion wandelt einen Text (String) in eine Zahl (Numerisch) um.

Parameter

aText:C

Text, der in eine Zahl umgewandelt werden soll

Rückgabewert

Numerisch

Beispiel

Val('0005801')   // Ergebnis: 5801

Siehe auch:

Str()


TBatchMail

TBatchMail

Klasse zur Bereitstellung von Informationen für den Email-Versand.

Eigenschaften:

Allgemeine-Eigenschaften

From Email-Adresse des Absenders

Aktive-Eigenschaften (Methoden)

AttachmentList Liefert ein Array mit allen an die Email angehängten Dateien

Format: {{nAttachmentId:N, cFileName:C, nFileSize:N}, {...}}

Verwendung:

Auf diese Klasse kann während dem Event "vor Email-Versand" zugegriffen werden

Beispiel

| nEvtNo:P1, aInfo:P2, aText:P3, aNote:P4, oBatchMail:P5, i |

// Aufruf erfolgt vor dem Versenden jeder Email

// ...

// löscht alle Anhänge der Email

for i:=1 to ALen(oBatchMail.AttachmentList) do

  AttachmentDelete(oBatchMail, 1)

next,


TBeAbsenceBusinessController

TBeAbsenceBusinessController

Die Klasse TBeAbsenceBusinessController kapselt Eigenschaften und Funktionen zur Verwaltung von Mitarbeiter Abwesenheiten,

Ressourcen Ausfällen und Feiertagen.

Hinweis

Für alle Aktionen muss auf dem Daten-Modul eine Transaktion aktiv sein.

Der TBeAbsenceBusinessController führt keinen BDE-Monatskonto-Reorg bzw. Feiertags-Reorg durch, dieser muss manuell ausgelöst werden.

Eigenschaften

Eigenschaften

CbDataModule:O

Daten-Modul, für alle Funktionen und Methoden die Daten verändern / erzeugen muss auf diesem Daten-Modul eine Transaktion gestartet werden

Funktionen und Methoden

CbCreateNewPersonnelAbsence:N

Neue Mitarbeiter Abwesenheit anlegen

Ist bereits ein Eintrag zu diesem Datum & Mitarbeiter vorhanden, werden die Wert-Felder geleert und mit den neuen Werten überschrieben.

Rückgabe ist die Datensatz-ID des erstellten Eintrags

aPersNo:N

Personal-Nr. für die der Eintrag angelegt werden soll

aAbsenceDate:D

Datum der Abwesenheit

aValues:A

Art und Dauer der Abwesenheit als Array im Format:

{{Typ, Wert},

 {Typ, Wert}}

jeder Typ maximal einmal enthalten sein. Die Wert-Angabe ist soweit nicht anderes Beschrieben in 0,25 Schritten bzw. je Einstellung im Personal-Stamm (DAB262:EING_VALID). Die Funktion berücksichtigt die maximale Anwesenheit des Mitarbeiters zum Eintrags-Datum.

ahIllness:N | Krankheit
ahAdvancedEducation:N | Fortbildung
ahVocationalSchool:N | Berufschule
ahShortTime:N | Kurzarbeit
ahSpecialLeave:N | Sonderurlaub
ahIndustrialAccident:N | Betriebsunfall
ahBusinessTrip:N | Dienstreise
ahCompTime:L | Zeitausgleich; True / False
ahVacation:N | Urlaub; Als Urlaubs-Tag Anteil (0 bis 1) in 0,25 Schritten bzw. wie oben beschrieben

CbDeletePersonnelAbsence:L

Mitarbeiter Abwesenheit löschen

Rückgabe True, wenn Datensatz gefunden & gelöscht wurde, sonst False

aPersNo:N | Personal-Nr. für die der Eintrag gelöscht werden soll
aAbsenceDate:D | Datum der Abwesenheit die gelöscht werden soll

CbCreateNewResourceAbsence:N

Neuen Ressourcen Ausfall anlegen

Rückgabe ist die Datensatz-ID des erstellten Eintrags

aResID:N | Ressourcen-ID. für die der Eintrag angelegt werden soll
aAbsenceDate:D | Datum der Abwesenheit
aAbsenceHours:U | Dauer des Ausfalls in Stunden (in 0,25 Schritten)

CbDeleteResourceAbsence:L

Ressourcen Ausfall löschen

Rückgabe True, wenn Datensatz gefunden & gelöscht wurde, sonst False

aResID:N | Ressourcen-ID. für die der Eintrag gelöscht werden soll
aAbsenceDate:D | Datum der Abwesenheit die gelöscht werden soll

CbCreateNewHoliday:N

Neuen Feiertags Eintrag anlegen

Rückgabe ist die Datensatz-ID des erstellten Eintrags

aDate:D | Datum des Feiertags
aRate:N | Feiertags-Anteil (1-100)

CbDeleteHoliday:L

Feiertags Eintrag löschen

Rückgabe True, wenn Datensatz gefunden & gelöscht wurde, sonst False

aDate:D

Datum des Feiertags der gelöscht werden soll

CbIDByEntryTypeAndDate:N

Eintrag nach Typ & Datum suchen

Rückgabe ist die Datensatz-ID des gefundenen Eintrags, sonst -1

aEntryType:N

Eintrags-Typ nach dem gesucht werden soll

aetHoliday | Feiertag
aetPersonnel | Mitarbeiter-Abwesenheit
aetResource | Ressourcen-Ausfall

aKey:N

ID nach der gesucht werden soll

(nur relevant bei aetPersonnel & aetResource und entspricht dann der Personal-Nr. bzw. Ressourcen-ID)

aAbsenceDate:D

Datum des Eintrags der gesucht werden soll

CbResetCache_HolidayShutdownPeriod

Löscht alle gecachten Feiertage- und Betriebsruhe-Einträge.
Alle erneuten Zugriffe auf Feiertage oder Betribsruhen, erfolgen dann erst über die Dab272 und werden dann wieder gecacht.

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: TBeAbsenceBusinessController

//##############################################################################

//##############################################################################

| m_oAbsBC, m_oDM, oDab272, aAbsence |

m_oDM := CreateObject('TBeDbGet'),

startseq

   m_oAbsBC := CreateObject('TBeAbsenceBusinessController'),  // Kontroller

   startseq

      m_oAbsBC.CbDataModule := m_oDM,

      startseq,

         DbStartTrans(m_oDM.AdsConnection),

         startseq

            // Mitarbeiter-Abwesenheits-Eintrag löschen

            m_oAbsBC.CbDeletePersonnelAbsence(1, today()-6),

            // Ausfall-Eintrag einer Ressource löschen

            m_oAbsBC.CbDeleteResourceAbsence(9, today()),

            // Feiertag löschen

            m_oAbsBC.CbDeleteHoliday(CToD('31.12.19')),

            if jn('Löschungen wirklich übernehmen?') then

               DbCommit(m_oDM.AdsConnection),

            else

               DbRollback(m_oDM.AdsConnection),

            endif,

         always

            if DbInTrans(m_oDM.AdsConnection) then

               DbRollback(m_oDM.AdsConnection),

               DbResetDm(m_oDM),

            endif,

         stopseq,

         DbStartTrans(m_oDM.AdsConnection),

         startseq

            // Neuen Mitarbeiter-Abwesenheits-Eintrag anlegen

            aAbsence := {

                         //{ahIllness, 0.25},

                         {ahAdvancedEducation, 0.5},

                         //{ahVocationalSchool, 1},

                         //{ahShortTime, 1.25},

                         //{ahSpecialLeave, 1.5},

                         //{ahIndustrialAccident, 1.75},

                         //{ahBusinessTrip, 2},

                         {ahVacation, 0.5}

                         //, {ahCompTime, False}

                         },

            m_oAbsBC.CbCreateNewPersonnelAbsence(1, today()-6, aAbsence),

            // Neuen (5 Stunden) Ausfall-Eintrag einer Ressource anlgen

            m_oAbsBC.CbCreateNewResourceAbsence(9, today(), 5),

            // (Halben) Feiertag anlegen

            m_oAbsBC.CbCreateNewHoliday(CToD('31.12.19'), 50),

            if jn('Änderungen wirklich übernehmen?') then

               DbCommit(m_oDM.AdsConnection),

            else

               DbRollback(m_oDM.AdsConnection),

            endif,

         always

            if DbInTrans(m_oDM.AdsConnection) then

               DbRollback(m_oDM.AdsConnection),

               DbResetDm(m_oDM),

            endif,

         stopseq,

         // Eintag zu einem Datum suchen

         m_oAbsBC.CbIDByEntryTypeAndDate(aetHoliday, 0, CToD('31.12.19')),

         m_oAbsBC.CbIDByEntryTypeAndDate(aetResource, 9, today()),

         m_oAbsBC.CbIDByEntryTypeAndDate(aetPersonnel, 2, today()),

      onerror

         Meld(GetErrorText()),

         raise(),

      stopseq,

   always,

      DestroyObject(m_oAbsBC),

   stopseq,

always

   DestroyObject(m_oDM),

stopseq,


TBeAccountingControlBO

TBeAccountingControlBO

Die Klasse TBeAccountingControlBO kapselt den Zugriff auf die Dab235 - Einkauf Rechnungs-Kontrolle.

Achtung:

Dieses BO steht im Codeblock derzeit nur für die Verwendung innerhalb der "bei Übertragung von BO-Daten"-Events zur Verfügung.

In allen anderen Situationen darf das Business Objekt nicht verwendet werden.

Eigenschaften:

Eigenschaften
DeliveryNoteNo:C | Lieferschein-Nummer (Dab235:LF_NUMMER)
OrderPosNo:C | Bestell-/Positions-Nummer (Dab235:BESTPOSNR)
Date:D | Buchungs-Datum (Dab235:DATUM)
ArticleNo:C | Artikelnummer (Dab235:ARTNR)
Description1:C | Bezeichnung 1 (Dab235:BEZ1)
Description2:C | Bezeichnung 2 (Dab235:BEZ2)
DispositionNo:C | Kettfeld Dab020 (intern) (Dab235:DISPONR)
SupplierNo:N | Lieferanten-Nummer (Dab235:LIEFNR)
CurrencyID:N | Währungs-Kennzeichen (Dab235:WAEKZ)
CurrencyRateBase:N | Basis-Einkaufs-Kurs (Dab235:FW_KURSBAS)
CurrencyRate:N | Gebucht zum Kurs (Dab235:FW_KURS)
AveragePurchPrice:N | Durchschnittlicher Artikel-EK vor Einkaufs-Buchung (Dab235:DUREK_VORB)
PriceForCurrency:N | Brutto-Preis in Währung (Dab235:SOEK)
Discount1:N | Einkaufs-Rabatt % 1 (Dab235:RABATT1)
Discount2:N | Einkaufs-Rabatt % 2 (Dab235:RABATT2)
Discount3:N | Einkaufs-Rabatt % 3 (Dab235:RABATT3)
PriceUnitFactorPurchase:N | Preis-Einheit Zugangs-Buchung (Dab235:PE)
UnitPurchase:C | ME Einkauf (Dab235:ME_EK)
UnitFactorPurchase:N | Faktor ME_EK -> ME (Dab235:ME_UMR)
UnitFactorSales:N | Faktor ME -> ME_PE (Dab235:ME_UMR_PE)
PurchasePrice:N | Gebuchter Netto-Preis in Eigenwährung (Dab235:EKP)
Quantity:N | Gebuchte Menge ME Lager (Dab235:MENGE)
QuantityPurchased:N | Gebuchte Menge ME_EK (Dab235:MENGE_EK)
AdditionalText1:C | Zusatz-Text 1 (Dab235:Z_TEXT1)
AdditionalCostMode1:C | Zusatz-Kosten-Typ 1 (Dab235:Z_MODE1)
AdditionalCost1:N | Zusatz-Kosten 1 (Dab235:Z_KOST1)
AdditionalText2:C | Zusatz-Text 2 (Dab235:Z_TEXT2)
AdditionalCostMode2:C | Zusatz-Kosten-Typ 2 (Dab235:Z_MODE2)
AdditionalCost2:N | Zusatz-Kosten 2 (Dab235:Z_KOST2)
AdditionalText3:C | Zusatz-Text 3 (Dab235:Z_TEXT3)
AdditionalCostMode3:C | Zusatz-Kosten-Typ 3 (Dab235:Z_MODE3)
AdditionalCost3:N | Zusatz-Kosten 3 (Dab235:Z_KOST3)
DutyCostInPercent:N | Beschaffungs-/Zollkosten in % (Dab235:ZOLLPROZ)
DutyCostAbsolute:N | Beschaffungs-Zollkosten Betrag (Dab235:ZOLLBETR)
ImpersonalAccount:N | Sachkonto (Dab235:SACHKONTO)
CostCenter:N | Kostenstelle (Dab235:KOSTENST)
CustomerOrderNo:N | Kundenauftrag (Dab235:ANUMMER)
CustomerOrderNoSync:C | Weiterverrechnung Kundenauftrag (Dab235:ANUMMER_X)
CustomerOrderPosNo:C | Kundenauftrags-Positionsnummer (Dab235:APNUMMER)
InStore:C | Buchung lagerwirksam (Dab235:AUF_LAG)
Store:N | Gebucht auf Lagernummer (Dab235:LAGER)
PackagingUnitMode:N | Kennzeichen für Mengen-Einheit (Dab235:VE_NR)
ModifiedStamp:C | Datum / Uhrzeit der Buchung (Dab235:B_ZEIT)
Location:N | Standort (Dab235:STANDORT)
Department:N | Abteilungsnummer (Dab235:ABTEILUNG)
CreatedBy:C | Platz-Nr des Bearbeiters (Dab235:PLATZ)
OrderData:C | Bestell-Daten (Dab235:B_DATEN)

Methoden
CbInsert | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbEdit | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbCancel | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbPost | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbDelete | Diese Methode ist für dieses Business-Objekt nicht verfügbar

Verfügbare Ereignisse

Siehe auch:

TBePurchaseDispositionBO

TBePurchaseDispositionBusinessController

TBePurchaseDispositionPlanningBO


TbeAction

TBeAction

Basis-Action Klasse.

Eigenschaften:

Eigenschaften |
Verfügbare Ereignisse |
OnExecute | Doppelklick auf dem Wert von diese Ereignis fügt in CB-Code neue Methode hinzu. Wird eine Taste oder ein Menu-Item, das diese TbeAction zugewiesen hat, geklickt, wird diese Methode ausgeführt.
Funktionen und Methoden |
Color:N | Definiert die Farbe einer Toolbar-Taste, die diese TbeAction zugewiesen hat. Um die Farben zu sehen, muss die Benutzer-Einstellungen mit "Schaltflächen hervorheben" aktiv sein.. Die Schaltfläche wird wird nur angezeigt, wenn das Programm mit dem Formular im Individuell-Menü Editor gesetzt und direkt aus be/Fibu/Belegdruck (Print Manager) im Hauptmenü/Menü oder Context-Menü eines Browsers aufrufen wird. Nur in diesen drei Modulen kann man die Farbe der Tasten sehen.

Verwendung:

- TbeActionList auf eine F12-Maske platzieren, doppelt klicken, neue TbeAction anlegen oder eine schon existierte TbeAction editieren.

- Jede TbeActionList hat eine Möglichkeit, um alle nicht TbeActions auf TbeActions über das Context-Menu (Rechts-Klick) zu konvertieren.

- Die so gesteuerte TbeAction kann einer Toolbar-Taste zugewiesen werden.


TBeAdsQuery

TBeAdsQuery

Die Klasse TBeAdsQuery kapselt Eigenschaften und Funktionen für die Verwendung des BeAdsQuery.

Eigenschaften

CbFilter:C

Liefert den aktuellen Filter zurück oder setzt ihn.

CbFiltered:L

Aktiviert oder deaktiviert die Filterung der Tabelle.

CbFieldCount:N

Liefert die Anzahl der Felder zurück.

CbBoF:L

"Begin of File". Gibt an, ob sich der Zeiger auf dem ersten Datensatz befindet.

CbEoF:L

"End of File". Gibt an, ob sich der Zeiger auf dem letzten Datensatz befindet.

CbRecordCount:N

Liefert die Anzahl der Datensätze zurück.

CbRecNo:N

Liefert die Nummer des aktuellen Datensatzes zurück.

CbBookmark:C

Speichert die Position des aktuellen Datensatzes in einem Bookmark-String und kann die Position wieder auf diesen Datensatz setzen.

CbDataAvailable:L

Die Eigenschaft ist True, wenn Datensätze sichtbar sind

CbNoDataAvailable:L

Die Eigenschaft ist True, wenn keine Datensätze sichtbar sind (z.B. wenn die Tabelle gefiltert ist)

CbPermFilterCount:N

Gibt die Anzahl der in der Tabelle gesetzten permanenten Filter zurück.

Diese Eigenschaft ist nur lesbar.

Funktionen

CbField():O

Die Funktion ermittelt ein Feld-Objekt anhand des Feldindexes und liefert es zurück.

Result - Feld-Objekt vom Typ TField

nIndex:N

Index des Feldes

CbFieldByName():0

Die Funktion ermittelt ein Feld-Objekt anhand des Feldnamens und liefert es zurück.

Result - Feld-Objekt vom Typ TField

cFieldName:C

Name des Feldes

CbLocate():L

Die Funktion sucht in der Datenmenge nach einem bestimmten Datensatz und macht diesem zum aktive Datensatz.

Result - Datensatz gefunden

cKeyFields:C

Feldnamen der Felder die durchsucht werden sollen. Durch Semikolon getrennt:

'Feld1;Feld2'

cKeyValues:C

Suchbegriffe als Array:

{Wert1, Wert2}

nOptions:N

Suchoptionen:

loCaseInsensitive - Schlüsselfelder und Schlüsselwerte werden ohne Berücksichtigung der Groß-/Kleinschreibung verglichen

loPartialKey - Schlüsselwerte müssen nicht vollständig übereinstimmen

CbDisplayText():C

Die Methode repräsentiert den Feldwert, wie er in einem datensensitiven Steuerelement angezeigt werden kann.

Result - Anzeigetext

cFieldName:C

Name des Feldes, dessen Anzeigetext ermittelt werden soll

CbGoTo():L

Die Funktion springt zu dem Datensatz, dessen RecordNumber aRecordNo ist.

Result - Positionierung erfolgreich

nRecordNo:N

RecordNumber des Datensatzed, auf den positioniert werden soll

CbGetRecAsArray():O

Die Funtkion ermittelt den aktuellen Datensatz als Array. Jedes Feld ist ein Element des Arrays.

Result - Datensatz als Array

CbIsNoRecordMove():L

Die Funktion liefert True zurück wenn NoRecordMove für die Tabelle aktiv ist, ansonsten liefert sie False zurück

Result - NoRecordMove aktiv

Methoden

CbFirst()

Die Methode positioniert den Zeiger auf den ersten Datensatz.

CbLast()

Die Methode positioniert den Zeiger auf den letzten Datensatz.

CbEnableControls()

Die Methode aktiviert die Benachrichtigungen von datensensitiven Steuerelementen, die mit dem Query verbunden sind, falls diese zuvor mit CbDisableControls() deaktiviert wurden.

CbDisableControls()

Die Methode verhindert die Benachrichtigungen von datensensitiven Steuerelementen, die mit dem Query verbunden sind. Es werden beispielsweise die Browser, welche auf das Query zugreifen nicht mehr automatisch aktualisiert. Dies kann die Geschwindigkeit erheblich erhöhen. Es muss durch ein startseq - always - stopseq sichergestellt werde, das CbEnableControls() ausgeführt wird.

CbNext()

Die Methode verschiebt den Zeiger um einen Datensatz nach unten.

CbPrior()

Die Methode verschiebt den Zeiger um einen Datensatz nach oben.

CbMove()

Die Methode verschiebt den Zeiger um die Anzahl der Datensätze aus nRecordCount in die gewünschte Richtung. Wenn nRecordCount negativ ist wird der Zeiger nach oben verschoben, wenn nRecordCount positiv ist, wird der Zeiger nach unten verschoben

nRecordCount:N

Anzahl der Datensätze um die der Zeiger verschoben werden soll.

CbSetFilter()

Setzt einen Filter auf das Query und aktiviert diesen.

cFilter:C

Logischer Filter-Ausdruck.

CbRefresh()

Die Methode aktualisiert die Datenmenge durch erneutes Abrufen der Daten aus der Datenbank.

CbExecSQL()

Die Funktion führt das SQL Statement aus, das vorher über die Eigenschaft "SQL" des Queries gesetzt wurde. Diese Methode ist für SQL-Statements gedacht, die keine Rückgabemenge erzeugen, also z.B. ein "UPDATE"-Statement.

CbBeginNoRecordMove()

Die Methode aktivert die NoRecordMove-Logik für die Tabelle. Währen NoRecordMove aktiv ist, kann die Tabelle nicht umpositioniert werden.

cNoRecordMoveFormName:c

Name des Formulars, in dem die Tabelle die gesperrt werden soll, verwendet wird.

CbEndNoRecordMove()

Die Methode deaktivert die NoRecordMove-Logik für die Tabelle wieder. Wenn die Methode aufgerufen wird wenn die NoRecordMove-Logik nicht aktiv ist, wird eine Exception ausgelöst

cNoRecordMoveFormName:c

Name des Formulars, in dem die Tabelle die entsperrt werden soll, verwendet wird.

CbAddPermFilter()

Fügt einen permanenten Filter hinzu.

aFilter:c

Filterbedingung

CbRemovePermFilter()

Hebt alle permanente Filter auf.

CbGetPermFilter()

Liefert einen bestimmten Filterausdruck zurück. Falls der eingegebene Index in der Liste der Filter nicht vorhanden ist (z.B. -1), liefert die Funktion alle permanente Filterausdrücke zurück.

aFilter:N

Filterindex

Verfügbare Ereignisse

NoRecordMoveChanged

Nach dem Umschalten der NoRecordMoveLogik

NoRecordMoveChanging

Beim Umschalten der NoRecordMove-Logik


TBeAlternativeUserBusinessObject

TBeAlternativeUserBusinessObject

Die Klasse TBeAlternativeUserBusinessObject kapselt Eigenschaften eines alternativen Logins (DabALD).

Eigenschaften:

Tabellen und Felder
CbID:N | Datensatz-ID; (DABALD:ID) (nur lesender Zugriff)
CbCreatedBy:D | Erstellt am / um; (DABALD:ERSTELLT)
CbCreated:C | Erstellt durch; (DABALD:PLATZ)
CbChangedBy:D | Zuletzt geändert am / um; (DABALD:GEAENDERT)
CbChanged:C | Zuletzt geändert durch; (DABALD:GEAEND_USR)
CbUserNoStr:C | Zugeordneter be-User, unter dem Services ausgeführt werden sollen (in Hinblick auf Rechte, etc.); (entspricht DABALD:USER_NR)
CbLogonName:C | Name zum Login; (entspricht DABALD:LOGIN)
CbPasswordEncrypted:C | Kennwort (gehashed); (entspricht DABALD:PW_ENCRYP)
CbComment:C | Kommentar/Beschreibung; (entspricht DABALD:MEMO)
CbLoginType:C | Art der Verknüpfung (Benutzer, Personal, Kontakt, Kunde, Lieferant, Vertreter); (entspricht DABALD:USERTYP)
CbLocation:N | Standort; (entspricht DABALD:LOCATION)
CbDepartment:N | Abteilung; (entspricht DABALD:DEPARTMENT)
CbLanguage:C | Sprache; (entspricht DABALD:LOCALE)
CbRegistrationAllowedAfter:D | Login ist erst zu diesem Zeitpunkt möglich; (entspricht DABALD:NOTBEFORE)
CbRegistrationAllowedUntil:D | Login ist nach diesem Zeitpunkt nicht mehr möglich; (entspricht DABALD:NOTAFTER)
CbDuration:N | Wie lang bleibt eine Session nach dem Login gültig; (entspricht DABALD:DURATION)
CbIsValid:L | Gültigkeitskennzeichnung; (entspricht DABALD:VALID)
CbIsPasswordFixed:L | Passwort änderbar; (entspricht DABALD:PW_FIXED)
CbAgentNo:N | Vertreternummer; (entspricht DABALD:VTNR)
CbCustomerNo:N | Kundennummer; (entspricht DABALD:KDNR)
CbSupplierNo:N | Lieferantennummer; (entspricht DABALD:LINR)
CbPersonnelNo:N | Personalnummer; (entspricht DABALD:PERSNR)
CbContactNo:N | Kontaktnummer; (entspricht DABALD:CONTACT_ID)
CbEmail:C | Emailadresse zum Login; (entspricht DABALD:EMAIL)

Beispiel

// siehe TBeAlternativeUserBusinessController

Siehe auch:

BeAlternativeUserBusinessController


TBeAlternativeUserBusinessController

TBePurchaseDispositionBC

Die Klasse TBeAlternativeUserBusinessController kapselt alle Funktionalitäten die zum Anlegen von Einträgen in den

alternativen Logins benötigt werden.

Eigenschaften:

Eigenschaften

CbDataModule:O

Datenmodul auf dem der BusinessController arbeitet.

Methoden

CbInsert_AlternativeUser

Erstelle den im übergebenen BO einen neuen alternativen Login und verbleibt im Bearbeitungs-Modus

aAlternativeUserBO:O

Objekt vom Typ TBeAlternativeUserBO

CbEdit_AlternativeUser

Bearbeiten eines existierenden im übergebenen BO positionierten alternativen Login.

aAlternativeUserBO:O

Objekt vom Typ TBeAlternativeUserBO

CbPost_AlternativeUser

Speichern den alternativen Login im übergebenen und im Neuanlage-/Bearbeitungsmodus befindlichen BO.

aAlternativeUserBO:O

Objekt vom Typ TBeAlternativeUserBO

CbCancel_AlternativeUser

Neuanlage/Bearbeitung eines alternativen Logins abbrechen.

aAlternativeUserBO:O

Objekt vom Typ TBeAlternativeUserBO

CbDelete_AlternativeUser

Entfernt den im übergebenen BO positionierten alternativen Login

aAlternativeUserBO:O

Objekt vom Typ TBeAlternativeUserBO

Beispiel

//******************************************************************************

function AddAlternativeLogin(cLoginName, cPassword, cType, nAssociation)

| oBO, oBC, oDM |

   oBO := createobject('TBeAlternativeUserBO'),

   oBC := createobject('TBeAlternativeUserBusinessController'),

   oDM := CreateObject('TBeDBGet'),

   startseq

      oBC.CbDataModule := oDM,

      DBStartTrans(oDM.ADSConnection),

      oBC.CbInsert_AlternativeUser(oBO),

      // Name und Password sind Case-Sensitive

      oBO.CbLogonName := cLoginName,

      // Es ist nur möglich sich diesem Hash verfahren einzuloggen (WEB-Tech)

      oBO.CbPasswordEncrypted := GeneratePasswordHash(cPassword, ccmHex, hfSHA512),

      oBO.CbLoginType := cType,

      oBO.CbCustomerNo := nAssociation,

      oBC.CbPost_AlternativeUser(oBO),

      DBCommit(oDM.ADSConnection),

   always

     if DBInTrans(oDM.ADSConnection) then

       DBRollback(oDM.ADSConnection),

     endif,

     DestroyObject(oBO),

     DestroyObject(oBC),

     DestroyObject(oDM),

   stopseq,

end,

function EditAlternativeLogin(nId, cPassword)

| oBO, oBC, oDM |

   oBO := createobject('TBeAlternativeUserBO'),

   oBC := createobject('TBeAlternativeUserBusinessController'),

   oDM := CreateObject('TBeDBGet'),

   startseq

      oBC.CbDataModule := oDM,

      DBStartTrans(oDM.ADSConnection),

      oBO.CbGoToId(nId),

      oBC.CbEdit_AlternativeUser(oBO),

      // Es ist nur möglich sich diesem Hash verfahren einzuloggen (WEB-Tech)

      oBO.CbPasswordEncrypted := GeneratePasswordHash(cPassword, ccmHex, hfSHA512),

      oBC.CbPost_AlternativeUser(oBO),

      DBCommit(oDM.ADSConnection),

   always

     if DBInTrans(oDM.ADSConnection) then

       DBRollback(oDM.ADSConnection),

     endif,

     DestroyObject(oBO),

     DestroyObject(oBC),

     DestroyObject(oDM),

   stopseq,

end,

//******************************************************************************

function DeleteAlternativeLogin(nId)

   | oBO, oBC, oDM |

   oBO := createobject('TBeAlternativeUserBO'),

   oBC := createobject('TBeAlternativeUserBusinessController'),

   oDM := CreateObject('TBeDBGet'),

   startseq

      oBC.CbDataModule := oDM,

      DBStartTrans(oDM.ADSConnection),

      oBO.CbGoToId(nId),

      oBC.CbDelete_AlternativeUser(oBO),

      //oBC.CbPost_AlternativeUser(oBO),

      DBCommit(oDM.ADSConnection),

   always

     if DBInTrans(oDM.ADSConnection) then

       DBRollback(oDM.ADSConnection),

     endif,

     DestroyObject(oBO),

     DestroyObject(oBC),

     DestroyObject(oDM),

   stopseq,

end,

// Create an alternative login for Customer 11372

AddAlternativeLogin('ALD_USER1', 'be32', '30', 11372),

// Updates with a new password

EditAlternativeLogin(73, 'be64'),

DeleteAlternativeLogin(73),

Siehe auch:

TBeAlternativeUserBusinessObject


TBeAltGrid

TBeAltGrid

Control zum Anzeigen der Datensätze einer Datenbank-Tabelle oder einer Memory-Table.

Eigenschaften
AutoCalcSum:L | (default) True = Summen-Funktion ausführen und in der Fuß-Zeile (falls vorhanden) anzeigen
AutoRefreshTime:N | Gibt das Aktualisierungs-Intervall (in Sekunden) des Browsers an, 0 = keine Aktualisierung
Columns:O | Eine Liste mit Elementen vom Typ TBeColumn. Über die Funktion CollAdd(...) ist es möglich im Codeblock Browser-Spalten der Liste hinzuzufügen.
DataSource:O | Standard Datenquelle für die Anzeige im Grid
DbRelList:O | Datenbank-Relationen
DeleteLock:L | (default) False = Browser akzeptiert keine Eingabe von [Entf] der Tastatur; True = Aktueller Datensatz kann gelöscht werden
InsertLock:L | (default) False = Browser akzeptiert keine Eingabe von [Einfg] der Tastatur; True = Ein Datensatz kann hinzugefügt werden
ExecLoaded:L | (writeonly) Initialisiert Popup-Menü und Image-List
ExecRefreshSortMarks:L | Aktualisiert die Sortierung der Browser-Spalten abhängig von der aktuellen Sortierung der Datenquelle
GridOrder:C | Sortierung der Browser-Spalten
ID:C | Identifiziert die Browser-Definitionen; Hinweis: Es können während der Laufzeit auch andere vordefinierte Browser-Definitionen geladen werden, indem man die gewünschte ID setzt und anschließend die Browser-Definitionen durch setzen der Eigenschaft ReadWriteProps auf 0 neu lädt.
ReadWriteProps:N | 0 = Browser-Definitionen laden; 1 = Aktuelle Browser-Definitionen in die DabFIL speichern; Hinweis: Vor dem Setzten dieser Eigenschaft muss die ID der Browser Definitionen gesetzt werden und das registrierte Dataset auf Active gesetzt werden, da dieser sonst keine Spalten anzeigt und auch keine Einstellungen vorgenommen werden können.
RecalcSum:L | (readonly) Berechnet Summen-Codeblöcke neu
Refreshing:L | (readonly) Gibt an, ob sich das Grid im Refresh-Zustand befindet
RegisterDataset:O | Registriert das zugewiesene DataSet
UnRegisterDataset:O | Entfernt die Registrierung für das zugewiesene DataSet (falls vorhanden)
SelectedField:O | Bestimmt das aktuell ausgewählte Feld
SelectedIndex:N | Index der aktuell ausgewählten Spalte
ShowEditMenus:N | Bestimmt ob im Kontextmenü die Einträge "Neu" und "Löschen" angezeigt werden; 0 = Kein Eintrag; 1 = Eintrag "Neu"; 2 = Eintrag "Löschen"; 3 = Beide Einträge
ToggleBooleanOptions:L | Gibt an ob logische Felder im Browser per Mausklick umgeschalten werden können
CbChangeOrder:L | Sortierung per Spalten-Klick (nur wenn das DataSet eine Memtable oder Query ist)
CbPrimarySortField:C | Hier kann ein Name eines Feldes angegeben werden, das immer bei der Sortierung über einen Spalten-Klick berücksichtigt werden soll. Dieses Feld beeinflusst auch das OrderBy von MemTables und Querys die dem TBeAltGrid zugewiesen wurden.
UseOnlyRegisteredDataSets:L | Bei True werden nur noch Tabellen berücksichtigt die dem DataSource des Grids zugewiesen ist oder per RegisterDataset im Grid registriert wurden. Erhöht die Performance bei der Anzeige des Grids. Default = False

Funktionen und Methoden
CbRefreshDynamicCaption() | Aktualisiert Spalten-Überschriften
CbRefreshShowOnlyWhen() | Aktualisiert anzuzeigende Browser-Spalten

Beispiel

//##############################################################################

//##############################################################################

// Online-Hilfe Beispiel für die Klasse 'TBeAltGrid'

//##############################################################################

//##############################################################################

| oForm, oGrid, oPanel, oInfoPanel, oEditOutput, oButton, oDS, oQuery |

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Gibt den Wert der übergebenen Eigenschaft zurück.

// Ist die Eigenschaft ein Objekt wird nur der Klassenname zurückgegeben

// @Result: string

//******************************************************************************

function GetValStr(o)

   if IsObject(o) then

      Result := '[Object] ' + iif(o <> nil, ClassName(o), '<NIL>'),

   else

      Result := '[Value ] ' + ArrToStr({o}),

   endif,

end,

//##############################################################################

//##############################################################################

// Eventhandler

//##############################################################################

//##############################################################################

//******************************************************************************

// Zeigt eine Liste der wichtigen Grid-Eigenschaften an

// @Result: null

//******************************************************************************

function QueryProperties(Sender)

   startseq,

      oEditOutput.Text := 'Columns:              ' + GetValStr(oGrid.Columns)              + crlf +

                          'DataSource:           ' + GetValStr(oGrid.DataSource)           + crlf +

                          'DbRelList:            ' + GetValStr(oGrid.DbRelList)            + crlf +

                          'DataModule:           ' + GetValStr(oGrid.DataModule)           + crlf +

                          'ShowEditMenus:        ' + GetValStr(oGrid.ShowEditMenus)        + crlf +

                          'AutoRefreshTime:      ' + GetValStr(oGrid.AutoRefreshTime)      + crlf +

                          'Refreshing:           ' + GetValStr(oGrid.Refreshing)           + crlf +

                          'GridProp:             ' + GetValStr(oGrid.GridProp)             + crlf +

                          'RowColorBlock:        ' + GetValStr(oGrid.RowColorBlock)        + crlf +

                          'DeleteLock:           ' + GetValStr(oGrid.DeleteLock)           + crlf +

                          'InsertLock:           ' + GetValStr(oGrid.InsertLock)           + crlf +

                          'ExecLoaded:           ' + GetValStr(oGrid.ExecLoaded)           + crlf +

                          'RegisterDataset:      ' + GetValStr(oGrid.RegisterDataset)      + crlf +

                          'UnRegisterDataset:    ' + GetValStr(oGrid.UnRegisterDataset)    + crlf +

                          'ExecRefreshSortMarks: ' + GetValStr(oGrid.ExecRefreshSortMarks) + crlf +

                          'SelectedField:        ' + GetValStr(oGrid.SelectedField)        + crlf +

                          'SelectedIndex:        ' + GetValStr(oGrid.SelectedIndex)        + crlf +

                          'AutoCalcSum:          ' + GetValStr(oGrid.AutoCalcSum)          + crlf +

                          'RecalcSum:            ' + GetValStr(oGrid.RecalcSum)            + crlf +

                          'ToggleBooleanOptions: ' + GetValStr(oGrid.ToggleBooleanOptions) + crlf +

                          'GridOrder:            ' + GetValStr(oGrid.GridOrder)            + crlf +

                          'CbChangeOrder:        ' + GetValStr(oGrid.CbChangeOrder)        + crlf +

                          'ID:                   ' + GetValStr(oGrid.ID)                   + crlf +

                          '',

   onerror,

      Meld(GetErrorText()),

   stopseq,

end,

//##############################################################################

//##############################################################################

// Oberflächen-Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// InitForm lädt das Formular in Abhängigkeit des Owners

// @Result: null

//******************************************************************************

function InitGui()

   oForm                          := CreateObject('TFormEx', 'GridTestForm'),

   oForm.Width                    := 800,

   oForm.Height                   := 600,

   oQuery                         := CreateObject('TBeAdsQuery', 'Query', oForm),

   oQuery.SQL                     := 'SELECT TOP 100 * FROM "DAB065.ADT"',

   oQuery.Active := True,

   oDS                            := CreateObject('TDataSourceEx', 'DataSource', oForm),

   oDS.DataSet                    := oQuery,

   oPanel                         := CreateObject('TPanel', 'PanelLeft', oForm, oForm),

   oPanel.Width                   := 400,

   oPanel.Align                   := alRight,

   oPanel.Caption                 := '',

   oPanel.BevelOuter              := bvNone,

   oInfoPanel                     := CreateObject('TBeInfoPanel', 'InfoPanel', oForm, oPanel),

   oInfoPanel.Align               := alTop,

   oInfoPanel.Caption             := 'Eigenschaften / Werte des Grids',

   oEditOutput                    := CreateObject('TBeEdit', 'EditOutput', oForm, oPanel),

   oEditOutput.Align              := alClient,

   oEditOutput.AlignWithMargins   := True,

   oEditOutput.Margins.Top        := 0,

   oEditOutput.Font.Name          := 'Lucida Console',

   oEditOutput.WantReturns        := True,

   oEditOutput.WordWrap           := True,

   oEditOutput.Text               := '',

   oButton                        := CreateOBject('TBeBitBtn', 'Button', oForm, oPanel),

   oButton.Align                  := alBottom,

   oButton.AlignWithMargins       := True,

   oButton.Margins.Top            := 0,

   oButton.Caption                := 'Auswerten',

   oButton.ImageIndex.IndexNormal := 148,

   AssignEvent(oButton, 'OnClick', 'QueryProperties'),

   oGrid                          := CreateObject('TBeAltGrid', 'GridMain', oForm, oForm),

   oGrid.Align                    := alClient,

   oGrid.CbChangeOrder            := True,       // Sortierung per Spalten-Klick aktivieren

   oGrid.DataSource               := oDS,

   oGrid.RegisterDataset          := oQuery,

   oGrid.ExecLoaded               := True,       // Damit im Kontextmenü Icons angezeigt werden

   oGrid.Id                       := '@BRO_TES',

   oGrid.ReadWriteProps           := 0,          // Browser-Definitionen laden

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   InitGui(),

   ShowModal(oForm),

onerror

   MessageDlg(GetErrorText()),

   DestroyObject(oForm),

stopseq,

oForm

Siehe auch:

CollAdd()


TbeAltGridStyleController

TbeAltGridStyleController

Die Klasse TbeAltGridStyleController ermöglicht es den Style-Guide auf jeden gespeicherten Browser anzuwenden.

Eigenschaften:

Eigenschaften |
CbBackupPath:C | Verzeichnis in welches eine Kopie jedes Browsers angelegt werden soll
CbErrors:O | Fehler-Liste mit Angabe der Browser-ID und dem Fehler, welche Browser nicht angepasst wurden
Funktionen / Methoden |
CbStyleAllBrowser() | Wendet auf alle Browser welche in der DabBRO gespeichert sind den Style-Guide an

Beispiel

//******************************************************************************

// Wendet auf alle gespeicherten Browser den Style-Guide an

//******************************************************************************

|oBrowserStyler, i|

oBrowserStyler := CreateObject('TbeAltGridStyleController'),

startseq

  oBrowserStyler.CbBackupPath := 'c:\temp\browser_backup',

  oBrowserStyler.CbStyleAllBrowsers(),

  for i := 1 to CollCount(oBrowserStyler.CbErrors) do

    writeln(CollItem(oBrowserStyler.CbErrors, i)),

  next,

always

  DestroyObject(oBrowserStyler),

stopseq,


TBeArchiveInfo

TBeArchiveInfo

Klasse zur Bereitstellung von Informationen zum aktuellen Beleg.

Eigenschaften:

ArchiveDocType Beleg Art

ArchiveDocNo Beleg Nummer

ArchiveNo Fortlaufende Nummer

ArchivePersNo Kunden-/Lieferanten Nummer

ArchiveDate Datum der Erstellung

ArchiveTime Uhrzeit der Erstellung

ArchiveUserNo Benutzer-Nummer des Erstellers

ArchiveDepartment Erstellt in Abteilung

Verwendung:

Die Komponente "Hintergrundformular" im Report-Designer stellt für die Berechnung im Codeblock "Variable Formularauswahl" ein Objekt names "ArchiveInfo" vom Typ "TBeArchiveInfo" bereit.


TBeasArrayServiceParamItem

TBeasArrayServiceParamItem

Diese Klasse stellt ein "Array"-Element für einen beas-Service-Parameter dar.

Diese Klasse kann weitere Unter-Element eines beliebigen Typen enthalten, wobei diese keinen Namen besitzen dürfen.

Desweiteren besitzt das "Array"-Element einen Namen aber keinen eigenen Wert.

siehe Klasse TBeasCustomServiceParamItem für Eigenschaften/Methoden

Beispiel

// siehe Beispiel von TBeasCustomCbServiceParam

Siehe auch:

TBeasCustomServiceParamItem

TBeasSimpleServiceParamItem

TBeasComplexServiceParamItem

TBeasCustomCbServiceParam


TBeasCbArrayParameterTypeInfo

TBeasCbArrayParameterTypeInfo

Die Klasse TBeasCbArrayParameterTypeInfo ermöglicht das Registrieren Array-Paramatertypen für die Verwendung im Codeblock.

Eigenschaften:

Eigenschaften |
CbTypeName:C | Name des zu registrierenden Parametertypen. - Es sind nur Namen mit dem Prefix "TCb_" erlaubt; - Name müssen dem regulären Ausdruck "^[_a-zA-Z\-]{1}[_a-zA-Z\d\-]*$" genügen.
CbTypeDescription:C | Beschreibung des zu registrierenden Parametertypen zu Dokumentationszwecken.
CbTypeVisibility:N | Sichtbarkeit des registrierenden Parametertypen in der generierten Schnittstellendokumentation des beas. Erlaubt sind als Werte die Konstanten: - beasUndocumented; - beasDocumented
CbElementTypeName:C | Name eines bereits registrierten Typs der Elemente des zu registrierenden Array-Parametertypen.

Beispiel

/******************************************************************************

// Registriert den Array-Parametertypen TCb_MyIntegerArray.

// Die Elemente des Arrays sind vom Typ Integer.

//******************************************************************************

| oParamRegTypeInfo |

oParamRegTypeInfo := CreateObject("TBeasCbArrayParameterTypeInfo"),

Startseq,

  oParamRegTypeInfo.CbTypeName        := "TCb_MyIntegerArray",

  oParamRegTypeInfo.CbTypeDescription := "My Array of Integer",

  oParamRegTypeInfo.CbTypeVisibility  := beasDocumented,

  oParamRegTypeInfo.CbElementTypeName := "Integer",

  CbRegisterParameterType(oParamRegTypeInfo),

Always,

   DestroyObject(oParamRegTypeInfo),

StopSeq,

Siehe auch:

TBeasCbCompositeParameterTypeInfo

CbRegisterParameterType()

CbUnregisterParameterType()

CbRegisterService()

CbUnregisterService()

TBeasCbServiceRegInfo


TBeasCbCompositeParameterTypeInfo

TBeasCbCompositeParameterTypeInfo

Die Klasse TBeasCbCompositeParameterTypeInfo ermöglicht das Registrieren Composite-Paramatertypen für die Verwendung im Codeblock.

Eigenschaften:

Eigenschaften

CbTypeName:C

Name des zu registrierenden Parametertypen.

- Es sind nur Namen mit dem Prefix "TCb_" erlaubt

- Namen müssen dem regulären Ausdruck "^[_a-zA-Z\-]{1}[_a-zA-Z\d\-]*$" genügen.

CbTypeDescription:C

Beschreibung des zu registrierenden Parametertypen zu Dokumentationszwecken.

CbTypeVisibility:N

Sichtbarkeit des registrierenden Parametertypen in der generierten Schnittstellendokumentation des beas.

Erlaubt sind als Werte die Konstanten:

- beasUndocumented

- beasDocumented

Funktionen / Methoden

CbAddFieldTypeDescription()

Fügt mit den übergebenen Parametern eine Felddefinition hinzu.

aFieldName:C | Name des Feldes.
aFieldDescription:C | Beschreibung des Feldes zu Dokumentationszwecken.
aFieldTypeName:C | Name eines bereits registrierten Typs des Feldes

Beispiel

/******************************************************************************

// Registriert den Composite-Parametertypen TCb_MyComposite.

//******************************************************************************

| oParamRegTypeInfo |

oParamRegTypeInfo := CreateObject("TBeasCbCompositeParameterTypeInfo"),

Startseq,

  oParamRegTypeInfo.CbTypeName        := "TCb_MyComposite",

  oParamRegTypeInfo.CbTypeDescription := "My Composite",

  oParamRegTypeInfo.CbTypeVisibility  := beasDocumented,

  oParamRegTypeInfo.CbAddFieldTypeDescription("FieldName0", "Field Description 0", "Integer"),

  oParamRegTypeInfo.CbAddFieldTypeDescription("FieldName1", "Field Description 1", "TCb_MyComposite"),

  oParamRegTypeInfo.CbAddFieldTypeDescription("FieldName2", "Field Description 2", "TCb_MyIntegerArray"),

  CbRegisterParameterType(oParamRegTypeInfo),

Always,

   DestroyObject(oParamRegTypeInfo),

StopSeq,

Siehe auch:

TBeasCbArrayParameterTypeInfo

CbRegisterParameterType()

CbUnregisterParameterType()

CbRegisterService()

CbUnregisterService()

TBeasCbServiceRegInfo


TBeasCbContextValidationResult

TBeasCbContextValidationResult

Klasse für das Ergebnis der Validierung des ExternalContext durch den Event "beas: Validierung eines Requests für einen Service mit ExternalContext"

Die Klasse liefert zusätzlich die Daten, die benötigt werden, um nach Ausführung des Validierungsevent die Basis-Informationen in die Context-Klasse zu füllen, damit in der weiteren Service-Bearbeitung die notwendigen Daten vorhanden sind, z.B: User

Eigenschaften:

Eigenschaften
CbIsValid:L | zentrales Kennzeichen, ob Validierung erfolgreich
CbUserNo:N | UserNo für die Service-Bearbeitung; Hinweis: wird CbUserNo <> -1 gesetzt, wird der User, der evtl. im HTTP-Request gesetzt wurde (= UserLoginName), nach der Validierung überschrieben
CbLocation:N | Standort
CbDepartment:N | Abteilung
CbLocale:C | Locale, d.h. Einstellungssatz für Gebietsschemaparameter; z.B: de-DE
CbTimeZone:C | Zeitzone; Format +-hh:mm oder Z
CbTimestampUTCStr:C | Zeitstempel in ISO8601-Format, d.h: yyyy-mm-ddThh-mm-ss.zzz+Zeitzone, z.B.: 2015-04-17T12:30:00.999+02:00
CbSessionParamOutput:O | Ausgabe-Parameter vom Typ TBeasCbDynamicServiceOutput zur Übergabe von beliebigen Parametern aus der Context-Validierung an das UserSession-Objekt des Service-Requests
CbContextParamOutput:O | Ausgabe-Parameter vom Typ TBeasCbDynamicServiceOutput zur Übergabe von beliebigen Parametern aus der Context-Validierung an das ExternalContext-Objekt des Service-Requests
CbErrorCode:N | Fehlernummer zur Ausgabe in der Exceptionmeldung
CbErrorMessage:C | Fehlermeldung zur Ausgabe in der Exceptionmeldung
CbContextLoggingInfo:C | optionales Feld für Zusatzinformationen zur Speicherung in der Protokollierung der Kontext-Validierung

Hinweis:

&#183 wird nur für den Event "beas: Validierung eines Requests für einen Service mit ExternalContext" verwendet.

&#183 nicht erzeugen, wird bei Aufruf des Event mit übergeben.

Beispiel

siehe "Event "beas: Validierung eines Requests für einen Service mit ExternalContext""

Siehe auch:

Event "beas: Validierung eines Requests für einen Service mit ExternalContext"

TBeasCbDynamicServiceOutput


TBeasCbDataSetConverter

TBeasCbDataSetConverter

Die Klasse TBeasCbDataSetConverter ermöglicht das Konvertieren eines be-DataSet in einen DataSet zur Übertragung an einen beMobile-Client.

Eigenschaften:

Eigenschaften

CbFields:A

Liste der Felder, die in die Ergebnismenge aufgenommen werden.

Ist die Liste leer, werden alle Felder in die Ergebnismenge aufgenommen.

CbKeyFields:A

Liste der Schlüsselfelder im Datenmodell des beMobile-Client.

CbFieldMapping:A

Assoziative Liste zur Abbildung von Feldnamen aus dem be-DataSet in das Datenmodell des beMobile-Client.

Feldnamen, die nicht in der Liste enthalten sind, werden unverändert übernommen.

CbDataSetsName:C

Liefert den Namen des DataSet-Array, der vom beMobile-Client erwartet wird.

Diese Eigenschaft hat den Charakter einer Konstanten.

CbDataSets:O

Array von DataSets in das der be-DataSet eingefügt werden soll.

Muss immer gesetzt sein.

CbBeDataSet:O

be-DataSet dessen Inhalt in das DataSets-Array eingefügt werden soll.

Muss nur gesetzt sein, wenn kein SQL-Statement verwendet wird.

CbDataSetDataSource:C

Name der DataSource auf dem beMobile-Client.

Muss immer angegeben werden und darf nicht leer sein.

CbDataSetName:C

Falls in einem DataSet-Array eine DataSource mehrfach verwendet wird, können diese durch einen Namen unterschieden werden.

Die Kombination DataSource/Name darf im DataSet-Array nur einmal vorkommen.

Optional, Default ist '' (leer).

CbDataSetSelectedIndex:N

Auf dem beMobile-Client selektierter Datensatz im DataSet.

Optional, Default ist -1 (kein Datensatz ausgewählt)

CbDataSetOffset:N

Ist im Falle von aufgeteilten Übertragungen eines großen Containers relevant.

Optional, Default ist 0.

CbDataSetVariables:O

Zusätzlich zu den Daten an den beMobile-Client zu übertragende Daten.

Optional, Default ist nil (keine zusätzlichen Daten).

CbDataSetDataMode:N

Modus für die Behandlung der Daten auf dem beMobile-Client.

Erlaubte Werte: eine der CB-Konstanten beasDataSetDataModeAppend, beasDataSetDataModeReplace

Optional, Default ist beasDataSetDataModeAppend.

CbDataRecordSaveToDatabase:L

Legt fest, ob der Datensatz auf dem beMobile-Client gespeichert wird.

Optional, Default ist True.

Funktionen / Methoden

CbConvert()

Konvertiert das durch die Eigenschaft 'CbBeDataSet' definierte be-DataSet in ein DataSet des Datenmodells des beMobile-Clients und fügt es dem durch die Eigenschaft 'CbDataSets' definierten Array hinzu.

CbConvertSQL()

Konvertiert das durch die das SQL-Statement definierte be-DataSet in ein DataSet des Datenmodells des beMobile-Clients und fügt es dem durch die Eigenschaft 'CbDataSets' definierten Array hinzu.

aSQL:C

SQL-Statement zur Erzeugung des zu konvertierenden DataSets

Beispiel

/******************************************************************************

// Konveriert den Inhalt eine TMemCalcTable

//******************************************************************************

| oUserSession:P1, oContext:P2, oInputParam:P3, oOutputParam:P4, , m_oDatasets,

  m_oMemTable, m_oDataSetConverter |

function AddModule(m_oMem, nID, cBez, cBildName)

   DbAppend(m_oMem),

   m_oMem:id          := nID,

   m_oMem:bezeichnung := cBez,

   m_oMem:bild_name   := cBildName,

   DbPost(m_oMem),

end,

m_oResult := oOutputParam.CbParams.AddArrayParam('datasets'),

m_oDatasets := m_oResult,

m_oMemTable := CreateObject('TMemCalcTable'),

startseq

   beas_AddMemField(m_oMemTable, 'id',          'FTINTEGER', 0,  0),

   beas_AddMemField(m_oMemTable, 'bezeichnung', 'FTString',  50, 0),

   beas_AddMemField(m_oMemTable, 'bild_name',   'FTString',  50, 0),

   m_oMemTable.Active := true,

   AddModule(m_oMemTable, waDab000, 'Kunden',      'kunde.png'),

   AddModule(m_oMemTable, waDab100, 'Lieferanten', 'lieferant.png'),

   AddModule(m_oMemTable, waDab005, 'Kontakte',    'kontakt.png'),

   m_oDataSetConverter                      := oOutputParam.CbCreateDataSetConverter(),

   m_oDataSetConverter.CbDataSetDataSource  := 'db:/bemobiledb/modul_liste',

   m_oDataSetConverter.CbDataSets           := m_oDatasets,

   m_oDataSetConverter.CbKeyFields          := {'id'},

   m_oDataSetConverter.CbFields             := {'id', 'bezeichnung', 'bild_name'},

   m_oDataSetConverter.CbBeDataSet          := m_oMemTable,

   m_oDataSetConverter.CbConvert(),

always

   DestroyObject(m_oMemTable),

stopseq,


TBeasCbDynamicServiceOutput

TBeasCbDynamicServiceOutput

Die Klasse TBeasCbDynamicServiceOutput kapselt die ServiceOutputParameter für Services vom Typ beasServiceTypeStandard, bzw. für den internen Gebrauch bei ExternalContext

Eigenschaften:

Eigenschaften

CbParams:O

Parameter-Objekt vom Typ TBeasCbServiceOutputParam mit Basisklasse TBeasCustomCbServiceParam

CbResultType:N

Ergebnistyp aus der Basisklasse;

- crtBeasInvalid

- crtBeasStream

- crtBeasParams

- crtBeasFile

Hinweis:

&#183 wird nur für TBeasHttpDynamicServiceOutput verwendet, d.h. für Services vom Typ beasServiceTypeHttp

&#183 für Services vom Typ beasServiceTypeStandard und beasServiceTypeHttp ist der CBResultType auf den Wert crtBeasParams zu setzen

&#183 für Services vom Typ beasServiceTypeStandard ausschließlich kann der CBResultType unversorgt bleiben

&#183 für Services vom Typ beasServiceTypeHttp ausschließlich kann der CBResultType

Funktionen

Diese Funktionen werden nur zur Erzeugung eines Weptun-spezifisches Formats verwendet

CbCreateDataSetConverter():O

erzeugt einen DataSetConverter (Typ TBeasCbDataSetConverter)

CbCreateComplexServiceParamItem(): O

erzeugt ein Parameter-Item vom Typ TBeasComplexServiceParamItem

CbCreateArrayServiceParamItem():O

erzeugt ein Parameter-Item vom Typ TBeasArrayServiceParamItem

CbCreateSimpleServiceParamItem():O

erzeugt ein Parameter-Item vom Typ TBeasSimpleServiceParamItem

Beispiel

//

// siehe auch TBeasCustomCbServiceParam

//

|oUserSession:P1, oContext:P2, oInputParam:P3, oOutputParam:P4, oInput, oOutput, nContactId, oDab005:DB:="38,2"|

oOutputParam.CbResultType := crtBeasParams,

nContactId := oInputParam.CbParams.ParamValue("ContactPerson.id"),

DbScope({nContactId}, {nContactId}, oDab005),

oOutput := oOutputParam.CbParams,

oOutput := oOutput.AddComplexParam("ContactPerson"),

oOutput.AddElement("id", nContactId),

oOutput.AddElement("gender", oDab005:ANREDESCHL),

oOutput.AddElement("title", Trim(oDab005:TITEL)),

oOutput.AddElement("name", D005_FullName(oDab005)),

oOutput.AddElement("last_Contact", oDab005:KONT_DAT),

Siehe auch:

TBeasSimpleServiceParamItem

TBeasComplexServiceParamItem

TBeasArrayServiceParamItem

TBeasCustomCbServiceParam

TBeasCbDataSetConverter

Event "beas: Validierung eines Requests für einen Service mit ExternalContext"


TBeasCbDynamicServiceInput

TBeasCbDynamicServiceInput

Die Klasse TBeasCbDynamicServiceInput kapselt die ServiceInputParameter für Services vom Typ beasServiceTypeStandard

Eigenschaften:

Eigenschaften
CbParams:O | Parameter-Objekt vom Typ TBeasCbServiceInputParam mit Basisklasse TBeasCustomCbServiceParam

Beispiel

//

// siehe auch TBeasCustomCbServiceParam

//

|oUserSession:P1, oContext:P2, oInputParam:P3, oOutputParam:P4, nContactId, nContactName|

oOutputParam.CbResultType := crtBeasParams,

nContactId   := oInputParam.CbParams.ParamValue("ContactPerson.id"),

nContactName := oInputParam.CbParams.ParamValueDef("ContactPerson.name", ""),

Siehe auch:

TBeasCustomCbServiceParam

Event "beas: Validierung eines Requests für einen Service mit ExternalContext"


TBeasCbProxy

TBeasCbProxy

Die Klasse TBeasCbProxy ermöglicht das Ausführen von Service-Methoden des beas von be aus.

Eigenschaften:

Eigenschaften |
CbMessageType:N | Typ der an den beas übermittelten Nachricht zur Ausführung der Service-Methode. Erlaubt sind als Werte die Konstanten: - beasHTTPGet; - beasJSON; - beasSOAP
CbServiceMethodName:C | Name der auszuführenden Service-Methode.
CbContext:O | Kontextobjekt vom Typ TBeasCbClientContext für die Ausführung der Service-Methode.
CbParamInput:O | Eingabeparameter vom Typ TBeasCbServiceInputParam für die Ausführung der Service-Methode.
CbParamOutput:O | Ausgabeparameter vom Typ TBeasCbServiceOutputParam für die Ausführung der Service-Methode.
Funktionen / Methoden |
CbInvokeDynamicServiceMethod() | Führt die Service-Methode auf dem beas aus. Tritt bei der Ausführung ein Fehler auf, dann wird eine Exception geworfen.

Beispiel

//******************************************************************************

// Führt die Service-Methode "std_ManagementServices_GetConfiguration" auf dem

// beas aus und liefert als Ergebnis einen JSON-String der Antwort des beas.

//******************************************************************************

|oBeasProxy, cResult:C := ""|

oBeasProxy := CreateObject("TBeasCbProxy"),

Startseq,

  oBeasProxy.CbMessageType := beasJSON,

  oBeasProxy.CbContext.CbUserLoginName := "USER1",

  oBeasProxy.CbContext.CbUserLoginPassword := "Password",

  oBeasProxy.CbServiceMethodName := "std_ManagementServices_GetConfiguration",

  oBeasProxy.CbParamInput.AddParam("Visibility", "all"),

  oBeasProxy.CbParamInput.AddParam("Hidden", "False"),

  oBeasProxy.CbInvokeDynamicServiceMethod(),

  cResult := oBeasProxy.CbParamOutput.CbToJSONString(),

Always,

  DestroyObject(oBeasProxy),

StopSeq,

cResult


TBeasCbServiceRegInfo

TBeasCbServiceRegInfo

Die Klasse TBeasCbServiceRegInfo ermöglicht das Registrieren von Service-Methoden für die Verwendung im beas.

Eigenschaften:

Eigenschaften

CbMethodName:C

Name der zu registrierenden Service-Methode.

- Es sind nur Namen mit dem Prefix "cb_" erlaubt

- Namen müssen dem regulären Ausdruck "^[_a-zA-Z\-]{1}[_a-zA-Z\d\-]*$" genügen.

CbMethodDescription:C

Beschreibung der zu registrierenden Service-Methode zu Dokumentationszwecken.

CbServiceTypes:N

Legt fest, wie die zu registrierende Service-Methode aufgerufen werden kann.

Erlaubt sind als Werte alle Kombinationen der Konstanten:

- beasServiceTypeStandard: Die Service-Methode wird als RPC-Aufruf behandelt.

- beasServiceTypeHttp: Die Service-Methode wird als HTTP-Request behandelt.

CbContextClass:N

Legt fest, welche Kontext-Klasse für den Aufruf verwendet werden muss.

Erlaubt sind als Werte die Konstanten:

- beasContext

- beasMobileContext

CbTypeVisibility:N

Sichtbarkeit des registrierenden Parametertypen in der generierten Schnittstellendokumentation des beas.

Erlaubt sind als Werte die Konstanten:

- beasUndocumented

- beasDocumented

CbProgramName:C

Name des Codeblockprogrammes, das beim Aufruf der Service-Methode ausgeführt werden soll.

Das Programm muss sich im Ordner "beas\" befinden.

CbExecutionTimeout:N

Timeout der Ausführung der Service-Methode in Millisekunden.

Der Wert '0' bedeutet kein Timeout.

Optional.

Defaultwert ist der Wert des Startparameters SERVICE_METHOD_EXEC_TIMEOUT

CbExecutionMode:N

Mode der Ausführung der Service-Methode

Erlaubt sind als Werte die Konstanten:

- beasSequential

- beasConcurrent

Optional.

Defaultwert ist beasSequential.

CbEnforceURIQueryParamValuesAsString:L

Erzwinge, dass die Werte der URI Query Parameter immer als Strings behandelt werden

Optional.

Defaultwert ist False

Funktionen / Methoden

CbAddParameterInfo()

Fügt mit den übergebenen Parametern eine Parameterdefinition hinzu.

aParameterName:C | Name des Parameters.
aParameterDescription:C | Beschreibung des Parameters zu Dokumentationszwecken.
aParameterTypeName:C | Name eines bereits registrierten Typs des Parameters
aParameterKind:N | Legt fest, von welcher Art der Parameter ist. Erlaubt sind als Werte die Konstanten: - beasIn; - beasResult
aParameterUsage:N | Legt fest, wie die Werte des Parameters verwendet werden sollen. Erlaubt sind als Werte die Konstanten: - beasRequired; - beasOptional

Beispiel

//******************************************************************************

// Registriert und deregistriert die Servive-Methode

// "cb_RegisteredDynamicCbService".

//******************************************************************************

|oServiceRegInfo|

oServiceRegInfo := CreateObject("TBeasCbServiceRegInfo"),

Startseq,

  oServiceRegInfo.CbMethodName        := "cb_RegisteredDynamicCbService",

  oServiceRegInfo.CbMethodDescription := "Methode cb_RegisteredDynamicCbService",

  oServiceRegInfo.CbServiceTypes      := _OR(beasServiceTypeStandard, beasServiceTypeHttp),

  oServiceRegInfo.CbContextClass      := beasContext,

  oServiceRegInfo.CbVisibility        := beasDocumented,

  oServiceRegInfo.CbExecutionTimeout  := 100,

  oServiceRegInfo.CbExecutionMode     := beasConcurrent,

  oServiceRegInfo.CbProgramName       := "beas\dynamic_services\TestServices\Database",

  oServiceRegInfo.CbAddParameterInfo("Param0", "Dies ist Parameter 0", "Integer", beasResult, beasRequired ),

  oServiceRegInfo.CbAddParameterInfo("Param1", "Dies ist Parameter 1", "TCb_MyIntegerArray", beasIn, beasRequired ),

  oServiceRegInfo.CbAddParameterInfo("Param2", "Dies ist Parameter 2", "TCb_CompositeField", beasIn, beasOptional ),

  CbRegisterService(oServiceRegInfo),

Always,

  DestroyObject(oServiceRegInfo),

StopSeq,

CbUnregisterService("RegisteredDynamicCbService"),

Siehe auch:

TBeasCbArrayParameterTypeInfo

TBeasCbCompositeParameterTypeInfo

CbRegisterParameterType()

CbUnregisterParameterType()

CbRegisterService()

CbUnregisterService()


TBeasComplexServiceParamItem

TBeasComplexServiceParamItem

Diese Klasse stellt ein "Complex"-Element für einen beas-Service-Parameter dar.

Diese Klasse kann weitere Unter-Element eines beliebigen Typen enthalten und besitzt einen Namen aber keinen eigenen Wert.

siehe Klasse TBeasCustomServiceParamItem für Eigenschaften/Methoden

Beispiel

// siehe Beispiel von TBeasCustomCbServiceParam

Siehe auch:

TBeasCustomServiceParamItem

TBeasSimpleServiceParamItem

TBeasArrayServiceParamItem

TBeasCustomCbServiceParam


TBeasCustomCbServiceParam

TBeasCustomCbServiceParam

Diese Klasse stellt die Basis-Klasse für den Zugriff auf beas-Service-Parameter im Codeblock dar.

Eigenschaften

Eigenschaften
ParamCount:N | Anzahl der enthaltenen Unter-Elemente
ParamType:N | Typ des Haupt-Elements; 0 - "Simple"; 1 - "Complex"; 2 - "Array"

Funktionen und Methoden

AssignTo

Element komplett auf ein anderes Element kopieren

Dest:O

TBeasCustomServiceParamItem-Objekt

Assign

Element komplett von einem anderen Element kopieren

Source:O

TBeasCustomServiceParamItem-Objekt

InitCbParam

Haupt-Element initialisieren, entspricht InitParamType("Complex")

InitParamType

Typ des Haupt-Elements setzen

aType:N

Typ siehe ParamType

Clear

Haupt-Element zurücksetzen und alle Unter-Elemente löschen

IsEmpty:L

True, falls keine Unter-Elemente vorhanden sind

ParamExists:L

prüfen ob ein Unter-Element mit diesem Namen existiert

aName:C

Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt

z.b. "Element1.Element1VonElement1"

IsSameParam:L

prüfen ob das Element identisch ist

aParam:O

TBeasCustomCbServiceParam-Objekt mit welchen der Vergleich erfolgen soll

IsReadOnly:L

ReadOnly-Modus aktiv

CanChangeParams:L

Prüfung ob Unter-Elemente verändert werden dürfen

CanAddParams:L

Prüfung ob Elemente hinzugefügt werden dürfen

CanDeleteParams:L

Prüfung ob Unter-Elemente gelöscht werden dürfen

AddParam:O

Element vom Typ "Simple" hinzufügen

aName:C | Name des Elements
aValue:U | Wert des Elements

AddComplexParam:O

Element vom Typ "Complex" hinzufügen

aName:C

Name des Elements

AddArrayParam:O

Element vom Typ "Array" hinzufügen

aName:C

Name des Elements

DeleteParam

Element löschen

Existiert dieser Name nicht wird eine Exception ausgelöst.

aName:C

Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt

z.b. "Element1.Element1VonElement1"

DeleteAllParams

Alle Unter-Elemente löschen

Param:O

Zugriff auf ein Unter-Element mit diesem Namen.

Existiert dieser Name nicht wird eine Exception ausgelöst.

aName:C

Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt

z.b. "Element1.Element1VonElement1"

ParamValue:U

Zugriff auf den Wert eines Unter-Elements.

Existiert dieser Name nicht wird eine Exception ausgelöst.

aName:C

Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt

z.b. "Element1.Element1VonElement1"

ParamValueDef:U

Zugriff auf den Wert eines Unter-Elements.

Existiert dieser Name nicht wird der Default-Wert zurück gegeben.

aName:C | Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt z.b. "Element1.Element1VonElement1"
aDefaultValue:U | Default-Wert, falls aName nicht existiert

ParamName:C

Name eines Unter-Elements über den Index ermitteln

aIndex:N

Index des Unter-Elements

CbCopyTo

Alle Einstellungen und Unter-Elemente kopieren

aServiceParam:O

TBeasCustomCbServiceParam-Objekt auf welches kopiert werden soll

CbToJSONString:C

Ausgabe als JSON-Formatierter Text

CbToJSONStringIndent:C

Ausgabe als JSON-Formatierter Text mit Einzügen

Beispiel

//******************************************************************************

//******************************************************************************

// Parameter aufbauen mit Kontakten und einem Context

// Mit diesem Parameter werden dann einige Add/Delete/usw. Funktionen ausgeführt

// und den Parameter ggf. zur Anzeige ausgegeben

//******************************************************************************

//******************************************************************************

|oParams, oContacts, oContext|

//******************************************************************************

// neuen Kontakt hinzufügen

//******************************************************************************

function AddContact(cName, nAge, cGender, aHobbies)

  |oContact, oHobbies, i|

  oContact := oContacts.AddComplexElement(''),

  oContact.AddElement('name', cName),

  oContact.AddElement('age', nAge),

  oContact.AddElement('gender', cGender),

  oHobbies := oContact.AddArrayElement('hobbies'),

  for i := 1 to ALen(aHobbies) do

     oHobbies.AddArrayValue(aHobbies[i]),

  next,

end,

//******************************************************************************

// spezielles Hobby aus allen Kontakten entfernen

//******************************************************************************

function DeleteContactHobby(cHobby)

  |oHobbies, i, j|

  for i := 0 to oContacts.ElementCount - 1 do

     oHobbies := oContacts.Element(Str(i) + '.' + 'hobbies'),

     for j := oHobbies.ElementCount - 1 downto 0 do

        if oHobbies.ElementValue(Str(j)) = cHobby then

           oHobbies.DeleteElement(Str(j)),

        endif,

     next,

  next,

end,

//******************************************************************************

oParams := CreateObject('TBeasCbServiceOutputParam'),

oParams.InitCbParam(),

oContacts := oParams.AddArrayParam('contacts'),

oContext  := oParams.AddComplexParam('context'),

// Context befüllen

oContext.AddElement('sender', 'codeblock'),

oContext.AddElement('time', Now()),

oContext.AddElement('showjson', True),  // hiermit wird die Ausgabe gesteuert

// Kontakte hinzufügen

AddContact('Karl',    27, 'm', {'Fußball', 'Handball'}),

AddContact('Osmana',  43, 'w', {'Essen', 'Lesen'}),

AddContact('Phillip', 19, 'm', {'Fußball', 'Basketball', 'Kino'}),

AddContact('Swenja',  33, 'w', {'Schwimmen', 'Tanzen'}),

AddContact('Patrik',  57, 'm', {'Formel1'}),

if oParams.ParamValueDef('context.showjson', False) then

   writeln('--- Parameter ---'),

   writeln(oParams.CbToJSONStringIndent()),

endif,

// alle Hobbies "Fußball" entfernen

DeleteContactHobby('Fußball'),

if oParams.ParamValueDef('context.showjson', False) then

   writeln('--- Hobbie Fußball entfernt ---'),

   writeln(oParams.CbToJSONStringIndent()),

endif,

// Kontext "sender" entfernen

oContext.DeleteElement('sender'),

if oParams.ParamValueDef('context.showjson', False) then

   writeln('--- Kontext sender entfernt ---'),

   writeln(oParams.CbToJSONStringIndent()),

endif,

// alle Kontakte entfernen

oContacts.DeleteAllElements(),

if oParams.ParamValueDef('context.showjson', False) then

   writeln('--- Kontakte entfernt ---'),

   writeln(oParams.CbToJSONStringIndent()),

endif,

// Kontakt-Parameter komplett zurücksetzen

oContacts.Clear(),  // hier wird auch der Name des Elements entfernt!

if oParams.ParamValueDef('context.showjson', False) then

   writeln('--- Kontakte entfernt ---'),

   writeln(oParams.CbToJSONStringIndent()),

endif,

Siehe auch:

TBeasCustomServiceParamItem

TBeasSimpleServiceParamItem

TBeasComplexServiceParamItem

TBeasArrayServiceParamItem


TBeasCustomServiceParamItem

TBeasCustomServiceParamItem

Diese Klasse stellt die Basis-Klasse der Elemente eines beas-Service-Parameters dar.

Eigenschaften

Eigenschaften
ElementsAvailable:L | Unter-Elemente können vorhanden sein
ElementCount:N | Anzahl der enthaltenen Unter-Elemente
Name:C | Name des Elements
Value:U | Wert des Elements, nur für Typ "Simple" verfügbar
DataType:N | Wert-Typ des Elements, nur für Typ "Simple" verfügbar

Funktionen und Methoden

AssignTo

Element komplett auf ein anderes Element kopieren

Dest:O

TBeasCustomServiceParamItem-Objekt

Assign

Element komplett von einem anderen Element kopieren

Source:O

TBeasCustomServiceParamItem-Objekt

Clear

Element zurücksetzen und alle Unter-Elemente löschen

IsEmpty:L

True, falls keine Unter-Elemente vorhanden sind

IsSimpleElement:L

True, falls es sich um einen "Simple" Typ handelt

IsComplexElement:L

True, falls es sich um einen "Complex" Typ handelt

IsArrayElement:L

True, falls es sich um einen "Array" Typ handelt

ElementExists:L

prüfen ob ein Unter-Element mit diesem Namen existiert

aName:C

Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt

z.b. "Element1.Element1VonElement1"

IsSameElement:L

prüfen ob das Element identisch ist

aItem:O

TBeasCustomServiceParamItem-Objekt mit welchen der Vergleich erfolgen soll

IsReadOnly:L

ReadOnly-Modus aktiv

CanChangeElements:L

Prüfung ob Elemente verändert werden dürfen

CanAddElements:L

Prüfung ob Elemente hinzugefügt werden dürfen

CanDeleteElements:L

Prüfung ob Elemente gelöscht werden dürfen

SetValue

Wert des Elements setzen, nur für Typ "Simple" verfügbar

aValue:U

Wert des Elements

AddElement:O

Element vom Typ "Simple" hinzufügen, nur für Typ "Complex" und "Array" verfügbar

aName:C | Name des Elements
aValue:U | Wert des Elements

AddComplexElement:O

Element vom Typ "Complex" hinzufügen, nur für Typ "Complex" und "Array" verfügbar

aName:C

Name des Elements

AddArrayElement:O

Element vom Typ "Array" hinzufügen, nur für Typ "Complex" und "Array" verfügbar

aName:C

Name des Elements

AddFromItem:O

Element aItem kopieren und hinzufügen

aName:C | Name des Elements
aValue:U | Wert des Elements

DeleteElement

Element löschen

Existiert dieser Name nicht wird eine Exception ausgelöst.

aName:C

Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt

z.b. "Element1.Element1VonElement1"

DeleteAllElements

alle Unter-Elemente löschen

Element:O

Zugriff auf ein Unter-Element mit diesem Namen.

Existiert dieser Name nicht wird eine Exception ausgelöst.

aName:C

Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt

z.b. "Element1.Element1VonElement1"

ElementValue:U

Zugriff auf den Wert eines Unter-Elements.

Existiert dieser Name nicht wird eine Exception ausgelöst.

aName:C

Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt

z.b. "Element1.Element1VonElement1"

ElementValueDef:U

Zugriff auf den Wert eines Unter-Elements.

Existiert dieser Name nicht wird der Default-Wert zurück gegeben.

aName:C | Name des Unter-Elements oder eine Kette aus Namen mit "." getrennt z.b. "Element1.Element1VonElement1"
aDefaultValue:U | Default-Wert, falls aName nicht existiert

ElementName:C

Name eines Unter-Elements über den Index ermitteln

aIndex:N

Index des Unter-Elements

Beispiel

// siehe Beispiel von TBeasCustomCbServiceParam

Siehe auch:

TBeasSimpleServiceParamItem

TBeasComplexServiceParamItem

TBeasArrayServiceParamItem

TBeasCustomCbServiceParam


TBeasSimpleServiceParamItem

TBeasSimpleServiceParamItem

Diese Klasse stellt ein "Simple"-Element für einen beas-Service-Parameter dar.

Diese Klasse kann keine Unter-Element enthalten und besitzt nur einen Namen und einen Wert.

Eigenschaften

Eigenschaften
Value:U | Wert des Elements
DataType:N | Wert-Typ des Elements

Funktionen und Methoden

SetValue

Wert des Elements setzen

aValue:U

Wert des Elements

Beispiel

// siehe Beispiel von TBeasCustomCbServiceParam

Siehe auch:

TBeasCustomServiceParamItem

TBeasComplexServiceParamItem

TBeasArrayServiceParamItem

TBeasCustomCbServiceParam


TBeAttribCheckCombo

TBeAttribCheckCombo

Erweiterte TBeCheckCombo Klasse für die Verwendung von Merkmalstabellen ohne Bindung an eine Datenbank.

Eigenschaften:

Allgemeine-Eigenschaften

BeAttributeID:N ID der zu verwendenden Merkmalstabelle

CheckedItems:Collection Indizes der aktuell ausgewählten Einträge

CheckedCount:N Anzahl der ausgewählten Einträge

ValuesChecked: Collection Wert (Value) der Einträge im ausgewähltem Zustand

ValuesUnChecked: Collection Wert (Value) der Einträge im abgewähltem Zustand

DisplayText:C Anzeige Text (Text der ausgewählten Einträge mit Trennzeichen)

ShowTextAsHint:L Anzeige Text als Hint anzeigen (ShowHint muss aktiv sein)

Separator:C Trennzeichen für Anzeigetext

ShowUserSelectionInContextMenu:L Per Kontext-Menu den aktuellen User an/abwählen (default=False)
Wird automatisch aktiv wenn eine der beiden be-User MM-Tabellen
(-11 & -13) eingestellt wird.

Aktive-Eigenschaften (Methoden)

CBCheckAllItems Alle vorhandenen Einträge auswählen

CBUnCheckAllItems Alle vorhandenen Einträge abwählen

Verwendung:

- TBeAttribCheckCombo auf eine F12-Maske platzieren und BeAttributeID zuweisen

- Im F12-Designer findet sich die Komponente unter der Palette "BE-Combo"

Beispiel

// Beispiel siehe TBeCheckCombo

Siehe auch:

TBeCheckCombo

TBeFieldAttribCheckCombo


TBeAttribCheckListBox

TBeAttribCheckListBox

Erweiterte TBeCheckListBox Klasse für die Verwendung von Merkmalstabellen ohne Bindung an eine Datenbank.

Eigenschaften:

Allgemeine-Eigenschaften

BeAttributeID:N ID der zu verwendenden Merkmalstabelle

CheckedItems:Collection Indizes der aktuell ausgewählten Einträge

ValuesChecked:Collection Wert (Value) der Einträge

Verwendung:

- TBeAttribCheckListBox auf eine F12-Maske platzieren und BeAttributeID zuweisen

- Im F12-Designer findet sich die Komponente unter der Palette "BE-Combo"

Beispiel

// Beispiel siehe TBeCheckListBox

Siehe auch:

TBeCheckListBox

TBeFieldCheckListBox


TBeAttribCombo

TBeAttribCombo

Erweiterte TBeCombo Klasse für die Verwendung von Merkmalstabellen ohne Bindung an eine Datenbank.

Eigenschaften:

Allgemeine-Eigenschaften

BeAttributeID:N ID der zu verwendenden Merkmalstabelle

Verwendung:

- TBeAttribCombo auf eine F12-Maske platzieren und BeAttributeID zuweisen

- Im F12-Designer findet sich die Komponente unter der Palette "BE-Combo"

Beispiel

// demonstriert den Einsatz der Klassen TBeAttribCombo, TBeFieldAttribCombo, TBeCombo

// HINWEIS:

// Die im Beispiel "manuell" erzeugten Klassen können natürlich auch

// im Designer erstellt werden und die entsprechenden Eigenschaften dort gesetzt werden.

| oForm, oBeAttribCombo, oBeFieldAttribCombo, oMemTable, oMemField,

  oDataSourceMem, oBeCombo, oDab010:DB:="waDAB010, DAB011", oDataSourceStd, oTextEdit |

function OnBeAttribComboChange( Sender )

  oTextEdit.Text := 'Ohne Tabelle: '

                    + oBeAttribCombo.Text + ' = ' + oBeAttribCombo.Value,

end,

function OnBeFieldAttribComboChange( Sender )

  oTextEdit.Text := 'MemTable: '

                    + oBeFieldAttribCombo.Text + ' = ' + oBeFieldAttribCombo.Value,

end,

function OnBeComboChange( Sender )

  oTextEdit.Text := 'Artikelstamm [' + AllTrim(oDab010:ARTNR) + '] '

                    + oBeCombo.Text + ' = ' + oBeCombo.Value,

end,

startseq

   //***************************************************************************

   // Beispiel-Formular erstellen

   //***************************************************************************

   oForm          := CreateObject('TFormEx'),

   oForm.OrigCapt := 'Merkmalstabellen im Codeblock',

   oForm.Position := POSCREENCENTER,

   oForm.Width    := 400,

   oForm.Height   := 180,

   //***************************************************************************

   // Beispiel eines nicht datengebundenen Combo-Controls

   //***************************************************************************

   oBeAttribCombo                 := CreateObject('TBeAttribCombo', 'BeAttribCombo1', oForm, oForm),

   oBeAttribCombo.Left            := 10,

   oBeAttribCombo.Top             := 10,

   oBeAttribCombo.Width           := 360,

   oBeAttribCombo.Height          := 21,

   oBeAttribCombo.UseColorAsImage := true,

   // Merkmalstabelle wählen (Standard "RABAC - Evaluierungstypen")

   oBeAttribCombo.BeAttributeID := 102079,

   // der Initialwert kann vorgegeben werden !

   oBeAttribCombo.Value   := '1',

   // Event zuweisen

   AssignEvent(oBeAttribCombo, 'OnChange', 'OnBeAttribComboChange'),

   //***************************************************************************

   // Beispiel eines datengebundenen Combo-Controls auf einer MemTable (jede beliebige Tabelle denkbar)

   //***************************************************************************

   // Memtable erstellen

   oMemTable          := CreateObject('TMemCalcTable', 'MemTable1', oForm),

   // Feld erstellen

   oMemField          := CollAdd( oMemTable.FieldsDefinition ),

   oMemField.Name     := 'PLATZ_VER',

   oMemField.DataType := 1, // Character

   oMemField.Size     := 1,

   oMemTable.Active   := True,

   // Datensatz anlegen mit 'Gebinde-Chargen'

   dbappend(oMemTable),

   oMemTable:PLATZ_VER := 'G',

   // DataSource erstellen

   oDataSourceMem         := CreateObject('TDataSourceEx', 'DataSourceExMem1', oForm),

   oDataSourceMem.DataSet := oMemTable,

   // Combo-Control für Datenbank-Zugriff erstellen

   oBeFieldAttribCombo               := CreateObject('TBeFieldAttribCombo', 'BeFieldAttribCombo1', oForm, oForm),

   oBeFieldAttribCombo.Left          := 10,

   oBeFieldAttribCombo.Top           := 40,

   oBeFieldAttribCombo.Width         := 360,

   oBeFieldAttribCombo.Height        := 21,

   oBeFieldAttribCombo.DataSource    := oDataSourceMem,

   oBeFieldAttribCombo.DataField     := 'PLATZ_VER',

   oBeFieldAttribCombo.BeAttributeID := 102023,

   // Event zuweisen

   AssignEvent(oBeFieldAttribCombo, 'OnChange', 'OnBeFieldAttribComboChange'),

   AssignEvent(oBeFieldAttribCombo, 'OnExit',   'OnBeFieldAttribComboChange'),

   //***************************************************************************

   // Beispiel eines datengebundenen "Standard" Combo-Controls

   //***************************************************************************

   // DataSource erstellen

   oDataSourceStd         := CreateObject('TDataSourceEx', 'DataSourceExStd1', oForm, oForm),

   oDataSourceStd.DataSet := oDab010,

   DbGoBottom(oDab010),

   // "Standard" Combo-Control erstellen

   oBeCombo            := CreateObject('TBeCombo', 'BeCombo1', oForm, oForm),

   oBeCombo.Left       := 10,

   oBeCombo.Top        := 70,

   oBeCombo.Width      := 360,

   oBeCombo.Height     := 21,

   // durch die Zuweisung eines DataSources und eines DataFields, holt sich das BeCombo die MM-Tabelle von selbst

   oBeCombo.DataSource := oDataSourceStd,

   oBeCombo.DataField  := 'PLATZ_VER',

   // Event zuweisen

   AssignEvent(oBeCombo, 'OnChange', 'OnBeComboChange'),

   //***************************************************************************

   // Ausgabe-Control - nur für den Test

   //***************************************************************************

   oTextEdit           := CreateObject('TBeEdit', 'Edit1', oForm, oForm),

   oTextEdit.Text      := '',

   oTextEdit.Left      := 10,

   oTextEdit.Top       := 100,

   oTextEdit.Width     := 360,

   oTextEdit.Height    := 21,

   oTextEdit.ReadOnly  := True,

   // Formular anzeigen

   ShowModal(oForm),

   // Formular zerstören

   DestroyObject(oForm),

onerror,

   writeln(GetErrorText()),

   DestroyObject(oForm),

stopseq,

Siehe auch:

TBeFieldAttribCombo

TBeFieldAttribCheckCombo

TbeCombo


TBeBDEBusinessController

TBeBDEBusinessController

Die Klasse TBeBDEBusinessController kapselt alle Funktionalitäten die zur Erfassung von Auftragsbuchungen im Bereich der BDE (PZE/MDE) benötigt werden.

Mit Hilfe dieses BusinessControllers, können Auftragsbuchungen erfasst, verändert, gelöscht werden.

Achtung: Für Anwesenheitsbuchungen muss weiterhin die Funktion BDEBuch() verwendet werden.

Eigenschaften:

Eigenschaften

CbDataModule:O

Datenmodul vom Typ TBeDBGet, welches vor der ersten Verwendung des Business-Controllers zugewiesen werden muss.

Funktionen

CbStartNewPostingParamsObject:O

Diese Funktion liefert ein Objekt vom Typ TBeBDEPostingParams_Start zurück, welches für den Aufruf der Methode CbStartNewPosting benötigt wird.

aTimeRecordingBO:TBeTimeRecordingBO

TBeTimeRecordingBO

CbFinishPostingParamsObject:O

Diese Funktion liefert ein Objekt vom Typ TBeBDEPostingParams_Finish zurück, welches für den Aufruf der Methode CbFinishPosting benötigt wird.

aTimeRecordingBO:TBeTimeRecordingBO

Positioniertes (!) TBeTimeRecordingBO, auf dessen Basis das Parameter-Objekt vorbefüllt wird.

CbChangePostingValueParamsObject:O

Diese Funktion liefert ein Objekt vom Typ TBeBDEPostingParams_ValueChange zurück, welches für den Aufruf der Methode CbChangePostingValue benötigt wird.

aTimeRecordingBO:TBeTimeRecordingBO

Positioniertes (!) TBeTimeRecordingBO, auf dessen Basis das Parameter-Objekt vorbefüllt wird.

Methoden

CbStartNewPosting

Diese Methode ermöglicht das Starten einer BDE-Buchung (PZE/MDE). Die Buchung bleibt offen bis die Methode CbPostPosting aufgerufen wurde.

aTimeRecordingBO:O | TBeTimeRecordingBO, das zur Erstellung der Buchung verwendet wird. Nach dem Aufruf bleibt dieses BO auf der neuen Buchung positioniert.
aBDEPostingParams_Start:O | Parameter-Objekt vom Typ TBeBDEPostingParams_Start, welches alle Informationen enthält, die zur Buchungs-Erfassung benötigt werden.

CbFinishPosting

Diese Methode ermöglicht das abschließen einer offenen BDE-Buchung (PZE/MDE). Die abgeschlossene Buchung bleibt im Bearbeitungsmodus, bis CbPostPosting aufgerufen wurd.

aTimeRecordingBO:O | TBeTimeRecordingBO, das auf die abzuschließende Buchung positioniert ist. Nach dem Aufruf bleibt dieses BO auf der abgeschlossenen Buchung positioniert.
aBDEPostingParams_Finish:O | Parameter-Objekt vom Typ TBeBDEPostingParams_Finish, welches alle Informationen enthält, die zum Abschließen der Buchung benötigt werden.

CbChangePostingValue

Diese Methode ermöglicht das bewerten einer abgeschlossenen BDE-Buchung (PZE/MDE). Für den Aufruf dieser Funktion ist es notwendig, dass sich die im übergebenen TBeTimeRecordingBO positionierte Buchung bereits im Bearbeitungs-Modus befinden muss. Nach dem Aufruf bleibt die veränderte Buchung im Bearbeitungs-Modus.

aTimeRecordingBO:O | TBeTimeRecordingBO, das auf die zu verändernde Buchung positioniert ist. Nach dem Aufruf bleibt dieses BO auf der veränderten Buchung positioniert.
aBDEPostingParams_ValueChange | Parameter-Objekt vom Typ TBeBDEPostingParams_ValueChange, welches alle Informationen enthält, die zur Veränderung der Buchungsbewertung benötigt werden.

CbEditPosting

Mit Hilfe dieser Methode kann eine Buchung die im übergebenen TBeTimeRecordingBO positioniert ist in den Bearbeitungs-Modus versetzt werden.

aTimeRecordingBO:O

Positioniertes TBeTimeRecordingBO

CbPostPosting

Mit Hilfe dieser Methode kann eine sich im Bearbeitungs-Modus befindliche Buchung gespeichert werden.

aTimeRecordingBO:O

Positioniertes TBeTimeRecordingBO

aPostingUseContext:N

Legt fest in welcher Buchungssituation (Live-Buchung, Buchungsveränderung, Nachbuchung) die Buchung gespeichert werden soll. Dies ist notwendig, um die entsprechenden Rechte für Buchungszeiträume usw. korrekt prüfen zu können.

pucLivePosting | Wird verwendet, wenn es sich um die Implementierung eines BDE-Terminals handelt, an dem Personen aktiv Buchungen auslösen können.
pucPostingChange | Wird verwendet, wenn es sich um die Veränderung einer bestehenden Buchung handelt.
pucSubsequentPosting | Wird verwendet, wenn es sich um das speichern einer eben erstellten Nachbuchung handelt.

aIgnoreBDERightsSettings:L

Dieser Parameter erlaubt es dem Cb-Programmierer die BDE-Spezifischen Rechte beim Speichern einer Buchung zu ignorieren.

CbDeletePosting

Mit Hilfe dieser Methode kann eine BDE-Buchung (PZE/MDE) gelöscht werden.

aTimeRecordingBO:O | Auf zu löschende Buchung positioniertes TBeTimeRecordingBO
aChangeReservedQuantities:L | Dieser Parameter bestimmt, ob die durch eine FA-Buchung erfassten Mengen im Produktionsauftrag wieder Reserviert werden sollen.
aIgnoreBDERightsSettings:L | Dieser Parameter erlaubt es dem Cb-Programmierer die BDE-Spezifischen Rechte beim Löschen einer Buchung zu ignorieren.

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Dieses Programm enthält Beispiele wie mit dem

//               TBeBDEBusinessController und dem TBeTimeRecordingBO neue

//               BDE-Buchungen (PZE/MDE) erstellt, verändert und gelöscht werden

//               können.

//##############################################################################

//##############################################################################

| m_cTestProdOrdPos, m_oDM, m_oBDEBC, m_oTimeRecordingBO, m_oDTH |

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_cTestProdOrdPos := '600614  001', // Existierenden Auftrag für den Test der

                                    // Buchungsfunktionen eintragen.

//******************************************************************************

// Beispiel wie eine BDE-Buchung auf einen Fertigungsauftrag gestartet werden

// kann.

//******************************************************************************

function StartNewPosting()

| oPostingParams_Start, dStartTimeStamp:DT |

   // Zum Starten einer neuen Buchung, muss ein PostingParamsObject vom BDEBC

   // geholt werden.

   oPostingParams_Start := m_oBDEBC.CbStartNewPostingParamsObject(m_oTimeRecordingBO),

   // Buchungsparameter können jetzt im erzeugten Parameter-Objekt gesetzt

   // werden. Nicht benötigte Parameter müssen nicht gesetzt werden, da diese

   // mit Defaultwerten vorbelegt sind.

   oPostingParams_Start.CbPostingUseContext       := pucSubsequentPosting, // Nachbuchung

   oPostingParams_Start.CbIgnoreBDERightsSettings := False,                // BDE-Rechte nicht ignorieren

   oPostingParams_Start.CbResourceType            := prtPerson,             // Personenbuchung

   oPostingParams_Start.CbPostingType             := ptProductionTime,     // Stückzeitpbuchung

   oPostingParams_Start.CbPostingCode             := 0,

   oPostingParams_Start.CbEmployeeNo              := 1,

//   oPostingParams_Start.CbResourceID

//   oPostingParams_Start.CbPostedByEmployeeNo

   oPostingParams_Start.CbProdOrderPosNo          := m_cTestProdOrdPos,

//   oPostingParams_Start.CbArticleNo  //Artikelnummer für Kundenaufträge buchen

//   oPostingParams_Start.CbCustomerOrderNo  // Auftragsnummer für Kundenaufträge buchen

//   oPostingParams_Start.CbActivityType //Tätigkeitstyp für Kundenaufträge buchen

   oPostingParams_Start.CbComment                 := 'Über TBeBDEBusinessController erstellte Stückzeitbuchung',

   // Der Startzeitpunkt muss über einen TBeCbDateTime-Wert mit passender

   // Prezision gesetzt werden.

   // • Personen können nur Minutengenau buchen (precMinutes)

   // • Maschinen können Millisekundengenau buchen (precMilSeconds)

   dStartTimeStamp                       := m_oDTH.InitDateTime(precMinutes),

   dStartTimeStamp.DateTime              := Now() - 1/24, // Jetzt vor einer Stunde

   oPostingParams_Start.CbStartTimeStamp := dStartTimeStamp,

   // Buchung erzeugen

   m_oBDEBC.CbStartNewPosting(m_oTimeRecordingBO, oPostingParams_Start),

end,

//******************************************************************************

// Beispiel wie eine offene BDE-Buchung abgeschlossen werden kann.

//******************************************************************************

function FinishPosting()

| oPostingParams_Finish, dEndTimeStamp:DT |

   // Zum abschließen einer neuen Buchung, muss ein PostingParamsObject vom BDEBC

   // geholt werden.

   oPostingParams_Finish := m_oBDEBC.CbFinishPostingParamsObject(m_oTimeRecordingBO),

   // Buchungsparameter können jetzt im erzeugten Parameter-Objekt gesetzt

   // werden. Nicht benötigte Parameter müssen nicht gesetzt werden, da diese

   // mit Defaultwerten vorbelegt sind.

   oPostingParams_Finish.CbPostingUseContext                := pucSubsequentPosting, // Nachbuchung

   oPostingParams_Finish.CbIgnoreBDERightsSettings          := False,

   oPostingParams_Finish.CbYieldQuantity                    := 1,    // Produzierte Menge

   oPostingParams_Finish.CbScrapQuantity                    := 0,    // Produzierter Ausschuss

   oPostingParams_Finish.CbScrapCode                        := 0,    // Code zur identifizierung weshalb der Ausschuss entstanden ist.

   oPostingParams_Finish.CbIntegratedTroubleDurationSeconds := 0,    // Buchung enthält keine Störzeit

   oPostingParams_Finish.CbIntegratedTroubleCode            := 0,    // Code zur identifizierung des Störungs-Grunds.

   oPostingParams_Finish.CbSubtractIntegratedTroubleTime    := sitmUseDefault, // Ob eine Störzeit in die Bewertung einfließt, soll durch die Einstellung des genutzten Codes bestimmt werden.

   // Erweiterung des vorherigen Buchungs-Kommentars

   oPostingParams_Finish.CbComment := oPostingParams_Finish.CbComment + crlf +

                                      'Durch TBeBDEBusinessController abgeschlossene Buchung',

   // Der Endzeitpukt muss über einen TBeCbDateTime-Wert mit passender

   // Prezision gesetzt werden.

   // • Personen können nur Minutengenau buchen (precMinutes)

   // • Maschinen können Millisekundengenau buchen (precMilSeconds)

   dEndTimeStamp                        := m_oDTH.InitDateTime(precMinutes),

   dEndTimeStamp.DateTime               := Now() - (1/24)/2, // Jetzt vor einer halben Stunde

   oPostingParams_Finish.CbEndTimeStamp := dEndTimeStamp,

   // Buchung abschließen

   m_oBDEBC.CbFinishPosting(m_oTimeRecordingBO, oPostingParams_Finish),

end,

//******************************************************************************

// Schließt die sich in Bearbeitung befindliche Buchung ab. Hierbei wird

// auch das Cb-Event ausgelöst.

//******************************************************************************

function PostPosting()

   m_oBDEBC.CbPostPosting(m_oTimeRecordingBO,   // Zu speichernde Buchung

                          pucSubsequentPosting, // Rechteprüfung für die Erstellung einer Nachbuchung

                          False),               // Rechteprüfung nicht ignorieren

end,

//******************************************************************************

// Beispiel wie eine Bewertungsänderung für eine Buchung durchgeführt werden

// kann.

//******************************************************************************

function PostingValueChange()

| oPostingParams_ValueChange |

   // Für die Bewertungsänderung muss die Buchung bereits im Bearbeitungsmodus

   // sein.

   if m_oTimeRecordingBO.CbInBrowseMode() then

      m_oBDEBC.CbEditPosting(m_oTimeRecordingBO),

   endif,

   // Zum Verändern einer Buchungsbewertung, muss ein PostingParamsObject vom

   // BDEBC geholt werden.

   oPostingParams_ValueChange := m_oBDEBC.CbChangePostingValueParamsObject(m_oTimeRecordingBO),

   // Buchungsparameter können jetzt im erzeugten Parameter-Objekt gesetzt

   // werden. Nicht benötigte Parameter müssen nicht gesetzt werden, da diese

   // mit den aktuell in der Buchung gesetzten Werten vorbelegt sind.

   oPostingParams_ValueChange.CbCostCorrectionAbsolute      := 1.5, // Buchungswert um 1.5 € verringern

   oPostingParams_ValueChange.CbCostCorrectionInPercent     := 0.9, // Nur 90 % der Buchung sollen in die Kosten einfließen

   oPostingParams_ValueChange.CbDurationCorrectionAbsolute  := 0,   // Keine Zeitkorrektur

   oPostingParams_ValueChange.CbDurationCorrectionInPercent := 0,   // Keine Zeitkorrektur

   // Erweiterung des vorherigen Buchungskommentars

   oPostingParams_ValueChange.CbComment := oPostingParams_ValueChange.CbComment + crlf +

                                           'Durch TBeBDEBusinessController veränderte Bewertung',

   // Verändern der Buchungsbewertung

   m_oBDEBC.CbChangePostingValue(m_oTimeRecordingBO, oPostingParams_ValueChange),

   // Speichern der veränderten Buchungsbewertung

   m_oBDEBC.CbPostPosting(m_oTimeRecordingBO,

                          pucPostingChange, // Berechtigungen zum Verändern einer Buchung prüfen

                          False),           // Rechteprüfung nicht ignorieren

end,

//******************************************************************************

// Beispiel wie eine Buchung gelöscht werden kann.

//******************************************************************************

function DeletePosting()

   m_oBDEBC.CbDeletePosting(m_oTimeRecordingBO,

                            True,   // Gebuchte Mengen wieder Reservieren

                            False), // Rechteprüfung nicht ignorieren

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   m_oDM := CreateObject('TBeDBGet'),

   startseq

      // CbDateTimeHelper erzeugen. Dieser wird für das erstellen von

      // BeDateTime-Werten benötigt.

      m_oDTH := CreateObject('TBeCbDateTimeHelper', 'DTH', m_oDM, m_oDM),

      // BusinessController und TimeRecordingBO erzeugen

      m_oBDEBC           := CreateObject('TBeBDEBusinessController', 'TIMEBC', m_oDM, m_oDM),

      m_oTimeRecordingBO := CreateObject('TBeTimeRecordingBO',       'TIMEBO', m_oDM, m_oDM),

      // Datenmodul zuweisen

      m_oBDEBC.CbDataModule           := m_oDM,

      m_oTimeRecordingBO.CbDataModule := m_oDM,

      // Für jede weitere Aktion ist eine Transaktion notwendig, daher wird diese

      // jetzt gestartet.

      DBStartTrans(m_oDM.ADSConnection),

      startseq

         // Eine Buchung starten

         StartNewPosting(),

         // Eine Buchung abschließen

         FinishPosting(),

         // Angelegte und abgeschlossene Buchung speichern

         PostPosting(),

         // Eine Buchung anders bewerten

         PostingValueChange(),

         // Eine Buchung löschen

         DeletePosting(),

         // Da es sich um ein Beispielprogramm handelt, wird kein Commit durchgeführt

//         DBCommit(m_oDM.ADSConnection),

      always

         if DBInTrans(m_oDM.ADSConnection) then

            DBRollback(m_oDM.ADSConnection),

         endif,

      stopseq,

   always

      DestroyObject(m_oDM),

   stopseq,

onerror

   MessageDlg(GetErrorText() + crlf + crlf + DebugArr(GetErrorStack(true)), mtError),

stopseq,

Siehe auch:

TBeEmployeeBO

TBeProductionPartListBO

TBeTimeRecordingBO

TBeProductionOrderBusinessController

TBeBDEPostingParams_Start

TBeBDEPostingParams_Finish


TBeBDECodesBO

TBeBDECodesBO

Die Klasse TBeBDECodesBO kapselt Zugriffe auf die BDE-Codes (DabBDC).

Eigenschaften:

Funktionen

CbGoToCode(aCode:N)

Positioniert das BO auf den übergebenen Code

aCode:N

Code / Schlüssel

Tabellen und Felder

CbID:N

Datensatz-ID

(DABBDC:ID) (nur lesender Zugriff)

CbCreatedBy:D

Erstellt am / um

(DABBDC:ERSTELLT)

CbCreated:C

Erstellt durch

(DABBDC:PLATZ)

CbChangedBy:D

Zuletzt geändert am / um

(DABBDC:GEAENDERT)

CbChanged:C

Zuletzt geändert durch

(DABBDC:GEAEND_USR)

CbCode:N

Code / Schlüssel -

Eindeutiger, frei vergebbarer Code / Schlüssel zur Identifikation des Buchungs-Codes / Störgrunds / Ausschussgrunds.

Nummern im Bereich der System-"BDE-Codes" können vom Benutzer nicht vergeben oder geändert werden.

Sofern ein Code verwendet wird, kann dieser nicht mehr geändert werden, um die Nachvollziehbarkeit von bestehenden Buchungen nicht zu gefährden.

(DABBDC:CODE)

CbDescription:C

Bezeichnung -

Bezeichnung des Codes zur Anzeige an den Verwendungsstellen (z.B. BDE-Buchungserfassung).

Die Bezeichnung sollte kurz und prägnant gewählt werden, damit diese im Buchungsprozess schnell erfasst werden kann.

(DABBDC:BEZ)

CbIsActive:L

Aktiv, freigeg. zur Nutzung -

Definiert, ob der Code zur Verwendung in Buchungsprozessen aktuell freigegeben ist.

Sofern ein Code nicht zur Nutzung freigegeben ist, ist dieser in den Buchungs-Erfassung-Oberflächen nicht verfügbar, in bestehenden Buchungen aber schon.

Hiermit kann ein Code "stillgelegt" werden, der aufgrund der bereits erfolgten Verwendung nicht mehr gelöscht werden kann.

(DABBDC:AKTIV)

CbComment:C

Kommentar -

Langtext zur detaillierten Beschreibung des Codes.

(DABBDC:MEMO)

CbAllowPostingCodeForPostingTypes:C

Nutzbar als Buchungs-Code -

Definiert, für welche Buchungstypen dieser Code als "Buchungscode" (Dab340:BUCH_CODE) genutzt werden kann.

Maßgeblich relevant für Buchungen der Typen "Service", "Störung" und "Stillstand" zur weiteren Qualifizierung des Buchungsvorgangs.

(DABBDC:BUCH_CODE)

CbAllowTroubleCodeForPostingTypes:C

Nutzbar als integr. Störcode -

Definiert, für welche Buchungstypen dieser Code für die Erfassung von "integrierten Störungen" (Dab340:STOER_CODE) genutzt werden kann.

(DABBDC:STOER_CODE)

CbSubtractTroubleTimePreset:L

Vorbeleg. "Störzeit abziehen" -

Sofern dieser Code als "integrierter Störcode" genutzt in einer Buchung erfasst wird, definiert das Feld DabBDC:STOER_ABZ die Vorbelegung von Dab340:STOER_ABZ.

Das Feld ist nur relevant für die Erfassung von integrierten Störungen

(DABBDC:STOER_ABZ)

CbAllowScrapCodeForPostingTypes:C

Nutzbar als Ausschuss-Code -

Definiert, für welche Buchungstypen dieser Code als Qualifizierung für eine Ausschuss-Meldung (Dab340:AUSS_CODE) genutzt werden kann.

(DABBDC:AUSS_CODE)

CbIsSystemCode:L

Gibt zurück, ob es sich bei dem positionierten Code um einen System-Code handelt -

(nur "lesender" Zugriff)

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Dieses Programm legt zur Demonstration des BDEBusinessObjects

//               einen BDE Code an, verändert diesen und entfernt ihn

//               anschließend wieder

//##############################################################################

//##############################################################################

| m_oDM |

//******************************************************************************

// Behandelt Fehler je nach Typen. Liefert zurück, ob der übergebene Fehler

// bereits behandelt wurde

//******************************************************************************

function HandleException(oError)

   Result := False, // Fehler noch nicht behandelt

   // Prüfen ob ein Code nicht gefunden werden konnte

   if ClassOf(oError, 'EBeCustomDBBoIDNotFoundException') or

      ClassOf(oError, 'EBeBDECodesBO') then

      Result := True, // Fehler wurde behandelt

      // Schöne Meldung ausgeben

      SetError(GetErrorText(oError) + crlf + crlf +

               ArrToStr(GetErrorStack(True))),

   endif,

end,

//******************************************************************************

// Erstellt einen neuen BDE Code

//******************************************************************************

function CreateNewBDECode(oDM, nCode, cDescription, bIsActive, cComment)

| oBDECBC, oBDECodesBO |

   oBDECBC := CreateObject('TBeBDECodesBusinessController', 'TESTBC', oDM),

   startseq

      oBDECBC.CbDataModule := oDM,

      oBDECodesBO         := CreateObject('TBeBDECodesBO', 'TESTBO', oDM),

      startseq

         oBDECodesBO.CbDataModule := oDM,

         // Anlegen eines neuen Codes ******************************************

         DBStartTrans(oDM.ADSConnection),

         startseq

            oBDECBC.BDECode_Insert(oBDECodesBO),

            oBDECodesBO.CbCode        := nCode,

            oBDECodesBO.CbDescription := cDescription,

            oBDECodesBO.CbIsActive    := bIsActive,

            oBDECodesBO.CbComment     := cComment,

            oBDECBC.BDECode_Post(oBDECodesBO),

            DBCommit(oDM.ADSConnection),

         always

            if DBInTrans(oDM.ADSConnection) then

               DBRollback(oDM.ADSConnection),

            endif,

         stopseq,

      always

         DestroyObject(oBDECodesBO),

      stopseq,

   always

      DestroyObject(oBDECBC),

   stopseq,

end,

//******************************************************************************

// Editiert einen BDE Code

//******************************************************************************

function EditBDECode(oDM, nCode, cDescription, bIsActive, cComment)

| oBDECBC, oBDECodesBO, oError |

   oBDECBC := CreateObject('TBeBDECodesBusinessController', 'TESTBC', oDM),

   startseq

      oBDECBC.CbDataModule := oDM,

      oBDECodesBO         := CreateObject('TBeBDECodesBO', 'TESTBO', oDM),

      startseq

         oBDECodesBO.CbDataModule := oDM,

         startseq

            oBDECodesBO.CbGoToCode(nCode), // Code positionieren -> Wirft einen Fehler wenn der Code nicht existiert

            // Verändern des Codes

            DBStartTrans(oDM.ADSConnection),

            startseq

               oBDECBC.BDECode_Edit(oBDECodesBO),

               oBDECodesBO.CbCode        := nCode,

               oBDECodesBO.CbDescription := cDescription,

               oBDECodesBO.CbIsActive    := bIsActive,

               oBDECodesBO.CbComment     := cComment,

               oBDECBC.BDECode_Post(oBDECodesBO),

               DBCommit(oDM.ADSConnection),

            always

               if DBInTrans(oDM.ADSConnection) then

                  DBRollback(oDM.ADSConnection),

               endif,

            stopseq,

         onerror

            if not HandleException(GetErrorObj()) then

               Raise(),

            endif,

         stopseq

      always

         DestroyObject(oBDECodesBO),

      stopseq,

   always

      DestroyObject(oBDECBC),

   stopseq,

end,

//******************************************************************************

// Löscht einen BDE Code

//******************************************************************************

function DeleteBDECode(oDM, nCode)

| oBDECBC, oBDECodesBO, oError |

   oBDECBC := CreateObject('TBeBDECodesBusinessController', 'TESTBC', oDM),

   startseq

      oBDECBC.CbDataModule := oDM,

      oBDECodesBO         := CreateObject('TBeBDECodesBO', 'TESTBO', oDM),

      startseq

         oBDECodesBO.CbDataModule := oDM,

         startseq

            oBDECodesBO.CbGoToCode(nCode), // Code positionieren -> Wirft einen Fehler wenn der Code nicht existiert

            // Verändern des Codes

            DBStartTrans(oDM.ADSConnection),

            startseq

               oBDECBC.BDECode_Delete(oBDECodesBO),

               DBCommit(oDM.ADSConnection),

            always

               if DBInTrans(oDM.ADSConnection) then

                  DBRollback(oDM.ADSConnection),

               endif,

            stopseq,

         onerror

            if not HandleException(GetErrorObj()) then

               SetError(GetErrorText() + crlf + crlf + ArrToStr(GetErrorStack(True))),

            endif,

         stopseq

      always

         DestroyObject(oBDECodesBO),

      stopseq,

   always

      DestroyObject(oBDECBC),

   stopseq,

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

m_oDM := CreateObject('TBeDBGet', 'TESTGET'),

startseq

   // Erstellten eines Test BDE Codes

   CreateNewBDECode(m_oDM,

                    1234,

                    'Test BDE Code',

                    False,

                    'Dieser BDE Code ist ein Test'),

   // Verändern des Test BDE Codes

   EditBDECode(m_oDM,

               1234,

               'Veränderter Test BDE Code',

               True,

               'Dieser BDE Code ist ein veränderter Test'),

   // Löschen des Test BDE Codes

   DeleteBDECode(m_oDM, 1234),

   // Versuch einen System-Code zu löschen

//   DeleteBDECode(m_oDM, -11),

   // Versuch einen nicht existierenden Code zu Löschen

//   DeleteBDECode(m_oDM, -9999),

always

   DestroyObject(m_oDM),

stopseq,

Siehe auch:

TBeTimeRecordingBO

TBeBDECodesBusinessController


TBeBDECodesBusinessController

TBeBDECodesBusinessController

Die Klasse TBeBDECodesBusinessController kapselt wichtige Funktionen zum Bearbeiten von BDE-Codes

Eigenschaften:

Funktionen

CbBDECode_Insert

Erstellt einen neuen BDE-Code und belässt das übergebene Business-Objekt im Bearbeitungs-Modus

aBDECodesBO:O

Verwendetes BDE-Codes-BO

CbBDECode_Edit

Versetzt den aktuellen BDE-Code in den Bearbeitungs-Modus

aBDECodesBO:O

Verwendetes BDE-Codes-BO

CbBDECode_Delete

Löscht den aktuellen BDE-Code

aBDECodesBO:O

Verwendetes BDE-Codes-BO

CbBDECode_Post

Speichert alle Änderungen des aktuell in Bearbeitung befindlichen BDE-Code ab.

aBDECodesBO:O

Verwendetes BDE-Codes-BO

CbBDECode_Cancel

Bricht die Bearbeitung des übergebenen BDE-Codes ab.

aBDECodesBO:O

Verwendetes BDE-Codes-BO

Beispiel

// siehe allgemeine Verwendung von BusinessControllern i.V.m BusinessObjekten

Siehe auch:

TBeTimeRecordingBO

TBeBDECodesBO


TBeBDEPostingParams_Start

TBeBDEPostingParams_Start

Die Klasse TBeBDEPostingParams_Start kapselt alle Eigenschaften, die zur Erstellung einer BDE-Buchung (PZE/MDE)

über TBeBDEBusinessController.CbStartNewPosting() benötigt werden.

Eigenschaften:

Eigenschaften

CbPostingUseContext:N

Mit dieser Eigenschaft, wird festgelegt, in welcher Buchungsituation die Buchung angelegt werden soll. Dieser Wert ist notwendig, um die für die Buchende Person eingestellten Berechtigungen entsprechend der Art der Buchung prüfen zu können.

pucLivePosting | Wenn es sich um die Implementierung eines BDE-Terminals handelt, an dem Personen aktiv Buchungen auslösen können.
pucSubsequentPosting | Wird verwendet, wenn es sich um die Erstellung einer Nachbuchung handelt.
pucPostingChange | Wird verwendet, wenn es sich um eine Buchungs-Änderung handelt.

CbIgnoreBDERightsSettings:N

Mit dieser Eigenschaft ist des dem Cb-Programmierer möglich die BDE-Spezifischen Berechtigungseinstellungen (z.B: Anzahl erlaubter Tage für Nachbuchungen) für die Anlage der Buchung zu deaktivieren. (Default = False)

CbResourceType:N

Legt fest für welchen Ressourcentyp die Buchung erstellt werden soll.

prtPerson | Erzeugen einer PZE-Buchung
prtResource | Erzeugen einer MDE-Buchung

CbPostingType:N

Legt fest welche Art von Buchung erstellt werden soll.

ptPresenceTime | Anwesenheitsbuchung
ptSetupTime | Rüstzeit
ptProductionTime | Stückzeit
ptServiceTime | Servicezeit
ptTroubleTime | Störbuchung
ptIdleTime | Stillstand
ptCustomerTime | Kundenauftragszeit
ptProjectTime | Projektzeit

CbPostingCode:N

Legt fest welcher Code zur Erstellung der Buchung verwendet werden soll. Dieses Merkmal erlaubt eine genauere Unterscheidung verschiedener Buchungstypen. Hier können eigene Codes angegeben werden. Vom System Standard vergebene Codes sind folgende:

-11 | Feiertag
-10 | Zeitausgleich
-9 | Dienstreise
-8 | Betriebsunfall
-7 | Sonderurlaub
-6 | Kurzarbeit
-5 | Berufsschule
-4 | Fortbildung
-3 | Urlaub
-2 | Krank
-1 | Anwesenheit

Die Codes -11 bis -2 können nicht für die Verbuchung verwendet werden. Stattdessen muss ein eigener Code über Festwerte->BDE Codes erstellt werden.

Derzeit können noch keine Anwesenheiten über den BDEBC erfasst werden, weshalb auch die Nutzung des Codes -1 nicht funktioniert.

CbEmployeeNo:N

Bei CbPostingType = prtPerson ist hier die Personalnummer der Person, für die eine Buchung erstellt werden soll, anzugeben.

CbResourceID:N

Bei CbPostingType = prtResource ist hier die Ressourcen-ID der Ressource anzugeben, für die eine Buchung erstellt werden soll.

CbPostedByEmployeeNo:N

Bei MDE-Buchungen die durch eine Person erstellt werden (z.B. nachholen einer fehlenden Buchung) muss hier die Personalnummer der Person die die Buchung erstellt angegeben werden. (Derzeit nicht implementiert)

CbArticleNo:N

Hier kann die zu Buchende Artikelnummer angegeben werden.

Bei Kundenauftragsbuchungen muss hier der Tätigkeits-Artikel angegeben werden, welcher dem Kundenauftrag zugewiesen wurde.

CbActivityType:N

Bei Kundenauftragsbuchungen muss hier ein Tätigkeits-Typ angegeben werden. Mögliche Werte sind:

actBaseEffort | Grundleistung
actExtraEffort | Stundenabrechnung

CbProdOrderPosNo:C

Beim Anlegen einer Fertigungsauftrags-Buchung, muss hier eine gültige Produktionsauftrags-Positionsnummer angegeben werden.

Achtung: Wurde eine CbArticleNo angegeben, muss diese zum Artikel der FA-Position passen. Ansonsten wird ein Fehler ausgelöst.

Diese Eigenschaft darf nicht gleichzeitig mit CbCustomerOrderNo gesetzt werden.

CbCustomerOrderNo:C

Beim Anlegen einer Kundenauftrags-Buchung muss hier eine gültige Auftragsnummer angegeben werden, für die eine BDE-Tätigkeit zugewiesen wurde.

Achtung:

Dieser Wert entspricht nicht dem Feld Dab340:APNUMMER also auch nicht der Eigenschaft CbOrderPosNo des TBeTimeRecordingBO, sondern wird immer in das Feld Dab340:B_POS_LFD übertragen.

Diese Eigenschaft darf nicht gleichzeitig mit CbProdOrderPosNo gesetzt werden.

CbPostingUseContext:N

Beim Anlegen einer Kudenauftrags-Buchung, muss hier eine gültige Auftragsnummer angegeben werden.

(Derzeit nicht implementiert)

CbStartTimeStamp:DT

Mit dieser Eigenschaft, wird der Startzeitpunkt der Buchung angegeben.

Achtung: Es handelt sich hier um einen TBeDateTime-Wert welcher über den TBeCbDateTimeHelper initialisiert werden muss. Siehe Beispiel vom TBeBDEBusinessController

CbComment:C

Buchungskommentar

Beispiel

// Siehe TBeBDEBusinessController

Siehe auch:

TBeTimeRecordingBO

TBeBDEBusinessController

TBeBDEPostingParams_Finish

TBeBDEPostingParams_ValueChange


TBeBDEPostingParams_Finish

TBeBDEPostingParams_Finish

Die Klasse TBeBDEPostingParams_Finish kapselt alle Eigenschaften, die zum Abschließen einer offenen BDE-Buchung (PZE/MDE)

über TBeBDEBusinessController.CbFinishPosting() benötigt werden.

Eigenschaften:

Eigenschaften

CbPostingUseContext:N

Mit dieser Eigenschaft, wird festgelegt, in welcher Buchungsituation die Buchung angelegt werden soll. Dieser Wert ist notwendig, um die für die Buchende Person eingestellten Berechtigungen entsprechend der Art der Buchung prüfen zu können.

pucLivePosting | Wenn es sich um die Implementierung eines BDE-Terminals handelt, an dem Personen aktiv Buchungen auslösen können.
pucPostingChange | Wenn es sich um die Veränderung einer bereits existenten Buchung handelt.
pucSubsequentPosting | Wird verwendet, wenn es sich um die Erstellung einer Nachbuchung handelt.

CbIgnoreBDERightsSettings:N

Mit dieser Eigenschaft ist des dem Cb-Programmierer möglich die BDE-Spezifischen Berechtigungseinstellungen (z.B: Anzahl erlaubter Tage für Nachbuchungen) für die Anlage der Buchung zu deaktivieren. (Default = False)

CbYieldQuantity:N

Angabe der produzierten Gutmenge für eine abzuschließende Arbeitswertbuchung.

CbScrapQuantity:N

Angabe des produzierten Ausschuss für eine abzuschließende Arbeitswertbuchung.

CbScrapCode:N

Angabe eines Ausschuss-Codes um den Grund für die Ausschussmenge zu spezifizieren.

Entsprechende Codes müssen über Festwerte->BDE Codes erstellt werden.

CbIntegratedTroubleDurationSeconds:N

Hier kann die Dauer einer in der Buchung integrierten Störung in Sekunden angegeben werden.

Die Angabe dieses Werts erfordert zusätzlich die Angabe eines CbIntegratedTroubleCode der für integrierte Störungen zugelassen ist.

CbIntegratedTroubleCode

Angabe eines Störcodes um den Grund für die integrierte Störung zu spezifizieren.

Entsprechende Codes müssen über Festwerte->BDE Codes erstellt werden.

CbSubtractIntegratedTroubleTime:N

Mit dieser Eigenschaft kann festgelegt werden, wie eine angegebene Störzeit (CbIntegratedTroubleDurationSeconds) bei der Buchungsbewertung berücksichtigt werden soll.

sitmUseDefault | Wird dieser Wert verwendet, der im BDE-Code unter; Vorbeleg. "Störzeit abziehen" gesetzt ist.
sitmSubtract | Zieht die Stördauer bei der Bewertung von der Erfassten Zeit ab.
sitmDontSubtract | Zieht die Stördauer bei der Bewertung nicht von der Erfassten Zeit ab.

CbEndTimeStamp:DT

Mit dieser Eigenschaft, wird der Endzeitpunkt der Buchung angegeben.

Achtung: Es handelt sich hier um einen TBeDateTime-Wert welcher über den TBeCbDateTimeHelper initialisiert werden muss. Siehe Beispiel vom TBeBDEBusinessController

CbComment:C

Buchungskommentar. Wird mit dem in der Buchung vergebenen Buchungskommentar vorbelegt.

Beispiel

// Siehe TBeBDEBusinessController

Siehe auch:

TBeTimeRecordingBO

TBeBDEBusinessController

TBeBDEPostingParams_Start

TBeBDEPostingParams_ValueChange


TBeBDEPostingParams_ValueChange

TBeBDEPostingParams_ValueChange

Die Klasse TBeBDEPostingParams_ValueChange kapselt alle Eigenschaften, die zur Veränderung einer Bewertungsänderung einer BDE-Buchung (PZE/MDE)

über TBeBDEBusinessController.CbChangePostingValue benötigt werden.

Eigenschaften:

Eigenschaften

CbCostCorrectionAbsolute:N

Die Eigenschaft bietet die Möglichkeit, die "erfasste Zeit" mittels einer absoluten Angabe zu verändern. Der Wert kann negativ, 0 oder positiv sein.

Ein Wert von 0 ändert nichts an der erfassten Zeit (Keine Bewertung)

CbCostCorrectionInPercent:N

Die Eigenschaft bietet die Möglichkeit, die "erfasste Zeit" mittels einer prozentualen Angabe zu verändern (bewerten)

Interpretation des Werts:

0 | Abwertung auf 0, Buchung soll 0 Sekunden anrechnen
0,5 | Abwertung auf 50% der Zeit
1 | 100% = keine Veränderung
2 | Höher-Bewertung auf die doppelte Zeit.

Ein Wert von 1 ändert nichts an der erfassten Zeit (Keine Bewertung)

CbDurationCorrectionAbsolute:N

Die Eigenschaft bietet die Möglichkeit, die vom Standard berechneten Kosten (Einstandswert) der Buchung mittels einer absoluten Angabe zu verändern (bewerten).

Der Wert kann negativ, 0 oder positiv sein.

Die Angabe erfolgt in Eigen-/Standard-Währung.

Mittels einer Angabe von 0 wird keine Veränderung (Bewertung) vorgenommen.

CbDurationCorrectionInPercent:N

Die Eigenschaft bietet die Möglichkeit, die vom Standard berechneten Kosten (Einstandswert) der Buchung mittels einer prozentualen Angabe zu verändern (bewerten).

Interpretation des Werts:

-0,5 | Abwertung auf -50%, aus 10 Euro werden somit -5 Euro
0 | Abwertung auf 0, Buchung soll mit 0 Euro bewertet werden.
0,5 | Abwertung auf 50% der Kosten
1 | 100% = keine Veränderung
2 | Höher-Bewertung auf die doppelten Kosten

CbComment:C

Buchungskommentar. Wird mit dem in der Buchung vergebenen Buchungskommentar vorbelegt.

Beispiel

// Siehe TBeBDEBusinessController

Siehe auch:

TBeTimeRecordingBO

TBeBDEBusinessController

TBeBDEPostingParams_Start

TBeBDEPostingParams_Finish


TBeBillData

TBeBillData

Klasse zum Druck einer Rechnung für einen Kundenauftrag.

Eigenschaften:

In dieser Klasse werden keine neuen Eigenschaften eingeführt. Relevante Eigenschaften befinden sich in den Vorfahr-Klasen. Siehe Hierarchie.

Hierarchie:

TBePrintData -> TBeOfferData -> TBeDelivData -> TBeBillData

Beispiel

function PrintRechnung( nAuftragsNummer )

 | oPrint |

  oPrint := CreateObject("TBeBillData"),

  startseq

     oPrint.QuietMode    := false,

     oPrint.PrintDocNo   := nAuftragsNummer, // Auftragsnummer, für die eine Rechnung gedruckt werden soll

     oPrint.ExecPrint,                       // Einzeldruck anstoßen

   always

      DestroyObject(oPrint),

   stopseq,

end,

PrintRechnung( 123456 )

Siehe auch:

TBeRemovalData, TBeCumRemovalData

TBePrintData

TBeCumBillData

TBeConfData

TBeCommissData


TBeBoInfoCaption

TBeBoInfoCaption

Die Klasse TBeBoInfoCaption stellt alle Caption Eigenschaften einen Business-Objekts zur Verfügung.

Die Werte dieses Objekts können durch den Event "Berechnung der Info-Caption" beeinflusst werden.

Eigenschaften:

keine

Unterobjekte

Caption (TBeBoCaption)

Eigenschaften |
Caption.Caption:C | Caption-Eigenschaft des Business-Objekts

Link (TBeBoLinkCaption)

Eigenschaften

Link.Prefix:C

Präfix für die Zuordnungs-Caption des Business-Objekts

Link.Caption:C

Caption für Zuordnungs-Caption des Business-Objekts

Link.Suffix:C

Suffix für Zuordnungs-Caption des Business-Objekts

Funktionen / Methoden

Link.CBCalcCaption():C

Zuordnungs-Beschriftung eines Business-Objects
aAddPrefix:L | Präfix voranstellen (z.B. Kunde:; Benutzer: ...)
aAddCaption:L | Caption zwischen Präfix und Suffix einfügen
aAddSuffix:L | Suffix am Ende hinzufügen (z.B. Kundennummer)

Beispiel

// siehe Event "Berechnung der Info-Caption"

Siehe auch:

Business Object Event "Berechnung der Info-Caption"


TBeBoInternalNoteInfo

TBeBoInternalNoteInfo

Im Business Object Event "vor dem Setzen der internen Notiz" steht die Klasse TBeBoInternalNoteInfo als ein Informations- und Transport-Objekt zur Verfügung.

Über das Info-Objekt kann die interne Notiz vorbelegt werden.

Eigenschaften |
CustomInternalNote:C | Eigene Vorgabe für die interne Notiz
UseDefaultInternalNote:C | (Default = True) Wenn CustomInternalNote leer ist wird eine Standard-Notiz verwendet. Dies kann mit UseDefaultInternalNote := False deaktiviert werden

Beispiel

// siehe Event "vor dem Setzen der internen Notiz"

Siehe auch:

Business Object Event "vor dem Setzen der internen Notiz"


TBeBoProjectDuplicateInfo

TBeBoProjectDuplicateInfo

Die Klasse TBeBoProjectDuplicateInfo beinhaltet alle Zusatz-Informationen eines Projekt-Business-Objekts, wenn dieses Kopiert wird.

Die Werte dieses Objekts können im Event "bei Kopie" genutzt werden.

Eigenschaften:

Eigenschaften

CbSourceProjectBO:O

Quell Projekt das kopiert wird

Beispiel

// siehe Business Object Event "bei Kopie"

Siehe auch:

TBeProjectBO

TBeProjectBusinessController

Business Object Event "bei Kopie"


TBeBoProjectTaskDuplicateInfo

TBeBoProjectTaskDuplicateInfo

Die Klasse TBeBoProjectTaskDuplicateInfo beinhaltet alle Zusatz-Informationen eines Projekt-Vorgang Business-Objekts, wenn dieses Kopiert wird.

Die Werte dieses Objekts können im Event "bei Kopie" genutzt werden.

Eigenschaften:

Eigenschaften
CbSourceProjectBO:O | Quell Projekt das kopiert wird
CbProjectBO:O | Ziel Projekt
CbSourceProjectTaskBO:O | Quell Projekt-Vorgang

Beispiel

// siehe Business Object Event "bei Kopie"

Siehe auch:

TBeProjectTaskBO

TBeProjectBusinessController

Business Object Event "bei Kopie"


TBeBoProjectTaskEffortDuplicateInfo

TBeBoProjectTaskEffortDuplicateInfo

Die Klasse TBeBoProjectTaskEffortDuplicateInfo beinhaltet alle Zusatz-Informationen eines Projekt-Vorgangs-Leistung Business-Objekts, wenn dieses Kopiert wird.

Die Werte dieses Objekts können im Event "bei Kopie" genutzt werden.

Eigenschaften:

Eigenschaften
CbSourceProjectBO:O | Quell Projekt das kopiert wird
CbProjectBO:O | Ziel Projekt
CbSourceProjectTaskBO:O | Quell Projekt-Vorgang
CbProjectTaskBO:O | Ziel Projekt-Vorgang
CbSourceProjectTaskEffortBO:O | Quell Projekt-Vorgangs-Leistung

Beispiel

// siehe Business Object Event "bei Kopie"

Siehe auch:

TBeProjectTaskEffortBO

TBeProjectBusinessController

Business Object Event "bei Kopie"


TBeBORelationShip

TBeBORelationShip

Die Klasse TBeBORelationShip stellt Informationen zu einer Verknüpfung zur Verfügung.

Eigenschaften:

Tabellen und Felder
CbID:N | ID der Verknüpfung (entspricht DABVKN:ID)
CbCreatedBy:C | Erstellt durch (entspricht DABVKN:PLATZ)
CbCreated:N | Zuletzt geändert Datum & Zeit (entspricht DABVKN:ERSTELLT)
CbChangedBy:C | Zuletzt geändert durch (entspricht DABVKN:GEAEND_USR)
CbChanged:N | Zuletzt geändert Datum & Zeit (entspricht DABVKN:GEAENDERT)
CbSourceWorkArea:N | WorkArea der Ausgangs-Tabelle (entspricht DABVKN:QUELL_WA)
CbSourceID:N | ID der Ausgangs-Tabelle (entspricht DABVKN:QUELL_ID)
CbSourceLocation:N | Standort der Ausgangs-Tabelle (entspricht DABVKN:QUELL_STO)
CbKind:N | Art der Verknüfung (entspricht DABVKN:ART)
CbRelationType:N | Typ der Verknüfung (entspricht DABVKN:TYP)
CbDestWorkArea:N | WorkArea der Ziel-Tabelle (entspricht DABVKN:ZIEL_WA)
CbDestID:N | ID der Ziel-Tabelle (entspricht DABVKN:ZIEL_ID)
CbDestLocation:N | Standort der Ziel-Tabelle (entspricht DABVKN:ZIEL_STO)

Beispiel

// siehe TBeCbBORelationShips

Siehe auch:

TBeCbBORelationShips

TBeCbBORelationShipList


TBeCbAdsLockTracer

TBeCbAdsLockTracer

Diese Klasse kann verwendet werden um für alle offenen Tabellen die vorhanden Record-Sperren zu ermitteln.

Eigenschaften

Eigenschaften
CbResultTable:O | MemTable in welche das Ergebnis gespeichert wird
CbIgnoreTables:O | Liste mit Tabellen-Namen welche ignoriert werden
CbCheckOnlyTables:O | Liste mit Tabellen-Namen welche nur berücksichtigt werden
CbCheckOnlyCurrentBeTables:L | es werden nur Tabellen berücksichtigt, welche zum aktullen be-Datenbestand gehören; (Default = True)
CbServerPath:C | Pfad zu einem ADS-Server; (Default = der gleiche wie be)
CbConnection:O | nur relevant bei TraceMode <> ltmAPI; AdsConnection über welche die Anfragen gesendet werden; (Default = eigene Connection)
CbTraceMode:N | Modus der Ermittlung ltmSQL (0) = es werden die SQL-Befehle von ADS benutzt ltmAPI (1) = es werden die API-Befehle von ADS benutzt ltmSQLOnlyForTables (2) = es wird nur der SQL-Befehl zur Ermittlung der offenen Tabellen benutzt (da die API-Befehle nur max. 1000 Tabellen ermitteln kann)
CbInfo_OpenTables:N | Anzahl der offenen Tabellen

Funktionen und Methoden

CbExecute

Ermittlung der Record-Sperren starten

CbInitResultTable

Initialisiert eine Tabelle damit diese als ResultTable verwendet werden kann

aDataSet:O

MemTable

Beispiel

|oTracer, oMemResult|

oTracer    := CreateObject('TBeCbAdsLockTracer'),

oMemResult := CreateObject('TBeMemTable'),

startseq

   oTracer.CbServerPath := '\\august\public',

   oTracer.CbInitResultTable(oMemResult),

   oTracer.CbResultTable := oMemResult,

   CollAdd(oTracer.CbIgnoreTables, 'DABSEM.ADT'),

   oTracer.CbExecute(),

   Browse(, oMemResult),

always

   DestroyObject(oTracer),

   DestroyObject(oMemResult),

stopseq,


TbeCbAnything

TbeCbAnything

Diese Klasse dient dem Auslesen von JSON-Objekt-Eigenschaft.

Eigenschaften

Funktionen und Methoden

FromString(cJsonString:C)

Liest das JSON-Objekt als String ein.

cJsonString:C

JSON-Objekt als String

ToString()

Gibt das JSON-Objekt als String zurück

ToFormattedString()

Gibt das JSON-Objekt als formatierten String mit Zeilenumbrüchen und Einrückungen zurück

AsString(aPath:A)

Gibt den Wert einer Eigenschaft zurück, wenn dieser ein String ist.

aPath:A

Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.

AsStringDef(aPath:A, cDefault:C)

Gibt den Wert einer Eigenschaft zurück.

aPath:A | Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.
cDefault:C | Defaul-Rückgabewert, falls eine Eigenschaft im Pfad nicht existiert oder der Wert vom falschen Typ ist.

AsIntege(aPath:A)

Gibt den Wert einer Eigenschaft zurück, wenn dieser ein Integer ist.

aPath:A

Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.

AsIntegerDef(aPath:A, nDefault:N)

Gibt den Wert einer Eigenschaft zurück.

aPath:A | Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.
nDefault:N | Defaul-Rückgabewert, falls eine Eigenschaft im Pfad nicht existiert oder der Wert vom falschen Typ ist.

AsDouble(aPath:A)

Gibt den Wert einer Eigenschaft zurück, wenn dieser ein Double ist.

aPath:A

Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.

AsDoubleDef(aPath:A, nDefault:N)

Gibt den Wert einer Eigenschaft zurück.

aPath:A | Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.
nDefault:N | Defaul-Rückgabewert, falls eine Eigenschaft im Pfad nicht existiert oder der Wert vom falschen Typ ist.

AsBoolean(aPath:A)

Gibt den Wert einer Eigenschaft zurück, wenn dieser ein Boolean ist.

aPath:A

Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.

AsBooleanDef(aPath:A, lDefault:L)

Gibt den Wert einer Eigenschaft zurück.

aPath:A | Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.
lDefault:L | Defaul-Rückgabewert, falls eine Eigenschaft im Pfad nicht existiert oder der Wert vom falschen Typ ist.

AsArray(aPath:A)

Gibt den Wert einer Eigenschaft zurück, wenn dieser ein Array ist.

aPath:A

Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.

AsObject(aPath:A)

Gibt den Wert einer Eigenschaft zurück, wenn dieser ein Objekt ist.

aPath:A

Pfad aus Eigenschaftsnamen. Der Wert der letzten Eigenschaft wird zurückgegeben.

Beispiel

| oJson, cJsonString, oEmployees |

cJsonString :=

'{'                                                       + CRLF +

'  "company": "Dontenwill AG",'                           + CRLF +

'  "address": {'                                          + CRLF +

'    "street": "Elsenheimerstrasse",'                     + CRLF +

'    "house_no": 47,'                                     + CRLF +

'    "zip_code": "80687"'                                 + CRLF +

'  },'                                                    + CRLF +

'  "employees": ['                                        + CRLF +

'    {"name": "Max Mustermann", "is_ceo": true},'         + CRLF +

'    {"name": "Otto Normalverbraucher", "is_ceo": false}' + CRLF +

'  ]'                                                     + CRLF +

'}',

oJson := CreateObject('TbeCbAnything'),

startseq

  oJson.FromString(cJsonString),

  WriteLn(oJson.AsString({'company'})),

  WriteLn(oJson.AsStringDef({'ustid'}, 'keine UStId enthalten')),

  WriteLn(oJson.AsInteger({'address', 'house_no'})),

  oEmployees := oJson.AsArray({'employees'}),

  WriteLn(oEmployees.AsString({0, "name"})),

  WriteLn(oEmployees.AsBoolean({0, "is_ceo"})),

  WriteLn(oEmployees.AsString({1, "name"})),

  WriteLn(oEmployees.AsBoolean({1, "is_ceo"})),

  WriteLn(oEmployees.AsStringDef({2, "name"}, "kein Mitarbeiter")),

always

  DestroyObject(oJson),

stopseq,


TBeCbApplication

TBeCbApplication

Info-Objekt, das zusätzliche Eigenschaften von Application veröffentlicht.

Verwendung:

Eine Instanz dieser Klasse ist als Konstante registriert. CbApplication kann nicht mit CreateObject erzeugt werden.

Eigenschaften

Active:L

Die Eigenschaft hat den Wert True, wenn be aktiv ist. Andernfalls hat sie den Wert False. Active wird beim Start auf True eingestellt.

be ist aktiv, wenn die Anwendung den Eingabefokus besitzt. be wird inaktiv, sobald ein Fenster einer anderen Anwendung aktiviert wird.

Hinweis: Die Eigenschaft Active kann nur gelesen werden.

ExeName:C

Mit ExeName können Sie den Namen der ausführbaren Datei von be ermitteln.

Standardmäßig lautet dieser Name BE_32.EXE.

Die Eigenschaft ExeName kann nur gelesen werden.

Hinweis: ExeName beinhalten auch den Pfad der Anwendung.

HintHidePause:N

Mit HintHidePause können Sie eine Wartezeit in Millisekunden angeben. Diese unterscheidet sich vom Standardwert, der in be vorgegeben wurde.

Der Hinweistext für das Steuerelement oder die Menüoption kann mit der Eigenschaft Hint festgelegt werden.

Hinweis: Der Standardwert ist eine vordefinierte Konstante, die um ein Vielfaches länger als HintPause ist.

HintPause:N

Mit HintPause können Sie die standardmäßige Wartezeit ändern, die in be eingestellt wurde. Geben Sie das Intervall für HintPause in Millisekunden an. Nach diesem Intervall wird der Hilfehinweis angezeigt, der in der Eigenschaft Hint angegeben ist.

MainForm:O

Die Eigenschaft MainForm gibt an, welches Formular das Hauptfenster der Anwendung ist.

Title:C

Die Eigenschaft Title enthält den Text, der beim Verkleinern der Anwendung auf Symbolgröße unter dem Symbol angezeigt wird.

LoadedModule:N

Diese Eigenschaft ist im Codeblock auch als globale Konstante vorhanden und nennt sich wie die Eigenschaft selbst LoadedModule.

LoadedModule zeigt das momentan ausgeführte be-Programm-Modul an. Folgende Werte sind möglich:

0: belmUndefined nicht dokumentierter Aufruf von be

1: belmMain be-Hauptfenster

2: belmFiBu Finanzbuchhaltung

3: belmProg Programmierung

4: belmPrMan Printmanager

5: belmReport Reportgenerator

6: belmScanner Scannersteuerung

7: belmTimeManage Zeiterfassung

8: belmImport Datenimport

9: belmUpdate be-Update

10: belmOrdRelByDate automatische Lieferfreigabe

11: belmSuppAutoPlan automatische Dispo-Planung

12: belmTermTask Terminal-Task

13: belmSubsidCommStart Kommunikationsmodul (ADK)

14: belmWebService Web-Service-Server (alte Version)

15: belmWebServiceServer Web-Service-Server (neue Version)

16: belmCallProg direkter Aufruf eine CB-Programmes

17: belmScanner Scannersteuerung

18: belmDBAdmin Datenbank-Verwaltung

19: belmProtUpdate Reorg-Protokoll

20: belmCreateClass Klassen-Name des Fensters wird übergeben

21: belmBeas beas-Hauptprogramm

Funktionen und Methoden

GetParam:C

Gibt den Wert des gesetzten Parameters zurück.

aParamName:C

Name des Parameters

GetIniParam:C

Gibt den Wert des gesetzten Parameters aus der Ini-Datei zurück.

aParamName:C

Name des Parameters

IsParam:L

Gibt zurück ob der Parameter gesetzt wurde.

aParamName:C

Name des Parameters

IsIniParam:L

Gibt zurück ob der Parameter in der Ini-Datei gesetzt wurde.

aParamName:C

Name des Parameters

Beispiel

function BoolToStr(lBool)

   Result := 'undefined',

   if lBool then

      Result := 'Ja',

   else

      Result := 'Nein',

   endif,

end,

Meld('Fenster aktiv: '      + BoolToStr(CbApplication.Active) + CRLF +

     'Exe-Name: '           + CbApplication.ExeName           + CRLF +

     'Titel: '              + CbApplication.Title             + CRLF +

// Hier kann auch die globale Konstante 'LoadedModule' verwendet werden

     'Hauptmodul geladen: ' + iif(CbApplication.LoadedModule = belmMain, 'Ja', 'Nein')),


TBeCbArchive

TBeCbArchive - Belegarchiv - Druck, eMail-Versand, Export

Klasse zur Steuerung des Belegarchivs in Bezug auf Druck, eMailversand und Export von Belegen wahlweise mit oder ohne Dialog

Eigenschaften:

Belegauswahl-Eigenschaften

DocType:N Belegtyp

DocNo:U Belegnr. (numerisch oder alpha-numerisch)

CurrNo:N default = -1 (neuester) = Lfd.Nr.

PersNo:N Pers.Nr.

Allg. Export-Eigenschaften

FileName:C default = leer = Ausgabe Dateiname für Email und Export

ShowDialog:L default = False = Druck-, Email-, Exportdialog anzeigen

Druck-Eigenschaften

OutPrinterName:C default = leer = Druckername

OutBinName:C default = leer = Papierschachtname

OutDocName:C default = leer = Dokumentname im Spooler

OutCopies:N default = 1 = Anzahl Druckkopien

PrintBkPages:L default = False = Hintergundformular drucken

OverlayBkPage:N default = -1 = Original Hintergundformular des ursprünglichen Druckes

Email-Eigenschaften

Subject:C default = leer = Email-Betreff

Body:C default = leer = Email-Text (RTF erlaubt)

MailTo.C default = leer = Email-An-Liste

MailCc:C default = leer = Email-Kopie-Liste

MailBcc:C default = leer = Email-Blindkopie-Liste

MailAttach:C default = leer = Email-Dateianhänge-Liste

Hinweise:

Per Default wird als Datei eine PDF-Datei erzeugt, es kann jedoch ein beliebiges, verfügbares Export-Format als Dateiendung angegeben werden.

Beim Druck mit Druck-Dialog werden u.U. nicht alle Vorgaben aus den Eigenschaften übernommen.

Beim Email mit Email-Dialog werden u.U. nicht alle Vorgaben aus den Eigenschaften übernommen.

Beispiel

|oArch, nAction, nShowDlg|

oArch         := CreateObject("TBeCbArchive"),

oArch.DocType := 20,     // z.B. Auftragsbestätigung

oArch.DocNo   := 1545,   // z.B. AB-Nummer

oArch.PersNo  := 120882, // z.B. Kd.Nr.

//nAction := 1,     // Drucken

//nAction := 2,     // Email

nAction   := 3,     // Export

nShowDlg  := False, // Dialog anzeigen ?

case nAction

   of 1 :: // direkt drucken

      oArch.OutPrinterName  := 'HP LaserJet 6P',  // Druckername

      oArch.OutBinName      := 'Schacht 2',       // PapiersachtName

      oArch.OutDocName      := 'Mein Druck !',    // Dokumentname (für Spooler)

      oArch.OutCopies       := 2,                 // Anzahl Druckkopien

      oArch.PrintBkPages    := true,              // Hintergrundformular drucken

      oArch.OverlayBkPage   := 1,                 // Htgrd.form. Nr. 1

      oArch.ShowDialog      := nShowDlg,

      oArch.ExecPrint,

   of 2 :: // direkt per Email versenden

      oArch.Subject         := 'Anbei Angenbot Nr. ' + FloatToStr(oArch.DocNo),

      oArch.Body            := 'Anliegend erhalten Sie unser Angebot.', // darf auch RTF sein

      oArch.MailTo          := '"Dontenwill GmbH" <info@dontenwil.de>',

      //oArch.MailCC        := '"Dontenwill GmbH" <info@dontenwil.de>',

      //oArch.MailBCC       := '"Dontenwill GmbH" <info@dontenwil.de>',

      oArch.MailAttach      := 'C:\test.txt',

      //oArch.Filename      := 'Angebot Nr ' + FloatToStr(oArch.DocNo) + '.RTF', // z.B. anderes Format (MS-Word)

      oArch.Filename        := 'Angebot Nr ' + FloatToStr(oArch.DocNo) + '.PDF',

      oArch.ShowDialog      := nShowDlg,

      oArch.ExecEmail,

   of 3 :: // direkt exportieren

      //oArch.Filename      := 'C:\Temp\Angebot Nr ' + FloatToStr(oArch.DocNo) + '.RTF', // z.B. anderes Format (MS-Word)

      oArch.Filename        := 'c:\temp\Angebot Nr ' + FloatToStr(oArch.DocNo) + '.PDF',

      oArch.ShowDialog      := nShowDlg,

      oArch.ExecExport,

endcase,


TBeCBAsyncQuery

TBeCBAsyncQuery

Ermöglicht das asynchronee Ausführen von SQL-Queries.

Eigenschaften |
Query:O | Das AdsQuery-Objekt
SqlText:C | Das auszuführende SQL-Statement
AdminConnect:L | True = Query als Administrator starten
SqlOk:L | True = Wenn das Statement fehlerfrei ausgeführt wurde; False = Wenn während der Ausführung Fehler aufgetreten sind
LastError:C | Fehlertext des zuletzt ausgeführten Statements
Duration:D | Die Dauer der Ausführung
RowsAffected:N | Anzahl der betroffenen Datensätze
SqlOpen:L | True = Der Query soll nur geöffnet werden; False = Der Query soll ausgeführt werden
ExecQuery:L | Wurde der Query angehalten, wird dieser wieder fortgesetzt und dementsprechend True oder False zurückgegeben
Terminate:L | Der Query wird geschlossen, anschließend wird Terminated zurückgegeben
Terminated:L | True = Der Query wurde geschlossen; False = Der Query wurde nicht geschlossen
Suspended:L | Durch setzen dieser Eigenschaft auf True wird der Query angehalten
Aktive Eigenschaften (Events) |
OnInitQuery | Bei Initialisierung des Queries
OnExitQuery | Bei Beenden des Queries

Beispiel

//******************************************************************************

// Programm zum Testen der TBeCbAsyncQuery-Klasse

//******************************************************************************

| oAsyncQuery, lFinished, cTime, cLastTime |

//##############################################################################

//##############################################################################

// Eventhandler

//##############################################################################

//##############################################################################

//******************************************************************************

// Wird bei aufruf des OnExit Events aufgerufen

//******************************************************************************

function OnExitQuery(Sender)                // Sender ist oAsyncQuery

| aQuery |

  StartSeq

    WriteLn('Dauer der Abfrage: ' +

            FormatDateTime('hh:nn:ss:zzz', Sender.Duration)),

    WriteLn('-------------------------------'),

    aQuery:= Sender.Query,

    DbGoTop(aQuery),

    while !EoF(aQuery) do

      WriteLn(Trim(aQuery:Bez1) + ' ' + Trim(aQuery:Bez2)),

      DbSkip(1, aQuery),

    end

  Always

    // Wichtig: das MUSS stattfinden !!!

    lFinished:= True

  StopSeq

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

oAsyncQuery:= CreateObject('TBeCBAsyncQuery'),   // Objekt erzeugen

if not Empty(oAsyncQuery) then

   StartSeq

     // Sql-Text zuweisen

     oAsyncQuery.SqlText:= 'SELECT * FROM "DAB010.DBF" '   + // Alle Artikel mit 'TEST' selektieren

                           ' WHERE ARTNR LIKE ''%TEST%'' ' +

                           ' ORDER BY KOSTENST',

     // Abfrage mit Open öffnen

     oAsyncQuery.SqlOpen:= True,

     AssignEvent(oAsyncQuery, 'OnExitQuery', 'OnExitQuery'),

     // Abfrage ausführen

     lFinished:= False,

     oAsyncQuery.ExecQuery,

     // Warten ...

     cLastTime:= '',

     while not lFinished do

       // Hier kann alles mögliche gemacht werden, solange die Abfrage läuft ...

       cTime:= TimeToStr(Now()),

       if cTime <> cLastTime then

          writeln(cTime),

          cLastTime:= cTime,

       endif,

       ProcessMsg()

     end,

     Meld('Fertig: ' + iif(oAsyncQuery.SqlOk, 'Ok', oAsyncQuery.LastError))

   Always

     DestroyObject(oAsyncQuery)

   StopSeq

endif


TbeCbAttachment

TbeCbAttachment

Die Klasse TbeCbAttachment ist ein Panel, den ermöglicht Drag&Drop für Anhänge zu nutzen.

Steht zu Verfügung auch im F12-Formulare in der Karte "Allgemein" mit folgende Ico

Eigenschaften:

Eigenschaften

DropTarget:O

Ein Element des Formulars oder den Formular selbst. Definiert den Bereich, in welchen werden Drops akzeptiert.

DataSet:O

Die Tabelle, welche beim jeden Drop editiert wird, und die musste danach gespeichert werden (DbPost, CbPost usw.).

DataField:S

Das Feld der Tabelle DataSet, in welchem wird den Anhang beim jeden Drop gespeichert. Es muss um einen MEMO Feld gehen.

ShowEmbeddedAttachments:L

Steuert, ob LoadAttachments die eingebettete Anhänge auch in dem Control angezeigt werden können. Muss vor dem Aufruf von LoadAttachments gesetzt werden.

Default: false

Achtung: Wenn diese Eigenschaft auf true gesetzt wird, kann man die eingebetteten Anhänge unter Umständen auch löschen. Dadurch können z.B. E-Mail-Anhänge defekt werden.

Funktionen / Methoden

LoadAttachments()

Ladet neu alle schon vorher gespeicherte Anhänge aus DataSet:DataField.

Beispiel

|

   // @VDB@ Der nachfolgende Teil wird automatisch gepflegt.

   oForm, A_HelpContent, BeBitBtn1, BeBitBtn2, BeBitBtn3, beCbAttachment1,

   BeLabel1

   // @VDE@ Der vorangehende Teil wird automatisch gepflegt.

   , oDataSet

|

function RefreshForm()

  BeLabel1.Caption := oDataSet:MEMO_ID,

  beCbAttachment1.LoadAttachments(),

end,

//******************************************************************************

//

//******************************************************************************

function BeBitBtn1Click( Sender )

  oDataSet.CbPrior(),

  RefreshForm(),

end,

//******************************************************************************

//

//******************************************************************************

function BeBitBtn2Click( Sender )

  oDataSet.CbNext(),

  RefreshForm(),

end,

//******************************************************************************

//

//******************************************************************************

function BeBitBtn3Click( Sender )

  oDataSet.CbPost(),

end,

startseq

   // @VZB@ Der nachfolgende Teil wird automatisch gepflegt.

   oForm           := LoadForm("@ATTACH", Application),

   A_HelpContent   := FindObject(oForm, "A_HelpContent"),

   BeBitBtn1       := FindObject(oForm, "BeBitBtn1"),

   BeBitBtn2       := FindObject(oForm, "BeBitBtn2"),

   BeBitBtn3       := FindObject(oForm, "BeBitBtn3"),

   beCbAttachment1 := FindObject(oForm, "beCbAttachment1"),

   BeLabel1        := FindObject(oForm, "BeLabel1"),

   // @VZE@ Der vorangehende Teil wird automatisch gepflegt.

   oDataSet := DbOpen(waDab065),

   beCbAttachment1.DropTarget              := oForm,

   beCbAttachment1.DataSet                 := oDataSet,

   beCbAttachment1.DataField               := 'DATA',

   beCbAttachment1.ShowEmbeddedAttachments := false;

   oDataSet.CbLast(),

   RefreshForm(),

   ShowModal(oForm),

onerror

   Writeln(GetErrorText(GEtErrorObj())),

   DestroyObject(oForm),

stopseq,


TBeCbAvailableMailAccountConfigFrame

TBeCbAvailableMailAccountConfigFrame

Oberflächen-Konfigurationsbereich für Benutzer zugeordnete E-Mail-Konten.

Eigenschaften
CbAccountDesc_Visibility:N | Sichtbarkeit der Konto-Bezeichnung
CbMailAddress_Visibility:N | Sichtbarkeit der E-Mail-Adresse
CbUserDisplayName_Visibility:N | Sichtbarkeit des E-Mail-Absendernamens
CbCanReceive_Visibility:N | Sichtbarkeit der Option "Nachrichten über dieses Konto empfangen"
CbAutoReceive_Visibility:N | Sichtbarkeit der Option "Nachrichten automatisch abrufen"
CbAutoReceiveInterval_Visibility:N | Sichtbarkeit des Abrufintervalls
CbAutoRecSubsidMode_Visibility:N | Sichtbarkeit der Option "Abrufoptionen für Außendienst-Mitarbeiter"
CbCanSend_Visibility:N | Sichtbarkeit der Option "Nachrichten über dieses Konto senden"
CbSendSettings_Visibility:N | Sichtbarkeit der Sende-Einstellungen
CbReceiveSettings_Visibility:N | Sichtbarkeit der Empfangs-Einstellungen
CbSettings_Visibility:N | Sichtbarkeit der Einstellungen (allgemein)
CbIsDefaultSendAccount_Visibility:N | Sichtbarkeit der Option "Standard Konto zum versenden von Nachrichten"

Funktionen und Methoden

(siehe TBeCbCustomConfigFrame)

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Codeblock-Beispiel für die Klasse TBeCbMailAccountConfigFrame

//##############################################################################

//##############################################################################

| m_oForm, m_oFrame |

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Setzen der Standardeinstellungen

// @Result: null

//******************************************************************************

function SetDefaults()

  m_oFrame.CbSendSettings_Visibility := 2,

end,

//##############################################################################

//##############################################################################

// Oberflächen-Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// LoadGUI lädt sämtliche Komponenten die für die Oberfläche benötigt werden

// @Result: null

//******************************************************************************

function LoadGUI()

| oQuery |

   startseq

      m_oForm         := CreateObject('TFormEx'),

      m_oFrame        := CreateObject('TBeCbAvailableMailAccountConfigFrame',,

                                      m_oForm, m_oForm),

      m_oForm.Height  := 600,

      m_oForm.Width   := 500,

      m_oFrame.Align  := alClient,

      // Konto für aktuellen Benutzer ermitteln

      m_oFrame.CbKey1 := iif(Left(c_usr, 1) = '0', Right(c_usr, 2), c_usr),

      m_oFrame.CbInitFrame(),

   onerror

      DestroyObject(m_oForm),

      SetError('Fehler beim Laden der Oberfläche' + crlf + GetErrorText()),

   stopseq

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   LoadGUI(),

   SetDefaults(),

   ShowModal(m_oForm),

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + GetErrorText(), mtError),

stopseq,

Siehe auch:

TBeCbCustomConfigFrame

TBeCbMailAccountConfigFrame

TBeCbMailServerConfigFrame

TBeCbOutlookSyncAccountConfigFrame

TBeCbAvailableOutlookSyncAccountConfigFrame


TBeCbAvailableOutlookSyncAccountConfigFrame

TBeCbAvailableOutlookSyncAccountConfigFrame

Oberflächen-Konfigurationsbereich für Benutzer zugeordnete Outlook-Konten.

Eigenschaften
CbAccountDesc_Visibility:N | Sichtbarkeit der Konto-Bezeichnung
CbExportEvents_Visibility:N | Sichtbarkeit der Option "Termine nach Microsoft Outlook exportieren"
CbImportEvent_Visibility:N | Sichtbarkeit der Option "Termine von Microsoft Outlook importieren"
CbAutoSync_Visibility:N | Sichtbarkeit der Option "Automatisch synchronisieren"
CbAutoSyncInterval_Visibility:N | Sichtbarkeit des Synchronisationsintervalls

Funktionen und Methoden

(siehe TBeCbCustomConfigFrame)

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Codeblock-Beispiel für die Klasse TBeCbMailAccountConfigFrame

//##############################################################################

//##############################################################################

| m_oForm, m_oFrame |

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Setzen der Standardeinstellungen

// @Result: null

//******************************************************************************

function SetDefaults()

   // Alle Controls sollen sichtbar sein

end,

//##############################################################################

//##############################################################################

// Oberflächen-Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// LoadGUI lädt sämtliche Komponenten die für die Oberfläche benötigt werden

// @Result: null

//******************************************************************************

function LoadGUI()

| oQuery |

   startseq

      m_oForm         := CreateObject('TFormEx'),

      m_oFrame        := CreateObject('TBeCbAvailableOutlookSyncAccountConfigFrame',,

                                      m_oForm, m_oForm),

      m_oForm.Height  := 600,

      m_oForm.Width   := 500,

      m_oFrame.Align  := alClient,

      // Konto für aktuellen Benutzer ermitteln

      m_oFrame.CbKey1 := iif(Left(c_usr, 1) = '0', Right(c_usr, 2), c_usr),

      m_oFrame.CbInitFrame(),

   onerror

      DestroyObject(m_oForm),

      SetError('Fehler beim Laden der Oberfläche' + crlf + GetErrorText()),

   stopseq

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   LoadGUI(),

   SetDefaults(),

   ShowModal(m_oForm),

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + GetErrorText(), mtError),

stopseq,

Siehe auch:

TBeCbCustomConfigFrame

TBeCbMailAccountConfigFrame

TBeCbMailServerConfigFrame

TBeCbAvailableMailAccountConfigFrame

TBeCbOutlookSyncAccountConfigFrame


TBeCbBORelationShipList

TBeCbBORelationShipList

Die Klasse TBeCbBORelationShipList stellt eine Liste mit Verknüpfungen zur Verfügung.

Eigenschaften:

Funktionen und Methoden

CbCount():N

Anzahl der vorhanden Verknüpfungen

CbItem():O

Zugriff auf eine Verknüpfung. Rückgabe ist ein TBeBORelationShip-Objekt

aIndex:N

Index der Verknüpfung (1 bis CbCount)

Beispiel

// siehe TBeCbBORelationShips

Siehe auch:

TBeCbBORelationShips

TBeBORelationShip


TBeCbBORelationShips

TBeCbBORelationShips

Die Klasse TBeCbBORelationShips kapselt Eigenschaften und Funktionen für Verknüpfungen von Business-Objekten.

Eigenschaften:

Funktionen und Methoden

CbAddRelationShip():N

Neue Verknüpfung zu einem Business-Objekt erstellen; Existiert die Verknüpfung bereits, so wird keine neue erstellt. Rückgabe ist die ID der Verknüpfung.
aDestBO:O | Business-Objekt, zu welchem die Verknüpfung erzeugt werden soll
aKind:N | Art der Verknüpfung
aType:N | Typ der Verknüpfung

CbAddRelationShipByDestID():N

Neue Verknüpfung zu einem Business-Objekt erstellen, existiert die Verknüpfung bereits, so wird keine neue erstellt. Rückgabe ist die ID der Verknüpfung
aDestWorkArea:N | Workarea der Tabelle, zu welcher die Verknüpfung erzeugt werden soll
aDestID:N | ID der Tabelle, zu welcher die Verknüpfung erzeugt werden soll
aDestLocation:N | STANDORT der Tabelle, zu welcher die Verknüpfung erzeugt werden soll. Sofern diese Information technisch irrelevant ist, muss -1 übergeben werden.
aKind:N | Art der Verknüpfung
aType:N | Typ der Verknüpfung

CbDeleteRelationShip():L

Verknüpfung löschen

aID:N

ID der Verknüpfung

CbGetRelationShipByID():O

Rückgabe ist ein TBeBORelationShip-Objekt, welche die Informationen der Verknüpfung enthält, das Objekt muss per DestroyObject() wieder zerstört werden.

aID:N

ID der Verknüpfung

CbFindRelationShip():O

Nach einer bestimmten Verknüpfung suchen; Rückgabe ist ein TBeBORelationShip-Objekt oder NIL, falls keine Verknüpfung gefunden wurde, das Objekt muss per DestroyObject() wieder zerstört werden.
aDestBO:O | Business-Objekt, zu welchem die Verknüpfung gesucht werden soll
aKind:N | Art der Verknüpfung (-1 = kann jede beliebige Art sein)
aType:N | Typ der Verknüpfung (-1 = kann jeder beliebiger Typ sein)

CbFindRelationShipByDestID():O

Nach einer bestimmten Verknüpfung suchen; Rückgabe ist ein TBeBORelationShip-Objekt oder NIL, falls keine Verknüpfung gefunden wurde, das Objekt muss per DestroyObject() wieder zerstört werden.
aDestWorkArea:N | Workarea der Tabelle, zu welcher die Verknüpfung gesucht werden soll
aDestID:N | ID der Tabelle, zu welcher die Verknüpfung gesucht werden soll
aDestLocation:N | STANDORT der Tabelle, zu welcher die Verknüpfung gesucht werden soll
aKind:N | Art der Verknüpfung (-1 = kann jede beliebige Art sein)
aType:N | Typ der Verknüpfung (-1 = kann jeder beliebiger Typ sein)

CbFindAllRelationShips():O

Alle Verknüpfungen des Business-Objekts ermitteln (TBeCbBORelationShipList)

aFilter:C

Optionale, zusätzliche ADS-konforme Filter-Bedingung für die DABVKN

aFindDirection:N

Verknüpfungs-Richtung, nach der gesucht werden soll

(default) rsfdSource | = Verknüpfung wird in Quelle gesucht
rsfdDestination | = Verknüpfung wird in Ziel gesucht
rsfdSourceAndDestination | = Verknüpfung wird in Quelle und Ziel gesucht

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Dokumentationsprogramm zum Erzeugen von Verknüpfungen

//##############################################################################

//##############################################################################

|

   m_oDM,

   // Business-Objekte

   m_oProjectBO, m_oDestProjectBO, m_oDestMemoBO, oRelationShip,

   oRelationList,

   // Sonstige

   m_nDestID1, m_nDestID2, m_nRelationID

|

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Findet alle Verknüpfungen und schreibt dessen ID's in die Konsole

//******************************************************************************

function GetAllLinks()

| i |

   // Alle Verknüpfungen ermitteln und Ausgeben

   oRelationList := m_oProjectBO.CbRelationShips.CbFindAllRelationShips('', rsfdSource),

   startseq

      writeln(Str(oRelationList.CbCount()) + ' Verknüpfungen vorhanden'),

      for i := 1 to oRelationList.CbCount() do

         oRelationShip := oRelationList.CbItem(i),

         writeln('  ' + Str(oRelationShip.CbDestID)),

      next,

   always

      DestroyObject(oRelationList),

   stopseq,

end,

//******************************************************************************

// Löscht eine Verknüpfung

//******************************************************************************

function DeleteLink()

   // Verknüpfung suchen und löschen

   m_oDestMemoBO.CbGoToID(m_nDestID2),

   oRelationShip  := m_oProjectBO.CbRelationShips.CbFindRelationShip(m_oDestMemoBO, 0, 0),

   if not empty(oRelationShip) then

      startseq

         if m_oProjectBO.CbRelationShips.CbDeleteRelationShip(oRelationShip.CbID) then

            writeln('Verknüpfung ' + Str(oRelationShip.CbID) + ' gelöscht'),

         endif,

      always

         DestroyObject(oRelationShip),

      stopseq,

   endif,

end,

//******************************************************************************

// Erzeugen der Verknüpfungen

// @Result: null

//******************************************************************************

function CreateLinks()

   // Verknüpfungen erstellen

   m_oDestProjectBO.CbGoToID(m_nDestID1),

   m_nRelationID         := m_oProjectBO.CbRelationShips.CbAddRelationShip(m_oDestProjectBO, 0, 1),

   writeln('Projekt-Verknüpfung', m_nRelationID),

   m_nRelationID := m_oProjectBO.CbRelationShips.CbAddRelationShipByDestID(9, m_nDestID2, -1, 0, 0),

   oRelationShip := m_oProjectBO.CbRelationShips.CbGetRelationShipByID(m_nRelationID),

   writeln('Memo-Verknüpfung', oRelationShip.CbID),

end,

//******************************************************************************

// Erstellen des Memos das als Verknüpfung dienen soll

//******************************************************************************

function CreateLinkMemo()

   m_oDestMemoBO.WriteLastUsed := False,

   m_oDestMemoBO.CBInsertEmptyMemo(10, bcMemoLinkIDUser, val(c_usr), 0),

   m_oDestMemoBO.SubjectValue := 'Ich bin eine Memo Verknüpfung',

   m_oDestMemoBO.CBPost(),

   m_nDestID2 := m_oDestMemoBO.CbID,

   writeln('Memo-BO', m_nDestID2),

end,

//******************************************************************************

// Benötigte Business-Objekte erstellen

//******************************************************************************

function CreateBusinessObjects()

   m_oProjectBO               := CreateObject('TBeProjectBO', 'SRCPRJ', m_oDM),

   m_oDestProjectBO           := CreateObject('TBeProjectBO', 'DESTPRJ', m_oDM),

   // Pro DatenModul darf nur ein ProjectBO existieren deshalb wird hier nur

   // einmal ein CbDataModule zugewiesen

   m_oProjectBO.CbDataModule  := m_oDM,

   m_oDestMemoBO              := CreateObject('TBeMemoBO', 'LNKMEMO', m_oDM),

   m_oDestMemoBO.CbDataModule := m_oDM,

end,

//******************************************************************************

// Projekte erstellen

//******************************************************************************

function CreateProjects()

| nSourcePrjID |

   startseq

      // Neues Projekt erstellen

      m_oProjectBO.CBInsert(),

      m_oProjectBO.CbDescription := 'Ich habe Verknüpfungen',

      m_oProjectBO.CbType        := 100,

      m_oProjectBO.CbStartDate   := Now(),

      m_oProjectBO.CBPost(),

      nSourcePrjID := m_oProjectBO.CbID,

      // Neues Projekt das als Verknüpfung dient erstellen

      m_oProjectBO.CBInsert(),

      m_oProjectBO.CbDescription := 'Ich bin ein verknüpftes Projekt',

      m_oProjectBO.CbType        := 100,

      m_oProjectBO.CbStartDate   := Now(),

      m_oProjectBO.CBPost(),

      m_nDestID1 := m_oProjectBO.CbID,

      writeln('Projekt-BO', m_nDestID1),

      m_oProjectBO.CbGoToID(nSourcePrjID),

   onerror

      SetError('Fehler beim Erstellen der Projekte' + crlf + GetErrorText()),

   stopseq,

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

m_oDM := CreateObject('TBeDBGet', 'VKNDOKUGET'),

startseq

   CreateBusinessObjects(), // Erstellen der benötigten Business-Objekte

   CreateProjects(),        // Erstellen der Projekte

   CreateLinkMemo(),        // Memo für die Verknüpfung erstellen

   CreateLinks(),           // Verknüpfungen erzeugen

   GetAllLinks(),           // ID's aller bestehenden Verknüpfungen in die Konsole schreiben

//   DeleteLink(),            // Löscht eine Verknüpfung

always

   DestroyObject(m_oDM),

stopseq,

Siehe auch:

TBeCbBORelationShipList

TBeBORelationShip


TBeCbChangeStateOfConstruction

TBeCbChangeStateOfConstruction

Die Klasse TBeCbChangeStateOfConstruction kapselt Eigenschaften und Funktionen zum Ändern eines Bauzustands.

Für die Benutzung der Funktionen müssen zuvor die Properties: CbMasterArtNo, CbMasterSerialNo, CbArtNo,

CbSerialNo auf die gewünschten Werte gesetzt werden.

Eigenschaften:

Eigenschaften

CbDataModule:O

Daten-Modul

CbMasterArtNo:C

Artikelnummer, dessen Baugruppe geändert werden soll

CBMasterSerialNo:C

Seriennummer des Artikels, dessen Baugruppe geändert werden soll

CbArtNo:C

Artikelnummer des zu ändernden Artikels

CbSerialNo:C

Seriennummer des zu ändernden Artikels

CbVoucherNo:C

Belegnummer

CbModifiedDate:D

Datum der Änderung

CbErrorMode:N

Verhalten im Fehlerfall:

&#183 errmShowMsg -> Fehlermeldung anzeigen

&#183 errmRaise -> Exception auslösen

&#183 errmResult -> Boolean-wert als Rückgabe

Funktionen und Methoden

CbCanChangeSerialNo():L

Mit dieser Funktion lässt sich prüfen, ob die Seriennummer des übergebenen Artikels verändert werden darf.

aNewSerialNo:C

Gewünschte Seriennummer

CbCanDeleteSerialNoArticle():L

Prüft, ob ein Artikel aus dem aktuellen Bauzustand entfernt werden kann.

CbCanUseSerialNoArticleForChangeSoC():L

Prüft, ob Serien-Nr. Artikel für eine Änderung des Bauzustands benutzt / beim Master-Artikel hinzugefügt werden kann.

Der Artikel:

&#183 darf keine Variante sein

&#183 muss ein Serien-Nr. Artikel sein (Serien-Nr. muss existieren)

&#183 darf nicht auf Lager sein

&#183 darf nicht in einem anderen Artikel verbaut sein

&#183 darf nicht im Versand sein

CbCanModifySerialNoArticle():L

Prüfen, ob der Bauzustand eines Artikels verändert werden kann.

CbChangeSerialNo():L

Seriennummer eines Artikels austauschen.

aNewSerialNo:C

Neue Seriennummer

CbDeleteSerialNoArticle():L

Serien-Nr. Artikel aus einem Bauzustand löschen.

CbInsertSerialNoArticle():L

Serien-Nr. Artikel zu einem Bauzustand hinzufügen.

Beispiel

| m_oStateObj, m_cMasterArtNR, m_cMasterSerNr, m_cSubArtNr, m_cSubSerNr |

//******************************************************************************

// Gibt alle Propertie-Werte eines ChangeStateOfConstruction-Objectes aus

//******************************************************************************

function WriteCurrentObjectState(oObj)

   writeln('##############'),

   writeln('VoucherNo', oObj.CbVoucherNo),

   writeln('SerialNo', oObj.CbSerialNo),

   writeln('ArtNo', oObj.CbArtNo),

   writeln('MasterSerialNo', oObj.CbMasterSerialNo),

   writeln('MasterArtNo:', oObj.CbMasterArtNo),

   writeln('ErrorMode', oObj.CbErrorMode),

end,

m_oStateObj := CreateObject('TBeCbChangeStateOfConstruction', 'CSOC'),

startseq

   startseq

      // ACHTUNG: Diese Daten müssen, für eine erfolgreiche Ausführung,

      //          für den jeweiligen Datenbestand angepasst werden.

      //          Hierbei ist darauf zu achten, dass dieses Beispiel einige

      //          Änderungen an den gewählten Artikel durchführt. Es ist daher

      //          ratsam einen Testartikel zu verwenden.

      m_cMasterArtNR := 'PC',

      m_cMasterSerNr := '40',

      m_cSubArtNr    := 'PC_CPU',

      m_cSubSerNr    := '1',

      // Hauptartikel setzen

      m_oStateObj.CbMasterArtNo    := m_cMasterArtNR,

      m_oStateObj.CbMasterSerialNo := m_cMasterSerNr,

      // Unterartikel setzen

      m_oStateObj.CbArtNo       := m_cSubArtNr,

      m_oStateObj.CbSerialNo    := m_cSubSerNr,

      writeln('########## Konfiguration der Properties '),

      WriteCurrentObjectState(m_oStateObj),

      writeln(crlf + '########## CbCanChangeSerialNo ' + crlf),

      //************************************************************************

      // CbCanChangeSerialNo und CbErrorMode

      //************************************************************************

      // CbErrorMode -> Fehlermeldung ausgeben

      m_oStateObj.CbErrorMode := errmShowMsg,

      m_oStateObj.CbCanChangeSerialNo(m_cSubSerNr),

      // CbErrorMode -> Exception auslösen

      startseq

         m_oStateObj.CbErrorMode := errmRaise,

         m_oStateObj.CbCanChangeSerialNo(m_cSubSerNr),

      onerror

         writeln('Fehlerausgabe ' + GetErrorText()),

      stopseq,

      // CbErrorMode -> boolean zurückgeben

      m_oStateObj.CbErrorMode := errmResult,

      iif(m_oStateObj.CbCanChangeSerialNo(m_cSubSerNr),

                                          writeln('Änderbar'),

                                          writeln('Nicht änderbar')),

      iif(m_oStateObj.CbCanChangeSerialNo(112),

                                          writeln('Änderbar'),

                                          writeln('Nicht änderbar')),

      //************************************************************************

      // CanModifySerialNoArticle

      //************************************************************************

      writeln(crlf + '########## CanModifySerialNoArticle' + crlf),

      // CbErrorMode -> Fehlermeldung ausgeben

      m_oStateObj.CbMasterArtNo    := m_cMasterArtNR,

      m_oStateObj.CbMasterSerialNo := 999,

      m_oStateObj.CbErrorMode      := errmShowMsg,

      m_oStateObj.CbCanModifySerialNoArticle(),

      // CbErrorMode -> Exception auslösen

      startseq

         m_oStateObj.CbErrorMode := errmRaise,

         m_oStateObj.CbCanModifySerialNoArticle(),

      onerror

         writeln('Fehlerausgabe ' + GetErrorText()),

      stopseq,

      // CbErrorMode -> boolean zurückgeben

      m_oStateObj.CbErrorMode := errmResult,

      iif(m_oStateObj.CbCanModifySerialNoArticle(),

                                                 writeln('Änderbar'),

                                                 writeln('Nicht änderbar')),

      m_oStateObj.CbMasterSerialNo := m_cMasterSerNr,

      iif(m_oStateObj.CbCanModifySerialNoArticle(),

                                                 writeln('Änderbar'),

                                                 writeln('Nicht änderbar')),

      //************************************************************************

      // CbCanDeleteSerialNoArticle

      //************************************************************************

      writeln(crlf + '########## CbCanDeleteSerialNoArticle' + crlf),

      m_oStateObj.CbMasterArtNo    := m_cMasterArtNr,

      m_oStateObj.CbMasterSerialNo := m_cMasterSerNr,

      m_oStateObj.CbArtNo          := m_cSubArtNr,

      m_oStateObj.CbSerialNo       := 999999,

      // CbErrorMode -> Fehlermeldung ausgeben

      m_oStateObj.CbErrorMode := errmShowMsg,

      m_oStateObj.CbCanDeleteSerialNoArticle(),

      // CbErrorMode -> Exception auslösen

      startseq

         m_oStateObj.CbSerialNo  := 999,

         m_oStateObj.CbErrorMode := errmRaise,

         m_oStateObj.CbCanDeleteSerialNoArticle(), // Gibt hier keine exception aus?!

      onerror

         writeln('Fehlerausgabe ' + GetErrorText()),

      stopseq,

      m_oStateObj.CbMasterArtNo    := m_cMasterArtNR,

      m_oStateObj.CbMasterSerialNo := 999999,

      m_oStateObj.CbErrorMode      := errmResult,

      // CbErrorMode -> boolean zurückgeben

      iif(m_oStateObj.CbCanDeleteSerialNoArticle(), writeln('Löschbar'), writeln('Nicht löschbar')),

      m_oStateObj.CbMasterSerialNo := 1,

      iif(m_oStateObj.CbCanDeleteSerialNoArticle(), writeln('Löschbar'), writeln('Nicht löschbar')),

      //************************************************************************

      // CbCanUseSerialNoArticleForChangeSoC

      //************************************************************************

      writeln(crlf + '########## CbCanUseSerialNoArticleForChangeSoC' + crlf),

      m_oStateObj.CbArtNo    := m_cSubArtNr,

      m_oStateObj.CbSerialNo := 999,

      // CbErrorMode -> Fehlermeldung ausgeben

      m_oStateObj.CbErrorMode := errmShowMsg,

      m_oStateObj.CbCanUseSerialNoArticleForChangeSoC(),

      // CbErrorMode -> Exception auslösen

      m_oStateObj.CbErrorMode := errmRaise,

      startseq

         m_oStateObj.CbCanUseSerialNoArticleForChangeSoC(), // Gibt hier keine exception aus?!

      onerror

         writeln('Fehlerausgabe ' + GetErrorText()),

      stopseq,

      // CbErrorMode -> boolean zurückgeben

      m_oStateObj.CbErrorMode := errmResult,

      iif(m_oStateObj.CbCanUseSerialNoArticleForChangeSoC(), writeln('Verwendbar'), writeln('Nicht verwendbar')),

      m_oStateObj.CbSerialNo := m_cSubSerNr,

      iif(m_oStateObj.CbCanUseSerialNoArticleForChangeSoC(), writeln('Verwendbar'), writeln('Nicht verwendbar')),

      //************************************************************************

      // CbChangeSerialNo

      //************************************************************************

      m_oStateObj.CbChangeSerialNo(3),           // Seriennummer von 1 -> 3

      m_oStateObj.CbSerialNo := '3',             // Neu positionieren

      m_oStateObj.CbChangeSerialNo(m_cSubSerNr), // Seriennummer zurück von 3 -> 1

      //************************************************************************

      // CbDeleteSerialNoArticle und CbInsertSerialNoArticle

      //************************************************************************

      m_oStateObj.CbSerialNo  := m_cSubSerNr, // Positionieren

      m_oStateObj.CbErrorMode := errmResult,  // Rückgabe als Boolean

      if m_oStateObj.CbDeleteSerialNoArticle() then // Wenn Löschen OK dann wieder hinzufügen

         writeln(iif(m_oStateObj.CbInsertSerialNoArticle(), 'Gelöscht und wieder hinzugefügt', 'Fehler')),

      else

         writeln('Löschen fehlgeschlagen'),

      endif,

   onerror

      MessageDlg(GetErrorText()),

   stopseq,

always

   DestroyObject(m_oStateObj),

stopseq,


TBeCbCodeblockCollector

TBeCbCodeblockCollector

Klasse zum Exportieren von Codeblöcken.

Diese Klasse ermöglicht es alle möglichen Codeblöcke, welche in be hinterlegt werden können, zu exportieren.

Eigenschaften

Eigenschaften

CbFilePath:C

Pfadangabe in dem Exportiert werden soll

CbDataBasePath:C

Ordner-Pfad der das DataDictionary enthält aus dem exportiert werden soll

CbDabPARPath:C

Ordner-Pfad für die DabPAR, sofern dieser vom Pfad des DataDictionary abweicht, kann

diese Eigenschaft leer bleiben

CbUsername:C

Username für den zugriff auf einen externen Datenbestand mit unterschiedlichen Log-in Daten

CbPassword:C

Password für den zugriff auf einen externen Datenbestand mit unterschiedlichen Log-in Daten

Funktionen und Methoden

CbAddExportType

Fügt einen Bereich der exportiert werden soll hinzu

aType:N

be-Codeblock-Bereich

0 (cctUndefined)

1 (cctPrintManager)

2 (cctCRMAction)

3 (cctIndividualMenu)

4 (cctBrowserDefinition)

5 (cctMaskDefinition)

6 (cctAttributeTable)

7 (cctShippingControl)

8 (cctDocLayout)

9 (cctTextModule)

10 (cctRights)

11 (cctMemoViews)

12 (cctParameter)

13 (cctCodeBlockProgram)

14 (cctScComm)

15 (cctColSize)

16(cctIndivDataTurnover)

17(cctReportGenerator)

18(cctIntrastatParameter)

19(cctInventoryFilter)

20(cctFilterList)

21(cctParameterFilter)

22(cctReleaseByDate)

23(cctFiBuParameter)

24(cctSqlSelection)

25(cctAgentArticleFilter)

26(cctSachkonto)

27(cctPaymentMethod)

28(cctOtherWinPosition)

Undefinierte Bereich

Druckerzuweisungen

CRM-Aktionen

Individual Menüs

Browser Definitionen

Masken Definitionen

Merkmalstabellen

Versandsteuerung

Beleg Layouts

Textbausteine

Tabellen- und Feldrechte

Memo Ansichten

Allgemeine- und Lokale Parameter

Codeblock Programme

Außendienst Parameter

Größen/Farb Raster

Kum.Stat. Indiv. Betrachtung

Reportgenerator

Intrastat Parameter

Inventur Filter

Filter Liste

Parameter Filter

Automatische Liefereinstellungen

FiBu Parameter

SQL-Selektionen

Vertreter Absatzplanung Artikelfilter

FiBu Sachkonten

FiBu Zahlungsarten

Sonstige WinPositionen

CbClearExport

Zu exportierenden Bereiche zurück setzen

CbExportCodeblock

Exportiert alle Codeblöcke der angegebenen Bereiche aus dem be des angegebenen Datadictionarys in den angegebenen CbFilePath

Verfügbare Ereignisse

CbOnError

Event der beim auftreten eines Fehler ausgelöst wird

aSender:O

Informations-Objekt über den auf getretenen Fehler (TBeCollectorErrorItem)

Erklärungen zu den Teilbereichen

Druckerzuweisungen

Hauptordner (Druckerzuweisungen)

Codeblock (DabR30:EMailCB)

CRM-Aktionen

Hauptordner (CRM-Aktionen)

Unterordner (Dab075:NAME z.B.: TestAktion)

Codeblöcke:

Update-Block (Dab075:UPD_BLOCK)

Platzhalter (Dab075:FELDER)

Individual Menüs

Hauptordner (Individual-Menus)

Codeblöcke:

Codeblockinformationen (DabFIL:FELD wenn DabFIL:DATEI = 523)

Browser Definitionen

Hauptordner (Browserdefinitionen)

Codeblöcke:

Codeblockinformationen (DabBro:DATA)

Masken Definitionen

Hauptordner (Maskendefinitionen)

Codeblöcke:

Neue Masken (DabFRM:DATA)

Alte Masken (DabFRM:DATA_OLD)

Merkmalstabellen

Hauptordner (Merkmalstabellen)

Unterordner (DabMTA:BEZ z.B.: Artikeltypen)

Codeblöcke:

Default-Änderungsrecht (DabMTA:CHG_DEF)

User-Änderungsrecht (DabMTA:CHG_USR)

Anzeigewert-Funktion (DabMTA:DISPVALUE)

Default-Filter (DabMTA:FILT_DEF)

User-Filter (DabMTA:FILT_USR)

Default nach DS-Wechsel (DabMTA:DSREF_DEF)

User nach DS-Wechsel (DabMTA:DSREF_USR)

Dynamische Datenquelle (DabMTA:TAB_DEF)

Versandsteuerung

Hauptordner (Versandsteuerungen)

Unterordner (Versenderstamm = Dab760:NAME)

Unterordner (Versandarten = Dab765:VERSANDART)

Codeblöcke:

Kostenberechnung (Dab765:KOSTENCALC)

Gewichtsberechnung (Dab765:GEWICHTCAL)

Sendung Schließen (Dab765:SEND_SCHL)

Export Block (Dab765:INTERFINFO)

Beleg Layouts

Hauptordner (Beleg Layouts)

Unterordner (DabR10:BEZ z.B.: Sammelrechnung)

Codeblöcke:

Codeblockinformationen (DabR10:REPORT_ID)

Textbausteine

Hauptordner (Textbausteine)

Codeblöcke:

Codeblock Dab350:CODEBLOCK

Tabellen- und Feldrechte

Hauptordner (Tabellenrechte)

Unterordner (z.B.: '1 - Kunden-Stamm (DAB000)')

Unterordner (Tabellenrechte)

Codeblöcke:

Rechte Lesen

Rechte Ändern

Rechte Löschen

Rechte Neu

Rechte Validieren

Update Neu

Update Update

Update Löschen

Unterordner (Feldrechte)

Unterordner (Feldname z.B.: KdNr)

Codeblöcke_

User-Rechte

User-Rechte Lesen

User-Rechte Ändern

User-Rechte Validierung

User-Rechte Masken Validierung

User-Rechte Update

User-Rechte Neu

Default-Rechte

Default-Rechte Lesen

Default-Rechte Ändern

Default-Rechte Validierung

Default-Rechte Masken Validierung

Default-Rechte Update

Default-Rechte Neu

Picture Mask

Unterordner (Optionen)

Codeblöcke:

Index-Scope von

Index-Scope bis

Anzeigewert-Funktion

Rückgabewert- / Combo-Lookup-Felder-Funktion

Suchwert-Funktion

Memo Ansichten

Hauptordner (Memo Ansichten)

Codeblöcke:

Codeblockinformationen (DabSET)

Allgemeine- und Lokale Parameter

Hauptordner1 (Allgemeine Parameter)

Unterordner (DabPAR:USER z.B.: 0. Standort 1)

Unterordner1 (Abteilungen)

Unterordner (DabPAR:USER z.B.: "1. Verkauf" )

Unterordner1 (Lagerverwaltung)

Unterordner1 (Seite 1a)

Codeblöcke:

Formel Verfalls.Dat. automat. (DabPAR:VERF_AUTO)

Formel Serien/Chargen# Prüfung (DabPAR:SNUM_PRUEF)

Bei Umlagerung ein Lag.Kartei-Eintrag je Kommission erzeugen (DabPAR:UML_EINZEL)

Unterordner2 (Seite 2)

Codeblöcke:

Verd.Bedarf Ber.Formel 1 (DabPAR:VERD_BEDF1)

Verd.Bedarf Ber.Formel 2 (DabPAR:VERD_BEDF2)

Verd.Bedarf Ber.Formel 3 (DabPAR:VERD_BEDF3)

Verd.Bedarf Ber.Formel 4 (DabPAR:VERD_BEDF4)

Verd.Bedarf Ber.Formel 5 (DabPAR:VERD_BEDF5)

Unterordner2 (Kunde-Vertrieb)

Unterordner1 (Seite 2)

Codeblöcke:

Formel Rabatt-Sperre (DabPAR:RAB_SPERR)

Formel Auftrags-Sperre (DabPAR:AUF_SPERR)

Formel Liefer-Sperre (DabPAR:LIEF_SPERR)

Differenz-Code (DabPAR:DIFF_CODE)

Anz.Tage Prioriberechn. (DabPAR:PRIOR_TAGE)

Anz. Tage Prod.Reserv. berücks. (DabPAR:RUEPR_TAGE)

Unterordner2 (Absatzplanung)

Codeblöcke:

Formel: Anzahl Wochen, Verrechnung in die Vergangenheit (DabPAR:FC_VERRUE)

Formel: Anzahl Wochen, Verrechnung in der Zukunft (DabPAR:FC_VERVOR)

Formel: Absatzplanung wirksam ab Woche (DabPAR:FC_PLANAB)

Unterordner3 (Einkauf-Wareneingang)

Codeblöcke:

Prüfformel WE-Lager/Lieferant (DabPAR:LAG_WEFORM)

Horizont in Tagen für Bestellung Verfügbarkeit=sofort (DabPAR:EKPLHORZSO)

Vorplanzeit +1 Woche für -2 Artikel Einkauf (DabPAR:EKVPZMIN2)

Unterordner4 (Fertigung)

Unterordner1 (Seite 1)

Codeblöcke:

Formel Verfalls.Dat. Fertigung (DabPAR:VERF_PROD)

Unterordner2 = (Planungsparameter)

Codeblöcke:

Horizont in Tagen für Prod.Auftr. Verfügbarkeit=sofort = (DabPAR:PRPLHORZSO)

Vorplanzeit +1 Woche für -2 Artikel Fertigung = (DabPAR:PRVPZMIN2)

Unterordner5 (Kommunikation)

Unterordner1 (Datensicherung)

Codeblöcke:

"Sicherung wenn zutreffend (Codeblock-Ereignis = True)" (DabPAR:SIFUNK)

Unterordner2 (Finanzbuchhaltung)

Codeblöcke:

Erlöskonto-Formel -> FiBu = (DabPAR:ERLKTO)

Kostenstellen-Formel Auftrag = (DabPAR:AUFPKST_F)

Kostenstellen-Formel Rechnung = (DabPAR:ERLKST)

WE-Kostenst.Formel Re.Kontroll = (DabPAR:WE_KST)

WE-Konto Formel Rechn.Kontroll = (DabPAR:WE_KTO)

Unterordner2 (Codeblöcke)

(Selben Unterordner wie die Abteilungen)

Hauptordner2 (Lokale Parameter)

Unterordner (DabFIL:NAME wenn DabFIL:DATEI = 999 z.B.: Global-Passwort-User (Nr.000))

Unterordner1 (Lager-Kunden)

Codeblöcke:

Artikel-Filter Schnellsuche (DabPAL:M_ARTFILT)

Anzeige-Funktion Stücklisten-Bezeichnung (DabPAL:M_STLTEXT)

Unterordner2 =(Auftragsbearbeitung)

Unterordner1 (Seite 1)

Codeblöcke:

Pos.Filter für Entn.Sch.-Druck (DabPAL:M_ENTFILT)

Pos.Filter für Lfs-Druck (DabPAL:M_LFSFILT)

Unterordner2 (Seite 2)

Codeblöcke:

Formel "Set-Stückliste ändern" (DabPAL:M_SETAEND)

Unterordner3 (Fertigung-BDE)

Codeblöcke:

BDE Formel: %Mengen-Überbuchen (DabPAL:M_BDEMPROZ)

Unterordner4 (Wareneingang-Quali)

Codeblöcke:

Formel: Menge/VE, VE berechnen (DabPAL:M_QSMENGVE)

Bedingung für autom. Buchung (DabPAL:M_QSWEBFOR)

WE Formel: Anz. Art.Etiketten (DabPAL:M_QSARTETI)

Formel: WePosNr wird Chargen# (DabPAL:M_QSWEKOMM)

Codeblock Programme

Hauptordner (Codeblock Programme)

Codeblöcke:

Codeblock (DabPRG:PROGRAMM)

Außendienst Parameter

Hauptordner (Außendienst Parameter)

Unterordner (DabFIA:NAME z.B.: "Benutzer 2 - Außendienst (66)")

Codeblöcke:

Codeblockinformationen (DabFIA.FILTER_IND)

Größen/Farb Raster

Hauptordner = Größen- und Farbraster

Codeblöcke:

Codeblockinformationen (WinPosition ID = 'COLSIGR')

Zellen-Block

Art.Bez.-Block

Info-Block

Kum.Stat. Indiv. Betrachtung

Hauptordner (Individuelle Codeblöcke für Umsätze)

Unterordner (DabITO:BEZ)

Codeblöcke:

Anzeige-Filter (DabITO:DISPBLOCK)

Anzeigewert-Funktion (DabITO:RUNBLOCK)

Prüf-Funktion 1 - 20 (DabITO:PFUNC0 - DabITO:PFUNC19)

Reportgenerator

Hauptordner (Reportgenerator)

Unterordner1 (Selektion)

Codeblöcke

Kopfzeile 1 (Dab420:HEADL)

Kopfzeile 2 (Dab420:HEADL1)

Select P (Dab420:SELEKT)

Select S (Dab420:SELEKT1)

Obergrenze (Dab420:SCOPETOP)

Untergrenze (Dab420:SCOPEBOT)

Unterordner1 (Sotierschlüssel)

Codeblöcke:

Sortierschlüssel 1 - 5 (Dab420:TKOPF1 - Dab420:TKOPF5)

Unterordner2 (Drucktext)

Codeblöcke

Drucktext 1 - 5 (Dab420:UK1 - Dab420:UK5)

Unterordner2 (Parameter)

Codeblöcke:

Prüf-Funktion 1 - 20 (Dab420:PF0 - Dab420:PF19)

Intrastat Parameter

Hauptordner (Reportgenerator)

Codeblöcke:

Einfuhr (individuell) (Dia030:BLOCK_E)

Ausfuhr (individuell) (Dia030:BLOCK_V)

Inventur Filter

Hauptordner (Inventur Filter)

Unterordner (DabPAR:USER z.B.: Standort 1)

Codeblöcke:

Codeblockinformationen (WinPosition ID = 'INV_' + DabPAR:Standort z.B.: 'INV_001')

Ausschluß - Bedingung

Filter Liste

Hauptordner (Filter Listen)

Codeblöcke:

Codeblockinformationen (DabFIL:WIN_DATA wenn DabFIL:DATEI = 529)

Unterordner1 = "Lagerverwaltung" (DabFIL:FELD = IDFEART)

Unterordner2 = "Kundenverwaltung" (DabFIL:FELD = IDFBECU oder IDFECLT)

Unterordner3 = "Auftragsbearbeitung Kunde" (DabFIL:FELD = IDFMPRO)

Unterordner4 = "Auftragsbearbeitung Lieferanten" (DabFIL:FELD = IDFSPRO)

Unterordner5 = "Basis Lieferantenverwaltung" (DabFIL:FELD = IDFBESP)

Parameter Filter

Hauptordner (Parameter Filter)

Unterordner (DabFIL:NAME wenn DabFIL:DATEI = 999 z.B.: Global-Passwort-User (Nr.000))

Unterordner (Abteilung 0 - 9)

Codeblöcke:

Codeblockinformationen (DabFIL:WIN_DATA)

Automatische Liefereinstellungen

Hauptordner (Automatische Liefereinstellungen)

Codeblöcke:

Codeblockinformationen (WinPosition)

Unterordner1 (Kunde)

Automatische Lieferfreigabe (ID = AUTOOR2)

Zusatzauswahl Kopf

Zusatzauswahl Position

Automatische Lieferreservierung (ID = AUTOOR4)

Zusatzauswahl Kopf

Zusatzauswahl Position

Unterordner2 (Zulieferer)

Automatische Lieferfreigabe (ID = AUTOOR1)

Zusatzauswahl Kopf

Zusatzauswahl Position

Automatische Lieferreservierung (ID = AUTOOR3)

Zusatzauswahl Kopf

Zusatzauswahl Position

FiBu Parameter

Hauptordner (FiBu Parameter)

Unterordner (DfPAR:FIRMA)

Codeblöcke:

Ford-Formel (DfPAR:FKFORMEL)

Verb-Formel (DfPAR:VKFORMEL)

SQL-Selektionen

Hauptordner (SQL-Selektion)

Unterordner (DabFIL:NAME wenn DabFIL:DATEI = 526)

Codeblöcke:

SQL-Selektion (DabFIL:WIN_DATA)

Vertrerer Absatzplanung Artikelfilter

Hauptordner (Vertreterverwaltung)

Unterordner (Dab062:NAME1)

Codeblöcke:

Absatzplanung Artikelfilter (Dab062:FORE_FILT)

FiBu Sachkonten

Hauptordner (Sachkonten)

Unterordner (DfPAR:FIRMA)

Unterordner (Df010:TEXT)

Codeblöcke:

Buchungstext-Funkt. Bankauszg. (Df010:BAD_BUTEXT)

Belegnr.-Funktion Bankauszug (Df010:BAD_BELNR)

FiBu Zahlungsarten

Hauptordner (Zahlungsarten)

Unterordner (DfPAR:FIRMA)

Unterordner (DfZAA:NAME)

Codeblöcke:

OP-Filter (DfZAA:OPFILTER)

Konto-Filter (DfZAA:KTOFILTER)

Sonstige WinPositionen

Hauptordner (Sonstige WinPositionen)

Unterordner (Preisänderung)

Codeblöcke:

Codeblockinformationen (WinPosition ID = 'GP_CHAN')

Zusatzselektion für Artikel

Beispiel

//##############################################################################

//##############################################################################

// CodeblockCollector

// Beschreibung: Programm zum Exportieren von allen in be verfügbaren

//               Codeblöcken

//##############################################################################

//##############################################################################

|

   oForm, oBtnAbort, oBtnChangePath, oBtnDabPARPath, oBtnDDPath, oBtnExport,

   oBtnSelectAll, oBtnDeselectAll, oCkBoxAttrTable, oCkBoxAttrDefault,

   oCkBoxAttrUser, oCkBoxCodeblockProgram, oCkBoxColSize, oCkBoxCRMAction,

   oCkBoxDocLayout, oCkBoxIndividualMenu, oCkBoxMaskDef, oCkBoxMemoView,

   oCkBoxParameter, oCkBoxPrintManager, oCkBoxDefaultRights, oCkBoxUserRights,

   oCkBoxScComm, oCkBoxClearPath, oCkBoxRights, oEdtBrowserDef,

   oCkBoxShippingControl, oCkBoxTextModule, oCkBoxIndiDatTurn, oCkBoxRepGen,

   oCkBoxIntrastatParam, oCkBoxInvFilter, oCkBoxFilterList, oCkBoxOtherWinPos,

   oCkBoxParamFilter, oCkBoxReleaseByDate, oCkBoxFiBuParam, oCkBoxSqlSelect,

   oCkBoxAgentArtFilter, oCkBoxSachkonten, oCkPaymentMethod, oEdtDabPARPath,

   oEdtDataBasePath, oEdtExportPath, oGrpBoxDataBase, oGrpBoxExportPath,

   oGrpBoxMainControl, oGrpBoxRegExpr, oLblDataBasePath, oLblDabPARPath,

   oPanelBottom, oPanelDDBtnPath, oPanelDDEdtPath, oPanelLeftSide, oPanelOptions,

   oPanelPathOptions, oPanelBrowserDef, oPanelRightSide, oPanelRights,

   oPanelAttr, oCkBoxBrowserDef, oCkBoxBrowserDefDefault, oCkBoxArr,

   oComboCkBoxBrowserDef, oPanelMainOptions, lCheckBoxClicked,

   oEdtPathIncludeRegEx, oEdtPathExcludeRegEx, oEdtCodeIncludeRegEx,

   oEdtCodeExcludeRegEx, oPanelPathIncludeRegEx, oPanelPathExcludeRegEx,

   oPanelCodeIncludeRegEx, oPanelCodeExcludeRegEx, oLblPathIncludeRegEx,

   oLblPathExcludeRegEx, oLblCodeIncludeRegEx, oLblCodeExcludeRegEx,

   cErrorLog, oPanelExportPath, lShowInstantErrorMessage

|

// Diesen Wert auf True setzen um Fehler während der Laufzeit in der Console angezeigt zu bekommen

// ACHTUNG! dies kann ser performancelastig sein

lShowInstantErrorMessage := False,

//******************************************************************************

// Setzt den Pfad auf die selbe Ordnerstruktur wie die ausgewählte Datei

//******************************************************************************

function oBtnChangePathClick( Sender )

| oDlgFolderPath, cPath |

   Result := '',

   if Sender = oBtnDDPath or Sender = oBtnDabPARPath then

      oDlgFolderPath := OpenDlg('Export Pfad', 'DD/DabPAR|*.ADD; DABPAR.ADT; DABPAR.DBF', oEdtDataBasePath.Text,'a'),

   else

      oDlgFolderPath := OpenDlg('Export Pfad', 'DD/DabPAR|*.ADD; DABPAR.ADT; DABPAR.DBF', oEdtExportPath.Text,'a'),

   endif,

   StartSeq

      oDlgFolderPath.Active := true,

      if oDlgFolderPath.Selected then

         cPath := SubStr(oDlgFolderPath.FileName, 0, RAt('\', oDlgFolderPath.FileName)),

         if Sender = oBtnChangePath then

            oEdtExportPath.Text := cPath,

         endif,

         if Sender = oBtnDDPath then

            oEdtDataBasePath.Text := cPath,

            if oEdtDataBasePath.Text <> mbedefault then

               oComboCkBoxBrowserDef.Visible := False,

               oEdtBrowserDef.Visible        := True,

               oEdtBrowserDef.Align          := alBottom,

               oEdtBrowserDef.Align          := alTop,

            else

               oComboCkBoxBrowserDef.Visible := True,

               oEdtBrowserDef.Visible        := False,

            endif,

         endif,

         if Sender = oBtnDabPARPath then

            oEdtDabPARPath.Text := cPath,

         endif,

      endif,

   Always

      DestroyObject(oDlgFolderPath),

   StopSeq,

end,

//******************************************************************************

// Gibt anhand des Collector-Typen den Berreich in be den er represäntiert zurück

//******************************************************************************

function BeSectionFromCollectorType(nExportType)

   Result := '',

   case nExportType

      of 0 ::  Result := 'Unbekannt',

      of 1 ::  Result := 'Druckzuweisungen',

      of 2 ::  Result := 'CRM-Aktionen',

      of 3 ::  Result := 'Individual Menüs',

      of 4 ::  Result := 'Browser Definitionen',

      of 5 ::  Result := 'Masken Definitionen',

      of 6 ::  Result := 'Merkmalstabellen',

      of 7 ::  Result := 'Versand Steuerungen',

      of 8 ::  Result := 'Beleg Layouts',

      of 9 ::  Result := 'Text Bausteine',

      of 10 :: Result := 'Tabellen- und Feld Rechte',

      of 11 :: Result := 'Memo Ansichten',

      of 12 :: Result := 'Allgemeine- und Lokale Parameter',

      of 13 :: Result := 'Codeblock Programme',

      of 14 :: Result := 'Außendienst Parameter',

      of 15 :: Result := 'Größen und Farb Raster',

      of 16 :: Result := 'Kum.Stat. Indiv.Betrachtungen',

      of 17 :: Result := 'Reportgenerator',

      of 18 :: Result := 'Intrastat Parameter',

      of 19 :: Result := 'Inventur Filter',

      of 20 :: Result := 'Filter Liste',

      of 21 :: Result := 'Parameter Filter',

      of 22 :: Result := 'Automatische Liefereinstellungen',

      of 23 :: Result := 'FiBu Parameter',

      of 24 :: Result := 'SQL-Selektion',

      of 25 :: Result := 'Vertreterverwaltung Absatzplanung Artikelfilter',

      of 26 :: Result := 'FiBu Sachkonten',

      of 27 :: Result := 'FiBuZahlungsarten',

      of 28 :: Result := 'Sonstige WinPositionen',

   endcase,

end,

//******************************************************************************

// Gibt die Export art zurück die eine Checkbox represäntiert

//******************************************************************************

function CheckBoxToExportType(oCkBox)

   Result := 0,

   case oCkBox

      of oCkBoxPrintManager     :: Result := 1,   // Druckzuweisungen

      of oCkBoxCRMAction        :: Result := 2,   // CRM-Aktionen

      of oCkBoxIndividualMenu   :: Result := 3,   // Individual Menüs

//      of oCkBoxBrowserDef       :: Result := 4,   // Browser Definitionen

      of oCkBoxMaskDef          :: Result := 5,   // Masken Definitionen

//      of oCkBoxAttrTable        :: Result := 6,   // Merkmalstabellen

      of oCkBoxShippingControl  :: Result := 7,   // Versand Steuerungen

      of oCkBoxDocLayout        :: Result := 8,   // Beleg Layouts

      of oCkBoxTextModule       :: Result := 9,   // Text Bausteine

//      of oCkBoxDefaultRights    :: Result := 10,  // Tabellen- und Feld Rechte

      of oCkBoxMemoView         :: Result := 11,  // Memo Ansichten

      of oCkBoxParameter        :: Result := 12,  // Allgemeine- und Lokale Parameter

      of oCkBoxCodeblockProgram :: Result := 13,  // Codeblock Programme

      of oCkBoxScComm           :: Result := 14,  // Außendienst Parameter

      of oCkBoxColSize          :: Result := 15,  // Größen und Farb Raster

      of oCkBoxIndiDatTurn      :: Result := 16,  // Kum.Stat. Indiv.Betrachtungen

      of oCkBoxRepGen           :: Result := 17,  // Reportgenerator

      of oCkBoxIntrastatParam   :: Result := 18,  // Intrastat Parameter

      of oCkBoxInvFilter        :: Result := 19,  // Inventur Filter

      of oCkBoxFilterList       :: Result := 20,  // Filter Liste

      of oCkBoxParamFilter      :: Result := 21,  // Parameter Filter

      of oCkBoxReleaseByDate    :: Result := 22,  // Automatische Liefereinstellungen

      of oCkBoxFiBuParam        :: Result := 23,  // FiBu Parameter

      of oCkBoxSqlSelect        :: Result := 24,  // SQL-Selektion

      of oCkBoxAgentArtFilter   :: Result := 25,  // Vertreterverwaltung Absatzplanung Artikelfilter

      of oCkBoxSachkonten       :: Result := 26,  // FiBu Sachkonten

      of oCkPaymentMethod       :: Result := 27,  // FiBuZahlungsarten

      of oCkBoxOtherWinPos      :: Result := 28,  // Sonstige WinPositionen

   endcase,

end,

//******************************************************************************

// Löscht alle Leeren Unterordner des übergebenen Pfades

//******************************************************************************

function myRemoveDir(cDir)

|aDirArray, i|

   if right(alltrim(cDir),1) <> '\' then

       cDir += '\',

   endif,

   aDirArray := DirArray(cDir),

   // Rekrusiver aufruf für jeden gefundenen Unterordner

   for i:=3 to alen(aDirArray) do

      myRemoveDir(cDir + aDirArray[i, 1]),

      RemoveDir(cDir + aDirArray[i, 1]),

   next,

end,

//******************************************************************************

// Fehlerbehandlung für den CodeblockCollectors

//******************************************************************************

function DoError(Sender)

| cErrorText |

   // Fehlernachricht erstellen

   Sender.CbRaiseError := False, // Fehler ignorieren, da ein Log geschriebenwird

   cErrorText          := 'ErrorType:     ' + Str(Sender.CbErrorType) + ' (' + BeSectionFromCollectorType(Sender.CbErrorType) + ')' + crlf,

   cErrorText          += 'InternalError: ' + iif(Sender.CbIsInternalError, 'True', 'False') + crlf,

   cErrorText          += 'ErrorMessage:  ' + crlf + Sender.CbErrorMessage + crlf,

   cErrorText          += '---------------------------------------------------' + crlf,

   // Sofortnachricht in der Cb-Console ausgeben

   if lShowInstantErrorMessage then

      WriteLn(cErrorText),

   endif,

   ProcessMsg(),

   // ErrorLog Schreiben

   cErrorLog += cErrorText,

end,

//******************************************************************************

// Führt die Exportierung für alle ausgewählten Checkboxen aus

//******************************************************************************

function oBtnExportClick( Sender )

| oExporter, i, oElement, aDir, aDirArr |

   Result := '',

   SetCursor(crHourGlass),

   oExporter := CreateObject('TBeCbCodeblockCollector'),

   AssignEvent(oExporter, 'CbOnError', 'DoError'),

   StartSeq

      oExporter.CbFilePath := oEdtExportPath.Text,

      // Alle selektierten Codeblöcke durchlaufen

      foreach oElement in oCkBoxArr do

         if oElement.Checked then

            oExporter.CbAddExportType(CheckBoxToExportType(oElement)),

         endif,

      next,

      // Browserdefinitionen mit Optionen hinzufügen

      if oCkBoxBrowserDef.Checked then

         if oComboCkBoxBrowserDef.Visible then

            oExporter.CbAddExportTypeWithOptions(4, {oCkBoxBrowserDefDefault.Checked, oComboCkBoxBrowserDef.Text}),

         else

            oExporter.CbAddExportTypeWithOptions(4, {oCkBoxBrowserDefDefault.Checked, oEdtBrowserDef.Text}),

         endif,

      endif,

      // Tabellen- und Feldrechte mit Optionen hinzufügen

      if oCkBoxRights.Checked then

         oExporter.CbAddExportTypeWithOptions(10, {oCkBoxDefaultRights.Checked, oCkBoxUserRights.Checked}),

      endif,

      // Merkmalstabellen mit Optionen hinzufügen

      if oCkBoxAttrTable.Checked then

         oExporter.CbAddExportTypeWithOptions(6, {oCkBoxAttrDefault.Checked, oCkBoxAttrUser.Checked}),

      endif,

      if oCkBoxClearPath.Checked then

         StartSeq

            // löscht alle .DWP (Codeblock) dateien im angegebenen Pfad und in den Unterordnern

            aDir := PathSeek({'*.DWP'}, oEdtExportPath.Text),

            aDirArr := DirArray(oEdtExportPath.Text),

            for i := 1 to aLen(aDir) do

               DeleteFile(aDir[i]),

            next,

            myRemoveDir(oEdtExportPath.Text),

            RemoveDir(oEdtExportPath.Text),

         OnError

            // Fängt den Fehler ab der ensteht wenn der Ordner nicht existiert

         StopSeq

      endif,

      // Übergabe des DD- und des DabPar Pfades

      oExporter.CbDataBasePath := oEdtDataBasePath.Text,

      oExporter.CbDabPARPath   := oEdtDabPARPath.Text,

      // Übergabe der verschiedenen Regulären Ausdrücke

      oExporter.CbPathIncludeRegEx := oEdtPathIncludeRegEx.Text,

      oExporter.CbPathExcludeRegEx := oEdtPathExcludeRegEx.Text,

      oExporter.CbCodeIncludeRegEx := oEdtCodeIncludeRegEx.Text,

      oExporter.CbCodeExcludeRegEx := oEdtCodeExcludeRegEx.Text,

      // ProgressBar aktivieren

      oExporter.CbShowProgressBar := True,

      // Export der Codeblöcke

      WriteLn(now()),

      oExporter.CbExportCodeblock(),

   Always

      DestroyObject(oExporter),

      SetCursor(crDefault),

      WriteLn(now()),

      WriteLn('----------'),

      // Falls vorhanden den ErrorLog anzeigen

      if cErrorLog <> '' then

         ShowErrorLog('TBeCbCodeblockCollector', cErrorLog),

         cErrorLog := '',

      else

         ShowMessage('Export ohne Fehler abgeschlossen'),

      endif,

   StopSeq,

end,

//******************************************************************************

// Schliest das Programm

//******************************************************************************

function oBtnCancelClick(Sender)

   Result := '',

   ModalResult(oForm, mrCancel),

end,

//******************************************************************************

// Steuert die jeweiligen CheckBox Click Events

//******************************************************************************

function DoCheckBoxClicked(Sender)

| oElement |

   if not lCheckBoxClicked then

      lCheckBoxClicked := True,

      //************************************************************************

      // Hauptcheckbox der Merkmalstabellen steuert die Checkboxen für Optionen

      if Sender = oCkBoxAttrTable then

         oCkBoxAttrDefault.Enabled := oCkBoxAttrTable.Checked,

         oCkBoxAttrUser.Enabled    := oCkBoxAttrTable.Checked,

      endif,

      //************************************************************************

      // Hauptcheckbox der Tabellenrechte steuert die Checkboxen für Optionen

      if Sender = oCkBoxRights then

         oCkBoxDefaultRights.Enabled := oCkBoxRights.Checked,

         oCkBoxUserRights.Enabled    := oCkBoxRights.Checked,

      endif,

      //************************************************************************

      // Hauptcheckbox der Browserdefinitionen

      if Sender = oCkBoxBrowserDef then

         oComboCkBoxBrowserDef.Enabled   := oCkBoxBrowserDef.Checked,

         oEdtBrowserDef.Enabled          := oCkBoxBrowserDef.Checked,

         oCkBoxBrowserDefDefault.Enabled := oCkBoxBrowserDef.Checked,

      endif,

      lCheckBoxClicked := False,

   endif,

end,

//******************************************************************************

// Steuert die Selektions-Buttons

//******************************************************************************

function DoSelektionButtonClicked(Sender)

| lChecked, oElement |

   // Wenn oBtnSelectAll gerdückt wird, alle selektieren sonst alle deselektieren

   lChecked := Sender = oBtnSelectAll,

   // CheckBoxClicked Flag setzen um keine event-sprünge zu verursachen

   lCheckBoxClicked := True,

   // Alle selektierten Codeblöcke durchlaufen

   foreach oElement in oCkBoxArr do

      oElement.Checked := lChecked,

   next,

   oCkBoxAttrDefault.Enabled := oCkBoxAttrTable.Checked,

   oCkBoxAttrUser.Enabled    := oCkBoxAttrTable.Checked,

   oCkBoxDefaultRights.Enabled := oCkBoxRights.Checked,

   oCkBoxUserRights.Enabled    := oCkBoxRights.Checked,

   oComboCkBoxBrowserDef.Enabled   := oCkBoxBrowserDef.Checked,

   oEdtBrowserDef.Enabled          := oCkBoxBrowserDef.Checked,

   oCkBoxBrowserDefDefault.Enabled := oCkBoxBrowserDef.Checked,

   lCheckBoxClicked := False,

   // Setzt den Filter für Browserdefinitionen auf Alle User

   oEdtBrowserDef.Text := IIf(lChecked, '0', ''),

   IIf(lChecked, oComboCkBoxBrowserDef.CBCheckAllItems, oComboCkBoxBrowserDef.CBUnCheckAllItems),

end,

//******************************************************************************

// Setzt die Margins des Übergebenen Objects auf die Übergebenen werte

//******************************************************************************

function SetAlignMargins(oComponent, nAlignTyp, nBottom, nLeft, nRight, nTop)

   oComponent.Align            := nAlignTyp,

   oComponent.AlignWithMargins := true,

   oComponent.Margins.Bottom   := nBottom,

   oComponent.Margins.Left     := nLeft,

   oComponent.Margins.Right    := nRight,

   oComponent.Margins.Top      := nTop,

end,

//******************************************************************************

// Erstellt eine Checkbox der Codeblock Arten

//******************************************************************************

function MyCreateObject(cClass, cName, cCaption, oParent, nTabOrder, nAlignType, nBottom, nLeft, nRight, nTop)

   Result          := nil,

   Result          := CreateObject(cClass, cName, oForm, oParent),

   Result.Caption  := cCaption,

   Result.TabOrder := nTabOrder,

   SetAlignMargins(Result, nAlignType, nBottom, nLeft, nRight, nTop),

end,

//******************************************************************************

// Setzt die Margins des Übergebenen Objects auf die Übergebenen werte

//******************************************************************************

function CreateForm()

   // Formular

   oForm           := CreateObject('TFormEx', 'FormtCodeblockExport'),

   oForm.OrigCapt  := 'Codeblock Export',

   oForm.Font.Name := 'Segoe UI',

   oForm.Height    := 560,

   oForm.Width     := 850,

   oForm.Position  := poScreenCenter,

   // Haupt-Panel zum halten aller Grundeinstellungen für den Export

   oPanelMainOptions            := MyCreateObject('TPanel', 'PanelMainOptions', '', oForm, 0, alClient, 0, 0, 0, 0),

   oPanelMainOptions.BevelOuter := bvNone,

   //***************************************************************************

   // GroupBox Export Pfad

   oGrpBoxExportPath        := MyCreateObject('TGroupBox', 'GrpBoxExportPath', 'Pfad für den Export', oPanelMainOptions, 0, alClient, 3, 3, 3, 3),

   oGrpBoxExportPath.Height := 187,

   // Panel für die Pfadoptionen

   oPanelPathOptions            := MyCreateObject('TPanel', 'PanelPathOptions', '', oGrpBoxExportPath, 1, alClient, 3, 3, 3, 0),

   oPanelPathOptions.Height     := 131,

   oPanelPathOptions.BevelOuter := bvNone,

   //***************************************************************************

   // GroupBox Reguläre ausdrücke

   oGrpBoxRegExpr        := MyCreateObject('TGroupBox', 'GrpBoxRegExpr', 'Reguläre ausdrücke', oPanelPathOptions, 0, alClient, 3, 3, 3, 0),

   //***************************************************************************

   // Panel für den RegEx der Im Code nicht vorkommen darf

   oPanelCodeExcludeRegEx            := MyCreateObject('TPanel', 'PanelCodeExcludeRegEx', '', oGrpBoxRegExpr., 4, alTop, 3, 3, 3, 0),

   oPanelCodeExcludeRegEx.Height     := 70,

   oPanelCodeExcludeRegEx.BevelOuter := bvNone,

   // Label für den RegEx der Im Code nicht vorkommen darf

   oLblCodeExcludeRegEx              := CreateObject('TLabel', 'LblCodeExcludeRegEx', oForm, oPanelCodeExcludeRegEx),

   oLblCodeExcludeRegEx.Caption      := 'Ausdruck der im Code nicht vorkommen darf:',

   SetAlignMargins(oLblCodeExcludeRegEx, alTop, 0, 3, 3, 3),

   // Edit für den RegEx der Im Code nicht vorkommen darf

   oEdtCodeExcludeRegEx              := CreateObject('TBeEdit', 'EdtCodeExcludeRegEx', oForm, oPanelCodeExcludeRegEx),

   oEdtCodeExcludeRegEx.Text         := '',

   oEdtCodeExcludeRegEx.WordWrap     := True,

   SetAlignMargins(oEdtCodeExcludeRegEx, alClient, 0, 0, 0, 0),

   //***************************************************************************

   // Panel für den RegEx der Im Code vorkommen muss

   oPanelCodeIncludeRegEx            := MyCreateObject('TPanel', 'PanelCodeIncludeRegEx', '', oGrpBoxRegExpr., 3, alTop, 3, 3, 3, 0),

   oPanelCodeIncludeRegEx.Height     := 70,

   oPanelCodeIncludeRegEx.BevelOuter := bvNone,

   // Label für den RegEx der Im Code vorkommen muss

   oLblCodeIncludeRegEx              := CreateObject('TLabel', 'LblCodeIncludeRegEx', oForm, oPanelCodeIncludeRegEx),

   oLblCodeIncludeRegEx.Caption      := 'Ausdruck der im Code vorkommen muss:',

   SetAlignMargins(oLblCodeIncludeRegEx, alTop, 0, 3, 3, 3),

   // Edit für den RegEx der Im Code vorkommen muss

   oEdtCodeIncludeRegEx              := CreateObject('TBeEdit', 'EdtCodeIncludeRegEx', oForm, oPanelCodeIncludeRegEx),

   oEdtCodeIncludeRegEx.Text         := '',

   oEdtCodeIncludeRegEx.WordWrap     := True,

   SetAlignMargins(oEdtCodeIncludeRegEx, alClient, 0, 0, 0, 0),

   //***************************************************************************

   // Panel für den RegEx der Im Pfad nicht vorkommen darf

   oPanelPathExcludeRegEx            := MyCreateObject('TPanel', 'PanelPathExcludeRegEx', '', oGrpBoxRegExpr., 2, alTop, 3, 3, 3, 0),

   oPanelPathExcludeRegEx.Height     := 70,

   oPanelPathExcludeRegEx.BevelOuter := bvNone,

   // Label für den RegEx der Im Pfad nicht vorkommen darf

   oLblPathExcludeRegEx              := CreateObject('TLabel', 'aLblPathExcludeRegEx', oForm, oPanelPathExcludeRegEx),

   oLblPathExcludeRegEx.Caption      := 'Ausdruck der im Pfad nicht vorkommen darf:',

   SetAlignMargins(oLblPathExcludeRegEx, alTop, 0, 3, 3, 3),

   // Edit für den RegEx der Im Pfad nicht vorkommen darf

   oEdtPathExcludeRegEx              := CreateObject('TBeEdit', 'EdtPathExcludeRegEx', oForm, oPanelPathExcludeRegEx),

   oEdtPathExcludeRegEx.Text         := '',

   oEdtPathExcludeRegEx.WordWrap     := True,

   SetAlignMargins(oEdtPathExcludeRegEx, alClient, 0, 0, 0, 0),

   //***************************************************************************

   // Panel für den RegEx der Im Pfad vorkommen muss

   oPanelPathIncludeRegEx            := MyCreateObject('TPanel', 'PanelPathIncludeRegEx', '', oGrpBoxRegExpr., 1, alTop, 3, 3, 3, 0),

   oPanelPathIncludeRegEx.Height     := 70,

   oPanelPathIncludeRegEx.BevelOuter := bvNone,

   // Label für den RegEx der Im Pfad vorkommen muss

   oLblPathIncludeRegEx              := CreateObject('TLabel', 'aLblPathIncludeRegEx', oForm, oPanelPathIncludeRegEx),

   oLblPathIncludeRegEx.Caption      := 'Ausdruck der im Pfad vorkommen muss:',

   SetAlignMargins(oLblPathIncludeRegEx, alTop, 0, 3, 3, 3),

   // Edit für den RegEx der Im Pfad vorkommen muss

   oEdtPathIncludeRegEx              := CreateObject('TBeEdit', 'EdtPathIncludeRegEx', oForm, oPanelPathIncludeRegEx),

   oEdtPathIncludeRegEx.Text         := '',

   oEdtPathIncludeRegEx.WordWrap     := True,

   SetAlignMargins(oEdtPathIncludeRegEx, alClient, 0, 0, 0, 0),

   // CheckBox zum leeren des zu Exportierenden Ordners

   oCkBoxClearPath       := MyCreateObject('TCheckBox', 'CheckBoxClearPath', 'Export Ordner leeren', oPanelPathOptions, 0, alTop, 3, 3, 3, 0),

   oCkBoxClearPath.Width := 130,

   //***************************************************************************

   // Panel für den Pfad indem die Codeblock hinein exportiert werden sollen

   oPanelExportPath            := MyCreateObject('TPanel', 'PanelExportPath', '', oGrpBoxExportPath, 0, alTop, 0, 0, 0, 0),

   oPanelExportPath.BevelOuter := bvNone,

   oPanelExportPath.Height     := 29,

   // Button Export Pfad über OpenDialog

   oBtnChangePath       := MyCreateObject('TBeBitBtn', 'BtnChangeExportPath', '...', oPanelExportPath, 0, alRight, 3, 0, 3, 3),

   oBtnChangePath.Width := 23,

   AssignEvent(oBtnChangePath, 'OnClick', 'oBtnChangePathClick'),

   // Edit Export Pfad

   oEdtExportPath          := CreateObject('TBeEdit', 'EdtExportPath', oForm, oPanelExportPath),

   oEdtExportPath.Text     := 'C:\be_Codeblock_Export\',

   SetAlignMargins(oEdtExportPath, alClient, 3, 5, 3, 4),

   oEdtExportPath.ReadOnly := true,

   //***************************************************************************

   // GroupBox Datenbestand und DabPAR Pfad

   oGrpBoxDataBase        := MyCreateObject('TGroupBox', 'GrpBoxDataBase', 'Pfad des Datenbestandes', oPanelMainOptions, 1, alBottom, 3, 3, 3, 3),

   oGrpBoxDataBase.Height := 101,

   // Panel für die Buttons zum ändern der DD und DabPAR pfade

   oPanelDDBtnPath            := MyCreateObject('TPanel', 'PanelDDBtnPath', '', oGrpBoxDataBase, 0, alRight, 0, 0, 0, 0),

   oPanelDDBtnPath.Width      := 26,

   oPanelDDBtnPath.BevelOuter := bvNone,

   // Panel für den Pfad des DataDictionarys und der DabPAR

   oPanelDDEdtPath            := MyCreateObject('TPanel', 'PanelDDEdtPath', '', oGrpBoxDataBase, 1, alClient, 0, 0, 0, 0),

   oPanelDDEdtPath.BevelOuter := bvNone,

   // Button Export Pfad über OpenDialog

   oBtnDDPath        := MyCreateObject('TBeBitBtn', 'BtnDDPath', '...', oPanelDDBtnPath, 0, alTop, 10, 0, 3, 18),

   oBtnDDPath.Height := 23,

   AssignEvent(oBtnDDPath, 'OnClick', 'oBtnChangePathClick'),

   // Button Export Pfad über OpenDialog

   oBtnDabPARPath        := MyCreateObject('TBeBitBtn', 'BtnDabPARPath', '...', oPanelDDBtnPath, 1, alBottom, 3, 0, 3, 0),

   oBtnDabPARPath.Height := 23,

   AssignEvent(oBtnDabPARPath, 'OnClick', 'oBtnChangePathClick'),

   oLblDataBasePath         := CreateObject('TLabel', 'LblDataBasePath', oForm, oPanelDDEdtPath),

   oLblDataBasePath.Caption := 'DataDictionary Ordner:',

   SetAlignMargins(oLblDataBasePath, alTop, 0, 3, 3, 3),

   // Edit für das Datadictionary (Den Datenbestand)

   oEdtDataBasePath          := CreateObject('TBeEdit', 'EdtDataBasePath', oForm, oPanelDDEdtPath),

   oEdtDataBasePath.Text     := mbedefault,

   SetAlignMargins(oEdtDataBasePath, alBottom, 3, 5, 3, 3),

   oEdtDataBasePath.Align    := alTop,

   oEdtDataBasePath.ReadOnly := true,

   // Edit für die DabPAR

   oEdtDabPARPath          := CreateObject('TBeEdit', 'EdtDabPARPath', oForm, oPanelDDEdtPath),

   oEdtDabPARPath.Text     := '',

   SetAlignMargins(oEdtDabPARPath, alBottom, 3, 5, 3, 0),

   oEdtDabPARPath.ReadOnly := true,

   oLblDabPARPath         := CreateObject('TLabel', 'LblDabPARPath', oForm, oPanelDDEdtPath),

   oLblDabPARPath.Caption := 'DabPAR Ordner:',

   SetAlignMargins(oLblDabPARPath, alBottom, 3, 3, 3, 0),

   //***************************************************************************

   // Panel für die Fußzeile

   oPanelBottom            := MyCreateObject('TPanel', 'PanelBottom', '', oForm, 2, alBottom, 3, 3, 3, 0),

   oPanelBottom.Height     := 25,

   oPanelBottom.BevelOuter := bvNone,

   // Button Export

   oBtnExport                        := MyCreateObject('TBeBitBtn', 'BtnExport', '

   oBtnExport.ImageIndex.IndexNormal := 49,

   oBtnExport.Width                  := 90,

   AssignEvent(oBtnExport, 'OnClick', 'oBtnExportClick'),

   // Button Abbruch

   oBtnAbort                        := MyCreateObject('TBeBitBtn', 'BtnAbort', 'A

   oBtnAbort.ImageIndex.IndexNormal := 8,

   oBtnAbort.Width                  := 90,

   AssignEvent(oBtnAbort, 'OnClick', 'oBtnCancelClick'),

   //***************************************************************************

   // GroupBox für die Optionen die Export einstellungen

   oGrpBoxMainControl       := MyCreateObject('TGroupBox', 'GrpBoxMainControl', 'Zu exportierende Codeblöcke', oForm, 1, alRight, 3, 3, 3, 3),

   oGrpBoxMainControl.Width := 400,

   //***************************************************************************

   // Panel für zusätliche Optionen

   oPanelOptions            := MyCreateObject('TPanel', 'PanelOptions', '', oGrpBoxMainControl, 1, alBottom, 3, 3, 3, 3),

   oPanelOptions.Height     := 25,

   oPanelOptions.BevelOuter := bvNone,

   // Button zum selektieren aller Export-Bereiche

   oBtnSelectAll                        := MyCreateObject('TBeBitBtn', 'BtnSelectAll', 'Alle selektieren', oPanelOptions, 1, alLeft, 0, 0, 3, 0),

   oBtnSelectAll.ImageIndex.IndexNormal := 189,

   oBtnSelectAll.Width                  := 116,

   AssignEvent(oBtnSelectAll, 'OnClick', 'DoSelektionButtonClicked'),

   // Button der alle Selektionen aufhebt

   oBtnDeselectAll                        := MyCreateObject('TBeBitBtn', 'BtnDeselectAll', 'Alle aufheben', oPanelOptions, 2, alLeft, 0, 0, 3, 0),

   oBtnDeselectAll.ImageIndex.IndexNormal := oBtnSelectAll.ImageIndex.IndexNormal + 1,

   oBtnDeselectAll.Width                  := 116,

   AssignEvent(oBtnDeselectAll, 'OnClick', 'DoSelektionButtonClicked'),

   //***************************************************************************

   // Panel linke Seite der Export Arten

   oPanelLeftSide := MyCreateObject('TPanel', 'PanelLeftSide', '', oGrpBoxMainControl, 0, alLeft, 0, 3, 3, 3),

   oPanelLeftSide.Width      := 150,

   oPanelLeftSide.BevelOuter := bvNone,

   // CheckBox Druckerzuweisungen

   oCkBoxPrintManager     := MyCreateObject('TCheckBox', 'CkBoxPrintManager', 'Druckerzuweisungen', oPanelLeftSide, 0, alTop, 3, 3, 3, 3),

   // CheckBox Individual Menüs

   oCkBoxIndividualMenu   := MyCreateObject('TCheckBox', 'CkBoxIndividualMenu', 'Individual-Menüs', oPanelLeftSide, 1, alTop, 3, 3, 3, 0),

   // CheckBox Maskendefinitionen

   oCkBoxMaskDef          := MyCreateObject('TCheckBox', 'CkBoxMaskDef', 'Maskendefinitionen', oPanelLeftSide, 2, alTop, 3, 3, 3, 0),

   // CheckBox Versandsteuerung

   oCkBoxShippingControl  := MyCreateObject('TCheckBox', 'CkBoxShippingControl', 'Versandsteuerung', oPanelLeftSide, 3, alTop, 3, 3, 3, 0),

   // CheckBox Textbausteine

   oCkBoxTextModule       := MyCreateObject('TCheckBox', 'CkBoxTextModule', 'Textbausteine', oPanelLeftSide, 4, alTop, 3, 3, 3, 0),

   // CheckBox Memo Ansichten

   oCkBoxMemoView         := MyCreateObject('TCheckBox', 'CkBoxMemoView', 'Memo Ansichten', oPanelLeftSide, 5, alTop, 3, 3, 3, 0),

   // CheckBox Codeblock Programme

   oCkBoxCodeblockProgram := MyCreateObject('TCheckBox', 'CkBoxCodeblockProgram', 'Codeblock Programme', oPanelLeftSide, 6, alTop, 3, 3, 3, 0),

   // CheckBox Größen- und Farbraster

   oCkBoxColSize          := MyCreateObject('TCheckBox', 'CkBoxColSize', 'Größen- und Farbraster', oPanelLeftSide, 7, alTop, 3, 3, 3, 0),

   // CheckBox Reportgenerator

   oCkBoxRepGen           := MyCreateObject('TCheckBox', 'CkBoxRepGen', 'Reportgenerator', oPanelLeftSide, 8, alTop, 3, 3, 3, 0),

   // CheckBox Reportgenerator

   oCkBoxInvFilter        := MyCreateObject('TCheckBox', 'CkBoxInvFilter', 'Inventur Filter', oPanelLeftSide, 9, alTop, 3, 3, 3, 0),

   // Automatische Liefereinstellungen

   oCkBoxReleaseByDate    := MyCreateObject('TCheckBox', 'CkBoxReleaseByDate', 'Automatische Liefereinst.', oPanelLeftSide, 10, alTop, 3, 3, 3, 0),

   // CheckBox SQL-Selektion

   oCkBoxSqlSelect        := MyCreateObject('TCheckBox', 'CkBoxSqlSelect', 'SQL-Selektion', oPanelLeftSide, 11, alTop, 3, 3, 3, 0),

   // CheckBox FiBu Sachkonten

   oCkBoxSachkonten       := MyCreateObject('TCheckBox', 'CkBoxSachkonten', 'Sachkonten', oPanelLeftSide, 12, alTop, 3, 3, 3, 0),

   // CheckBox FiBu Zahlungsarten

   oCkPaymentMethod       := MyCreateObject('TCheckBox', 'CkPaymentMethod', 'Zahlungsarten', oPanelLeftSide, 13, alTop, 3, 3, 3, 0),

   //***************************************************************************

   // Panel rechte Seite der Export Arten

   oPanelRightSide            := MyCreateObject('TPanel', 'PanelRightSide', '', oGrpBoxMainControl, 1, alRight, 0, 0, 3, 3),

   oPanelRightSide.Width      := 200,

   oPanelRightSide.BevelOuter := bvNone,

   // CheckBox CRM-Aktionen

   oCkBoxCRMAction := MyCreateObject('TCheckBox', 'CkBoxCRMAction', 'CRM-Aktionen', oPanelRightSide, 0, alTop, 3, 3, 3, 3),

   //***************************************************************************

   // Panel für die ComboCheckBox und das Label für die Browser Definitionen

   oPanelBrowserDef            := MyCreateObject('TPanel', 'PanelBrowserDef', '', oPanelRightSide, 1, alTop, 0, 0, 0, 0),

   oPanelBrowserDef.Height     := 67,

   oPanelBrowserDef.BevelOuter := bvNone,

   // Edit für den Userfilter auf anderen Datenbeständen

   oEdtBrowserDef          := CreateObject('TEdit', 'EdtBrowserDef', oForm, oPanelBrowserDef),

   oEdtBrowserDef.Text     := '',

   oEdtBrowserDef.Visible  := False,

   oEdtBrowserDef.TabOrder := 4,

   oEdtBrowserDef.Enabled  := False,

   SetAlignMargins(oEdtBrowserDef, alTop, 3, 18, 3, 0),

   // ComboCheckBox für Browserdefinitionen erstellen

   oComboCkBoxBrowserDef                := CreateObject('TBeAttribCheckCombo', 'ComboCkBoxBrowserDef', oForm, oPanelBrowserDef),

   oComboCkBoxBrowserDef.TabOrder       := 4,

   oComboCkBoxBrowserDef.ShowTextAsHint := True,

   oComboCkBoxBrowserDef.BeAttributeID  := -13,

   oComboCkBoxBrowserDef.Enabled        := False,

   SetAlignMargins(oComboCkBoxBrowserDef, alTop, 3, 18, 3, 0),

   // CheckBox für die Default Codeblöcke der Browserdefinitionen

   oCkBoxBrowserDefDefault         := MyCreateObject('TCheckBox', 'CkBoxBrowserDefDefault', 'Default Browser', oPanelBrowserDef, 2, alTop, 3, 18, 3, 0),

   oCkBoxBrowserDefDefault.Enabled := False,

   // Allgemein CheckBox für die Browserdefinitionen

   oCkBoxBrowserDef        := MyCreateObject('TCheckBox', 'CkBoxBrowserDef', 'Browserdefinitionen', oPanelBrowserDef, 3, alTop, 3, 3, 3, 0),

   AssignEvent(oCkBoxBrowserDef, 'OnClick', 'DoCheckBoxClicked'),

   //***************************************************************************

   // Panel Tabellen- und Feldrechte

   oPanelAttr            := MyCreateObject('TPanel', 'PanelAttr', '', oPanelRightSide, 4, alTop, 3, 3, 3, 0),

   oPanelAttr.Height     := 60,

   oPanelAttr.BevelOuter := bvNone,

   // CheckBox Merkmalstabellen

   oCkBoxAttrTable       := MyCreateObject('TCheckBox', 'CkBoxAttrTable', 'Merkmalstabellen', oPanelAttr, 2, alTop, 3, 0, 3, 0),

   AssignEvent(oCkBoxAttrTable, 'OnClick', 'DoCheckBoxClicked'),

   // CheckBox Default

   oCkBoxAttrDefault         := MyCreateObject('TCheckBox', 'CkBoxAttrDefault', 'Default', oPanelAttr, 2, alTop, 3, 18, 3, 0),

   oCkBoxAttrDefault.Enabled := False,

   AssignEvent(oCkBoxAttrDefault, 'OnClick', 'DoCheckBoxClicked'),

   // CheckBox Individual

   oCkBoxAttrUser         := MyCreateObject('TCheckBox', 'CkBoxAttrUser', 'Individual', oPanelAttr, 2, alTop, 3, 18, 3, 0),

   oCkBoxAttrUser.Enabled := False,

   AssignEvent(oCkBoxAttrUser, 'OnClick', 'DoCheckBoxClicked'),

   // CheckBox Beleg Layouts

   oCkBoxDocLayout := MyCreateObject('TCheckBox', 'CkBoxDocLayout', 'Beleg Layouts', oPanelRightSide, 3, alTop, 3, 3, 3, 0),

   //***************************************************************************

   // Panel Tabellen- und Feldrechte

   oPanelRights            := MyCreateObject('TPanel', 'PanelRights', '', oPanelRightSide, 4, alTop, 3, 3, 3, 0),

   oPanelRights.Height     := 60,

   oPanelRights.BevelOuter := bvNone,

   // CheckBox Tabellen- und Feldrechte

   oCkBoxRights            := MyCreateObject('TCheckBox', 'CkBoxRights', 'Tabellen- und Feldrechte', oPanelRights, 4, alTop, 3, 0, 3, 0),

   AssignEvent(oCkBoxRights, 'OnClick', 'DoCheckBoxClicked'),

   // CheckBox Default-Rechte

   oCkBoxDefaultRights         := MyCreateObject('TCheckBox', 'CkBoxDefaultRights', 'Default Rechte', oPanelRights, 4, alTop, 3, 18, 3, 0),

   oCkBoxDefaultRights.Enabled := False,

   AssignEvent(oCkBoxDefaultRights, 'OnClick', 'DoCheckBoxClicked'),

   // CheckBox User-Rechte

   oCkBoxUserRights         := MyCreateObject('TCheckBox', 'CkBoxUserRights', 'User Rechte', oPanelRights, 4, alTop, 3, 18, 3, 0),

   oCkBoxUserRights.Enabled := False,

   AssignEvent(oCkBoxUserRights, 'OnClick', 'DoCheckBoxClicked'),

   // CheckBox Allgemeine- und Lokale Parameter

   oCkBoxParameter      := MyCreateObject('TCheckBox', 'CkBoxParameter', 'Allgemeine- und Lokale Parameter', oPanelRightSide, 5, alTop, 3, 3, 3, 0),

   // CheckBox Außendienst Parameter

   oCkBoxScComm         := MyCreateObject('TCheckBox', 'CkBoxScComm', 'Außendienst Parameter', oPanelRightSide, 6, alTop, 3, 3, 3, 0),

   // CheckBox Individuelle Datenquelle für Umsätze

   oCkBoxIndiDatTurn    := MyCreateObject('TCheckBox', 'CkBoxIndiDatTurn', 'Kum.Stat. Indiv.Betrachtungen', oPanelRightSide, 7, alTop, 3, 3, 3, 0),

   // CheckBox Intrastat Parameter

   oCkBoxIntrastatParam := MyCreateObject('TCheckBox', 'CkBoxIntrastatParam', 'Intrastat Parameter', oPanelRightSide, 8, alTop, 3, 3, 3, 0),

   // CheckBox Filter Liste

   oCkBoxFilterList     := MyCreateObject('TCheckBox', 'CkBoxFilterList', 'Filter Liste', oPanelRightSide, 9, alTop, 3, 3, 3, 0),

   // CheckBox Parameter Filter

   oCkBoxParamFilter    := MyCreateObject('TCheckBox', 'CkBoxParamFilter', 'Parameter Filter', oPanelRightSide, 10, alTop, 3, 3, 3, 0),

   // CheckBox FiBu Parameter

   oCkBoxFiBuParam      := MyCreateObject('TCheckBox', 'CkBoxFiBuParam', 'FiBu Parameter', oPanelRightSide, 11, alTop, 3, 3, 3, 0),

   // CheckBox Vertreterverwaltung Absatzplanung Artikelfilter

   oCkBoxAgentArtFilter := MyCreateObject('TCheckBox', 'CkBoxAgentArtFilter', 'Absatzplanung Artikelfilter', oPanelRightSide, 12, alTop, 3, 3, 3, 0),

   // CheckBox Sonstige WinPosition Codeblöcke

   oCkBoxOtherWinPos    := MyCreateObject('TCheckBox', 'CkBoxOtherWinPos', 'Sonstige WinPositionen', oPanelRightSide, 13, alTop, 3, 3, 3, 0),

   // Array aus allen CheckBoxen die eine export Art represäntieren

   oCkBoxArr := {oCkBoxPrintManager, oCkBoxCRMAction, oCkBoxIndividualMenu,

                 oCkBoxMaskDef, oCkBoxAttrTable, oCkBoxAttrDefault,

                 oCkBoxAttrUser, oCkBoxUserRights, oCkBoxDefaultRights,

                 oCkBoxRights, oCkBoxShippingControl, oCkBoxDocLayout,

                 oCkBoxTextModule, oCkBoxMemoView, oCkBoxParameter,

                 oCkBoxCodeblockProgram, oCkBoxScComm, oCkBoxColSize,

                 oCkBoxIndiDatTurn, oCkBoxRepGen, oCkBoxIntrastatParam,

                 oCkBoxInvFilter, oCkBoxFilterList, oCkBoxOtherWinPos,

                 oCkBoxParamFilter, oCkBoxReleaseByDate, oCkBoxFiBuParam,

                 oCkBoxSqlSelect, oCkBoxAgentArtFilter, oCkBoxSachkonten,

                 oCkPaymentMethod, oCkBoxBrowserDef, oCkBoxBrowserDefDefault},

end,

startseq

   CreateForm(),

   ShowModal(oForm),

always

   DestroyObject(oForm),

stopseq,

Siehe auch:

TBeCollectorErrorItem


TBeCbConfiguration

TBeCbConfiguration

Konfigurations-Objekt für den beas.

Hinweis: Diese Konstante kann ausschließlich im Server-Kontext benutzt werden!

Verwendung:

Eine Instanz dieser Klasse ist als Konstante registriert. CbConfig kann nicht mit CreateObject erzeugt werden.

Eigenschaften |
CbDefPath:C | (readonly) Wert des Parameters "/P:...", wenn dieser übergeben wurde. Ansonsten wird ein Leerstring zurückgegeben.

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Codeblock-Beispiel für die Online-Hilfe der

//               TBeCbConfiguration-Klasse

//##############################################################################

//##############################################################################

| oConfig |

// Workaround für Codeblock-Fehler: Zuweisen des CbConfig-Objekts auf eine

//                                  Variable

oConfig := CbConfig,

WriteLn('Pfad zum aktuellen Datenbestand: "' + oConfig.CbDefPath + '"'),


TBeCbCustomBusinessObject

TBeCbCustomBusinessObject

Die Klasse TBeCBCustomBusinessObject ist die Vorgänger-Klasse aller Business-Objekt Klassen.
Alle hier aufgeführten Eigenschaften, Felder, Methoden können in den Business-Objekt Klassen verwendet werden.

Eigenschaften:

Eigenschaften
CbID:N | (nur lesend) ID des Business Objekts, -1 wenn nicht positioniert oder leer
CbReadOnly:L | Business Objekt für Änderungen sperren
CbCaptionInfo:O | Caption-Eigenschaften als TBeBoInfoCaption Objekt
CbDataModule:O | Daten-Modul des Business-Objekts. Muss vor der ersten Verwendung des Business Objekts gesetzt werden
CbUseTableAlias:C | Individueller Alias-Name für die Haupt-Tabelle des Business Objekts; Hinweis: Durch Verwendung dieser Eigenschaft ist die Tabelle im DatenModul nicht mehr über den Default-Alias-Namen der Tabelle aufzufinden
CbTable:O | Haupt-Tabelle des Business Objekts, für den Zugriff auf Individual-Felder

Tabellen und Felder
CbCreatedBy:C | Erstellt durch (entspricht PLATZ)
CbCreated:D | Erstellt Datum & Zeit (entspricht ERSTELLT)
CbChangedBy:C | Zuletzt geändert durch (entspricht GEAEND_USR)
CbChanged:D | Zuletzt geändert Datum & Zeit (entspricht GEAENDERT)

Funktionen und Methoden

CbGoToID()

Business Objekt positionieren

aBoID:N

ID auf welche das Business Objekt positioniert werden soll

-1 = auf nichts positionieren

CbInsert()

Neuanlage-Modus

CbEdit()

Edit-Modus

CbCancel()

Edit-Modus verlassen

CbPost()

Änderungen speichern

CbDelete()

Projekt löschen

CbInInsertMode():L

Neuanlage-Modus aktiv

CbInBrowseMode():L

Neuanlage/Edit Modus nicht aktiv

CbCanRead():L

Darf der aktuelle BO-Inhalt angezeigt werden (besitzt er eine Leseberechtigung)

Events und deren Verarbeitungsreihenfolge

Die verfügbaren Events können in den jeweiligen Business-Objekten nachgeschlagen werden

Beispiel

// siehe Beispiel zu den jeweiligen Business-Objekten

// Beispiel für die Verwendung von UseTableAlias

|oMemoBOSource, oMemoBODest, oDBGet, nSourceID, nDestID|

oDBGet        := CreateObject('TBeDBGet'),

oMemoBOSource := CreateObject('TBeMemoBO'),

oMemoBODest   := CreateObject('TBeMemoBO'),

startseq

   oMemoBOSource.CbDataModule  := oDBGet,

   oMemoBODest.CbDataModule    := oDBGet,

   oMemoBODest.CbUseTableAlias := 'DAB065_DEST',

   oMemoBOSource.WriteLastUsed := False,

   oMemoBODest.WriteLastUsed   := False,

   oMemoBOSource.CbInsertEmptyMemo(0,  bcMemoLinkIDUser, val(c_usr), 0),

   oMemoBOSource.SubjectValue   := 'Quell-Memo',

   // oMemoBOSource.CbTable:X_INDI := 'Quell-Individual-Feld',

   oMemoBOSource.CbPost(),

   nSourceID := oMemoBOSource.CbID,

   oMemoBODest.CbInsertEmptyMemo(0, bcMemoLinkIDUser, val(c_usr), 0),

   oMemoBODest.SubjectValue := 'Ziel-Memo',

   oMemoBODest.CbPost(),

   nDestID := oMemoBODest.CbID,

   writeln('SourceID: ' + Str(nSourceID) + ' | ' + oMemoBOSource.SubjectValue),

   writeln('DestID: '   + Str(nDestID)   + ' | ' + oMemoBODest.SubjectValue),

   // Betreff vom Source-BO in das Dest-BO kopieren

   oMemoBODest.CbEdit(),

   oMemoBODest.SubjectValue   := oMemoBOSource.SubjectValue,

   // oMemoBODest.CbTable:X_INDI := oMemoBOSource.CbTable:X_INDI,

   oMemoBODest.CbPost(),

   writeln('SourceID: ' + Str(nSourceID) + ' | ' + oMemoBOSource.SubjectValue),

   writeln('DestID: '   + Str(nDestID)   + ' | ' + oMemoBODest.SubjectValue),

always

   DestroyObject(oMemoBODest),

   DestroyObject(oMemoBOSource),

   DestroyObject(oDBGet),

stopseq,

Siehe auch:

TBeMemoBO

TBeProjectBO

TBeProjectTaskBO

TBeProjectTaskEffortBO

TBePostingBO


TBeCbCustomConfigFrame

TBeCbCustomConfigFrame

Basis-Klasse für einen Oberflächen-Konfigurationsbereich.

Diese Klasse kann nicht im Codeblock verwendet werden, da lediglich grundlegende Funktionalitäten für abgeleitete Klassen bereitgestellt werden.

Visibility-Eigenschaften in abgeleiteten Klassen:

Abgeleitete Klassen bieten meist Eigenschaften, welche die Anzeige von bestimmten Controls auf der Benutzeroberfläche steuern.

Erlaubte Werte sind:

o       0: Control ist sichtbar und Bearbeitungsmöglichkeit entspricht dem Default-Verhalten des Frames

o       1: Control kann nie bearbeitet werden

o       2: Control ist nicht sichtbar

Eigenschaften
CbKey1:C | Schlüssel 1, entspricht dem Wert DabSET:KEY1; Default = '', entspricht keiner Filterung
CbKey2:C | Schlüssel 2, entspricht dem Wert DabSET:KEY2; Default = '', entspricht keiner Filterung
CbReadOnly:L | True - alle Oberflächen-Controls können nicht bearbeitet werden; Default = False

Funktionen und Methoden
CbInitFrame | Frame initialisieren, muss immer einmal ausgeführt werden
CbBeginUpdate | Update-Modus starten. Dadurch wird beim Setzen der Key-Eigenschaften der Datensatz nicht sofort gewechselt, sondern erst beim Aufruf der CbEndUpdate()-Methode.
CbEndUpdate | Update-Modus beenden. Gemäß den Key-Eigenschaften auf korrekten Datensatz positionieren.
CbIsUpdate:L | Prüft ob sich das Objekt gerade im Update-Modus befindet

Siehe auch:

TBeCbMailAccountConfigFrame

TBeCbMailServerConfigFrame

TBeCbAvailableMailAccountConfigFrame

TBeCbOutlookSyncAccountConfigFrame

TBeCbAvailableOutlookSyncAccountConfigFrame


TBeCbDockingSaver

TBeCbDockingSaver

Die Klasse TBeCbDockingSaver kapselt Eigenschaften und Funktionen zum speichern und laden von Dockings in Formularen.

Eigenschaften:

Eigenschaften
CbMainForm:O | Owner-Formular für das die Dockings gespeichert/geladen werden sollen
CbSaveDockingsFromIndiMenus:L | Dockings aus Indi-Menüs speichern/laden (default True)
CbWinPositionID:C | Eindeutige ID zum speichern der Dockings

Aktive Eigenschaften (Events)

OnDockingRestored

Event welcher ausgeführt wird wenn ein Docking wiederhergestellt wurde

Funktionen und Methoden

CbReadDockings()

Dockings für das angegebene Formular wiederherstellen

CbWriteDockings()

Liste der angegebenen Dockings speichern

CbAddDocking()

Neuen Eintrag zur Lister der zu speichernden Dockings hinzufügen

aAction:O | Action-Objekt welches für den Aufruf des Fensters verwendet wird
oForm:O | Formular welches durch das Action-Object instantisiert wurde

Beispiel

// siehe SVN "Standard Programmierung Codeblock\Vorlagen\MDI Child GUI"

Siehe auch:

TFormEx


TBeCbEditDesktop

TBeCbEditDesktop

Eine Komponente, die es ermöglicht, über den Codeblock (F12-Formulare) be-Masken aus der Maskenverwaltung in ein Control zu laden.

Eigenschaften

Eigenschaften
CbParent:O | Control, in welches die Maske geladen werden soll.
CbDataSource:O | DataSource der MainTable für die Maske; Das DataSource muss den Namen 'ds_MainTable' besitzen. Der Owner des DataSources muss dem Owner dieser Komponente entsprechen.
CbMaskID:C | ID der Maske, die geladen werden soll.

Funktionen und Methoden

CbLoadMask

Maske in das Control CbParent laden. (Falls CbParent = nil, wird als Control der Owner verwendet)

Beispiel

// Dieser Beispiel-Codeblock erstellt ein Formular das eine be-Maske lädt

// Im Oberen bereich lassen sich 2 Buttons finden zum Skippen der Haupt-Tabelle

// Im Linken Bereich ist die Haupttabelle in einem Grid-Dargestellt und kann auch

//    hier frei positioniert werden

// Der Rechte Bereich ist das Parent-Control, in das die Maske geladen wird.

| oForm, oDesktop, opnl_dsControl, opnl_Mask_Left, opnl_Mask_Right, obtn_Next,

  obtn_Prior, oMainTable, Ds_MainTable, oGrid |

//******************************************************************************

// Im DataSource auf den nächsten Datensatz sprigen

//******************************************************************************

function btn_Click_Next()

  oMainTable.CbNext(),

end,

//******************************************************************************

// Im DataSource auf den vorherigen Datensatz springen

//******************************************************************************

function btn_Click_Prior()

  oMainTable.CbPrior(),

end,

//******************************************************************************

oForm := CreateObject('TFormEx'),

startseq

   // Panel Steuerungskontrolle des DataSource

   opnl_dsControl       := CreateObject('TPanel', , oForm, oForm),

   opnl_dsControl.align := alTop,

   // Button der im DataSource auf den nächsten Datensatz springt

   obtn_Next         := CreateObject('TButton', , opnl_dsControl, opnl_dsControl),

   obtn_Next.caption := '>',

   obtn_Next.align   := alRight,

   AssignEvent(obtn_Next, 'OnClick', 'btn_Click_Next'),

   // Button der im DataSource auf den vorherigen Datensatz springt

   obtn_Prior         := CreateObject('TButton', , opnl_dsControl, opnl_dsControl),,

   obtn_Prior.caption := '<',

   obtn_Prior.align   := alLeft,

   AssignEvent(obtn_Prior, 'OnClick', 'btn_Click_Prior'),

   // Panel auf der linken Seite

   opnl_Mask_Left       := CreateObject('TPanel', , oForm, oForm),

   opnl_Mask_Left.align := alLeft,

   opnl_Mask_Left.Width := oForm.Width / 2,

   // Panel das die Maske beinhaltet

   opnl_Mask_Right       := CreateObject('TScrollBox', , oForm, oForm),

   opnl_Mask_Right.align := alClient,

   // DataSet

   oMainTable          := CreateObject('TBeRightsTable', , oForm),

   oMainTable.WorkArea := waDab050,

   oMaintable.Active   := True,

   // DataSource

   Ds_MainTable         := CreateObject('TDataSourceEx', 'ds_MainTable', oForm),

   Ds_MainTable.DataSet := oMaintable,

   // Grid zur Anzeige der Positionierung

   oGrid            := CreateObject('TBeAltGrid', , opnl_Mask_Left, opnl_Mask_Left),

   oGrid.Align      := alClient,

   oGrid.DataSource := Ds_MainTable,

   // Desktop

   // muss mit dem Selben Owner erzeugt werden wie das DataSoruce und er muss das Formular sein

   oDesktop := CreateObject('TBeCbEditDesktop', ,oForm),

   oDesktop.CbDataSource := Ds_MainTable,

   oDesktop.CbMaskID     := '000016001',

   oDesktop.CbParent     := opnl_Mask_Right, // Optional, sonst wird opnl_Mask_Left genommen

   oDesktop.CbLoadMask(),

   ShowModal(oForm),

always

   DestroyObject(oForm),

stopseq,


TBeCbEmbeddedWebBrowser

TBeCbEmbeddedWebBrowser

Klasse zur Anzeige von Webseiten im Codeblock.

Diese Klasse verwendet zur Anzeige den lokalen Microsoft Internet Explorer.

ACHTUNG:

Version 10.X oder höher des Internet Explorer muss installiert sein.

Desweiteren muss be für die Verwendung des IE 10.X konfiguriert werden.

Dies hat auch zur Folge, dass die Anzeige von Webseiten/HTML-E-Mails in be, bei eingestellter Verwendung des IEs, nun auch

die Version 11.X verwendet. Damit kann sich ggf. die Darstellung etwas verändern.

Für die Konfiguration von be für IE 11.X muss folgender Registry-Eintrag pro Client-Rechner eingetragen werden.

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]

"be_32.exe"=dword:00002af9 (11001)

Eigenschaften

Eigenschaften
CbLocationURL:C | Url der aktuell angezeigten Seite
CbLocationName:C | Titel der aktuell angezeigten Seite

Funktionen und Methoden

CbHTMLSource:C

HTML Quelltext

CbNavigateToLocalFile

eine lokale Datei anzeigen

aFileName:C

Pfad der Datei

CbNavigateToSearch

Default Suchmaschine anzeigen

CbCopy:L

Markierten Text in Zwischenablage kopieren

CbSelectAll:L

Komplette Seite markieren

CbClearSelection:L

Markierung aufheben

CbNavigateTo

zu dieser Url navigieren

aURL:C

Url

CbStop

aktuelle Verarbeitung abbrechen

CbRefresh

Seite aktualisieren

CbGoBack

vorherige Seite anzeigen

CbGoForward

nächste Seite anzeigen

CbWaitWhileBusy:L

Warten bis der InternetExplorer wieder Eingaben empfangen kann

aTimeOut:N

Timeout in Millisekunden (0 => kein Timeout)

CbLoadFromString:L

Seite aus einem String laden

aString:C

HTML-Code der kompletten Seite

CbLoadFromFile:L

Seite aus einer Datei laden

aFileName:C

Pfad der Datei

CbSaveToFile:L

aktuelle Seite als Datei speichern

aFileName:C

Pfad der Datei

CbDocumentLoaded:L

Prüft ob die aktuelle Seite fertig geladen ist

CbScrollToBottom

ans Ende der Seite scrollen

CbScrollToID

zu dem Element mit der speziellen ID scrollen

aID:N

ID des Elements

CbScrollToIDEx

zu dem Element mit der speziellen ID scrollen

aID:C

ID des Elements

CbScrollToPosition

an eine bestimmte Position der Seite scrollen

aX:N | Anzahl an Pixel die die Seite nach links verschoben werden soll
aY:N | Anzahl an Pixel die die Seite nach oben verschoben werden soll

CbScrollToTop

an den Anfang der Seite scrollen

Verfügbare Events

OnStatusTextChange

Status hat sich geändert

Hierbei wird z.b. angegeben welches Bild/Ressource gerade geladen wird oder auch

zu welcher Url der Link unter der Maus verweist

aSender:O | Browser welches den Event ausgelöst hat
Text:C | neuer Status-Text

OnProgressChange

Ladefortschritt

aSender:O | Browser welches den Event ausgelöst hat
Progress:N | aktueller Fortschritt
ProgressMax:N | max. Wert für den Fortschritt

OnCommandStateChange

Dient der Aktualisierung des Vor/Zurück Buttons

aSender:O | Browser welches den Event ausgelöst hat
Command:N | 1 - vorwärts; 2 - zurück
Enable:L | Funktion kann verwendet werden oder nicht

OnTitleChange

Der Titel der Seite hat sich geändert

aSender:O | Browser welches den Event ausgelöst hat
Text:C | neuer Titel der Seite

OnBeforeNavigate2

Bevor zu einer neuen Seite navigiert wird

aSender:O | Browser welches den Event ausgelöst hat
URL:C | Url zu welcher navigiert wird
Flags:N | siehe Microsoft NWMF enumeration
TargetFrameName:C | Name das Frames welcher zu dieser Seite navigieren möchte
PostData:C | HTTP Post Daten welche zusätzlich verschickt werden
Headers:C | HTTP Headers welche zusätzlich verschickt werden
Cancel:L | Navigation abbrechen; False (default); True - die Navigation zu der Seite wird nicht durchgeführt, die aktuelle Seite wird weiterhin angezeigt

OnNavigateComplete2

Die Navigation zu einer Seite ist abgeschlossen (die Seite läd aber ggf. noch Inhalte)

aSender:O | Browser welches den Event ausgelöst hat
URL:C | Url welche geladen wurde

OnDocumentComplete

Die Seite ist komplett geladen

aSender:O | Browser welches den Event ausgelöst hat
URL:C | Url welche geladen wurde

OnNavigateError

Bei der Navigation ist ein Fehler aufgetreten

aSender:O | Browser welches den Event ausgelöst hat
URL:C | Url welche den Fehler verursacht hat
Frame:C | Name des Frames in welchem die Seite geladen wurde; Leer - falls die Anzeige nicht in einem Frame ist
StatusCode:N | HTTP Status Code
Cancel:L | Fehlerbehandlung abbrechen; False (default) - ggf. wird eine Fehler Seite wird angezeigt; True - keine Weiterleitung zur Fehler Seite

OnNewWindow3

Bevor ein neues Fenster angezeigt wird

aSender:O | Browser welches den Event ausgelöst hat
Cancel:L | Anzeige abbrechen; False (default); True - es wird kein neues Fenster geöffnet, die Seite daher auch nicht angezeigt
dwFlags:N | siehe Microsoft NWMF enumeration
bstrUrlContext:C | Url der Seite welche das neue Fenster öffnen möchte
bstrUrl:C | Url der Seite welche in dem neuen Fenster geöffnet wird

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Codeblock-Beispiel für die Klasse TBeCbEmbeddedWebBrowser

//##############################################################################

//##############################################################################

|oForm, oWebBrowser, oBtnBack, oBtnForward, oBtnRefreshStop, oBtnHome,

 oBtnSearch, oBtnNavigate, oEditNavigate,

 oPnl_Top, oPnl_TopLeft, oPnl_TopRight, oPnl_Bottom,

 oStatus, oProgress|

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Panel initialisieren

// @Result: null

//******************************************************************************

function InitPanel(oPanel)

   oPanel.BevelInner := 0,

   oPanel.BevelOuter := 0,

end,

//******************************************************************************

// Navigation zu einer URL ausführen

// @Result: null

//******************************************************************************

function NavigateTo(cUrl)

   oWebBrowser.CbNavigateTo(cUrl),

   oEditNavigate.Text := cUrl,

end,

//******************************************************************************

// Start-Seite anzeigen

// @Result: null

//******************************************************************************

function LoadHomeScreen()

   |cHTML|

   cHTML :=

            '<html><head>' +

            '  <style type="text/css">' +

            '    a { text-decoration:none; color:#ffffff; font-family:Segoe UI }' +

            '  </style>' +

            '<body>' +

            '<table border="1" bordercolor="C70A2E" style="background-color:#CF5C4D" width="100%" cellpadding="5" cellspacing="0">' +

            '  <tr>' +

            '    <td><a href="http://www.dontenwill.de">Dontenwill AG</a></td>' +

            '  </tr>' +

            '</table>' +

            '<br />' +

            '<table border="1" bordercolor="C70A2E" style="background-color:#CF5C4D" width="100%" cellpadding="5" cellspacing="0">' +

            '  <tr>' +

            '    <td><a href="http://192.168.10.222">Dontenwill Blog</a></td>' +

            '  </tr>' +

            '</table>' +

            '</body></html>',

   oWebBrowser.CbLoadFromString(cHTML),

end,

//******************************************************************************

// Event bei Klick eines Buttons

// @Result: null

//******************************************************************************

function NavigateButton_Click(oSender)

   case oSender

      of oBtnBack       :: oWebBrowser.CbGoBack(),

      of oBtnForward    :: oWebBrowser.CbGoForward(),

      of oBtnRefreshStop:: if oBtnRefreshStop.ImageIndex.IndexNormal = 12 then

                              oWebBrowser.CbRefresh(),

                           else

                              oBtnRefreshStop.ImageIndex.IndexNormal = 12,

                              oWebBrowser.CbStop(),

                           endif,

      of oBtnHome       :: LoadHomeScreen(),

      of oBtnSearch     :: oWebBrowser.CbNavigateToSearch(),

      of oBtnNavigate   :: NavigateTo(oEditNavigate.Text),

   endcase,

end,

//******************************************************************************

// Buttons initialisieren

// @Result: null

//******************************************************************************

function InitButton(oButton, nImgIndex)

   oButton.Align := alLeft,

   oButton.Width := 23,

   oButton.ImageIndex.IndexNormal := nImgIndex,

   AssignEvent(oButton, 'OnClick', 'NavigateButton_Click'),

end,

//##############################################################################

//##############################################################################

// Events

//##############################################################################

//##############################################################################

//******************************************************************************

// bei ENTER Navigation auslösen

// @Result: null

//******************************************************************************

function EditNavigate_KeyDown(oSender, nKey)

  if nKey = 13 then

     NavigateTo(oEditNavigate.Text),

  endif,

end,

//******************************************************************************

// Lade-Status hat sich geändert

// @Result: null

//******************************************************************************

function WB_StatusTextChange(oSender, cText)

  oStatus.Caption := cText,

end,

//******************************************************************************

// Lade-Fortschritt hat sich geändert

// @Result: null

//******************************************************************************

function WB_ProgressChange(oSender, nProgress, nProgressMax)

   oProgress.Max      := nProgressMax,

   oProgress.Position := nProgress,

   oProgress.Visible  := (nProgress < nProgressMax) and (nProgress > 0),

end,

//******************************************************************************

// Titel der Seite hat sich geändert

//******************************************************************************

function WB_TitleChange(oSender, cTitle)

   oForm.Caption := cTitle,

end,

//******************************************************************************

// Status der Navigations-Buttons hat sich geändert

// @Result: null

//******************************************************************************

function WB_CommandStateChange(oSender, nCommandID, lEnabled)

   case nCommandID

      of 1:: oBtnForward.Enabled := lEnabled,

      of 2:: oBtnBack.Enabled := lEnabled,

   endcase,

end,

//******************************************************************************

// Bevor zu einer Seite navigiert wird

// @Result: null

//******************************************************************************

function WB_BeforeNavigate2(oSender, cURL, nFlags, cTargetFrameName, cPostData, cHeaders, lCancel)

   oBtnRefreshStop.ImageIndex.IndexNormal := 8,

   oBtnRefreshStop.Enabled                := True,

   oEditNavigate.Color                    := clWhite,

   // Facebook darf nicht angesteuert werden

   if 'facebook' $ cURL then

      lCancel                 := True,

      oStatus.Caption         := 'Die Seite "' + cURL + '" ist blockiert!',

      oBtnRefreshStop.Enabled := False,

   endif,

end,

//******************************************************************************

// Navigation abgeschlossen

// @Result: null

//******************************************************************************

function WB_NavigateComplete2(oSender, cURL)

   oEditNavigate.Text := oWebBrowser.CbLocationURL,

end,

//******************************************************************************

// Seite wurde fertig geladen (WB_NavigateComplete2 kommt früher)

// @Result: null

//******************************************************************************

function WB_DocumentComplete(oSender, cURL)

   oBtnRefreshStop.ImageIndex.IndexNormal := 12,

   oBtnRefreshStop.Enabled                := True,

end,

//******************************************************************************

// Fehler bei der Navigation zu einer Seite  z.b. www.abasdfasdfd.de

//******************************************************************************

function WB_NavigateError(oSender, cURL, cFrame, nStatusCode, lCancel)

   if oEditNavigate.Text $ cURL then

      oEditNavigate.Color := clRed,

   endif,

end,

//******************************************************************************

// URL kürzen falls zu lang

// @Result: null

//******************************************************************************

function CutUrlForShow(cUrl, nLength)

   if Len(cUrl) > nLength then

      cUrl := SubStr(cUrl, 1, nLength - 3) + '...',

   endif,

   Result := cUrl,

end,

//******************************************************************************

// vor dem erzeugen eines neuen Fensters

// @Result: null

//******************************************************************************

function WB_NewWindow3(oSender, lCancel, nFlags, cUrlContext, cUrl)

   lCancel := not JN('Die Seite "' + CutUrlForShow(cUrlContext, 100) + '"' + CRLF +

                     'versucht die Seite "' + CutUrlForShow(cUrl, 100) + '" in einem separtem Fenster zu öffnen.' + CRLF +

                     'Neues Fenster öffnen?'),

end,

//##############################################################################

//##############################################################################

// Oberflächen-Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// LoadGUI lädt sämtliche Komponenten die für die Oberfläche benötigt werden

// @Result: null

//******************************************************************************

function LoadGUI()

   oForm           := CreateObject('TFormEx'),

   oWebBrowser     := CreateObject('TBeCbEmbeddedWebBrowser', 'WebBrowser', oForm, oForm),

   oPnl_Top        := CreateObject('TPanel', '', oForm, oForm),

   oPnl_TopLeft    := CreateObject('TPanel', '', oForm, oPnl_Top),

   oPnl_TopRight   := CreateObject('TPanel', '', oForm, oPnl_Top),

   oPnl_Bottom     := CreateObject('TPanel', '', oForm, oForm),

   oEditNavigate   := CreateObject('TBeEdit', '', oForm, oPnl_Top),

   oBtnBack        := CreateObject('TBeSpeedButton', '', oForm, oPnl_TopLeft),

   oBtnForward     := CreateObject('TBeSpeedButton', '', oForm, oPnl_TopLeft),

   oBtnRefreshStop := CreateObject('TBeSpeedButton', '', oForm, oPnl_TopLeft),

   oBtnHome        := CreateObject('TBeSpeedButton', '', oForm, oPnl_TopLeft),

   oBtnNavigate    := CreateObject('TBeSpeedButton', '', oForm, oPnl_TopRight),

   oBtnSearch      := CreateObject('TBeSpeedButton', '', oForm, oPnl_TopRight),

   oStatus         := CreateObject('TPanel', '', oForm, oPnl_Bottom),

   oProgress       := CreateObject('TBeProgressBar', '', oForm, oPnl_Bottom),

   startseq

      oForm.Font.Name          := 'Segoe UI',

      oEditNavigate.Font.Size  := 9,

      oEditNavigate.Font.Style := fsBold,

      InitPanel(oPnl_Top),

      InitPanel(oPnl_TopLeft),

      InitPanel(oPnl_TopRight),

      InitPanel(oPnl_Bottom),

      InitPanel(oStatus),

      InitButton(oBtnBack, 23),

      InitButton(oBtnForward, 24),

      InitButton(oBtnRefreshStop, 8), // 12 Refresh 8 Stop

      InitButton(oBtnHome, 1),

      InitButton(oBtnSearch, 548),

      InitButton(oBtnNavigate, 666),

      oPnl_Top.Height     := 23,

      oPnl_TopLeft.Width  := 23 * 4,

      oPnl_TopRight.Width := 23 * 2,

      oPnl_Bottom.Height  := 18,

      oStatus.Height      := 18,

      oPnl_Top.Align      := alTop,

      oPnl_TopLeft.Align  := alLeft,

      oPnl_TopRight.Align := alRight,

      oPnl_Bottom.Align   := alBottom,

      oEditNavigate.Align := alClient,

      oWebBrowser.Align   := alClient,

      oStatus.Align       := alClient,

      oProgress.Align     := alLeft,

      // Statusanzeige

      oStatus.Alignment := 0,

      oStatus.AlignWithMargins := True,

      oStatus.Margins.Left     := 2,

      oStatus.Margins.Right    := 2,

      oStatus.Margins.Top      := 0,

      oStatus.Margins.Bottom   := 0,

      // Fortschrittsanzeige

      oProgress.Visible          := False,

      oProgress.Width            := 120,

      oProgress.AlignWithMargins := True,

      oProgress.Margins.Left     := 2,

      oProgress.Margins.Right    := 2,

      oProgress.Margins.Top      := 2,

      oProgress.Margins.Bottom   := 2,

      AssignEvent(oEditNavigate, 'OnKeyDown', 'EditNavigate_KeyDown'),

      AssignEvent(oWebBrowser, 'OnStatusTextChange', 'WB_StatusTextChange'),

      AssignEvent(oWebBrowser, 'OnProgressChange', 'WB_ProgressChange'),

      AssignEvent(oWebBrowser, 'OnTitleChange', 'WB_TitleChange'),

      AssignEvent(oWebBrowser, 'OnCommandStateChange', 'WB_CommandStateChange'),

      AssignEvent(oWebBrowser, 'OnBeforeNavigate2', 'WB_BeforeNavigate2'),

      AssignEvent(oWebBrowser, 'OnNavigateComplete2', 'WB_NavigateComplete2'),

      AssignEvent(oWebBrowser, 'OnDocumentComplete', 'WB_DocumentComplete'),

      AssignEvent(oWebBrowser, 'OnNavigateError', 'WB_NavigateError'),

      AssignEvent(oWebBrowser, 'OnNewWindow3', 'WB_NewWindow3'),

      oBtnBack.Enabled        := False,

      oBtnForward.Enabled     := False,

      oBtnRefreshStop.Enabled := False,

      LoadHomeScreen(),

   onerror

      DestroyObject(oForm),

      SetError('Fehler beim Laden der Oberfläche' + crlf + GetErrorText()),

   stopseq,

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   LoadGUI(),

   ShowModal(oForm),

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + GetErrorText(), mtError),

stopseq,


TBeCbFolderWatch

TBeCbFolderWatch

Klasse zur Überwachung von Änderungen im Windows-Dateisystem

Eigenschaften:

Allgemeine-Eigenschaften

CbDirectory:C Pfad des Ordners, der überwacht werden soll

CbWatchSubFolders:L Unterordner überwachen

CbWatchNotifyFilters:N Aufzählung der Datei-Aktionen, die überwacht werden sollen.

Mögliche Werte sind

fnfFileName Erzeugung, Löschung und Namensänderung von Dateien

fnfDirName Erzeugung, Löschung und Namensänderung von Verzeichnissen

fnfAttributes Änderung von Attributen an Dateien oder Verzeichnissen

fnfSize Änderung der Dateigröße

fnfLastWrite Änderung der Eigenschaft "zuletzt geändert" einer Datei

fnfLastAccess Änderung der Eigenschaft "zuletzt zugegriffen" einer Datei

fnfCreation Änderung der Eigenschaft "erstellt" einer Datei

fnfSecurity Änderung in den Sicherheitseinstellungen

CbActive:L Aktivieren bzw. Deaktivieren der Überwachung

Events

CbOnActiveChanged Tritt auf, wenn der Überwachungsthread startet bzw. endet

CbOnWatchNotify Tritt auf, wenn ein Überwachungsereignis auftritt.

Einziger Parameter des Events ist ein Objekt

der Klasse TBeCbFolderWatchNotifyObj, welches Informationen

über das aufgetretene Ereignis enthält

Hinweis

Da die Überwachung in einem Hintergrund-Thread läuft, bedeutet die Aktivierung der

Überwachung per CbActive := True nicht den unmittelbaren Start der Überwachung. Änderungen am

Aktiv-Status werden über das Event CbOnActiveChanged mitgeteilt.

Die Eigenschaft CbActive wird dementsprechend gesetzt.

Die Überwachung sollte vom Codeblock vor Programm-Ende beendet werden. (CbActive := false)

Verwendung:

Die Klasse sollte im Kontext eines Formulars genutzt werden, da das Codeblock-Programm auf die

Beispiel

| oForm, oMemo, oWatchFolder  |

//******************************************************************************

// Event: Folder-Watch-Notify ist aufgetreten

//******************************************************************************

function FolderWatchWatchNotify(aSender)

| cActionText |

  cActionText := FormatDateTime('HH:MM:SS', Now()) + ': ' + aSender.CbDirectory + ' / ' + aSender.CbFileName + ' => ' + aSender.CbActionText,

  CollAdd(oMemo.Lines, cActionText),

end,

startseq,

   oForm       := CreateObject('TFormEx'),

   startseq

     oForm.Font.Name := 'Segoe UI',

     oForm.OrigCapt  := 'FolderWatch - Verzeichnis-Überwachung',

     // Memo zur Anzeige der Events

     oMemo             := CreateObject('TMemo', 'Memo', oForm, oForm),

     oMemo.Align       := alClient,

     oMemo.ScrollBars  := 2,

     CollDelete(oMemo.Lines, 1),

     oMemo.Color  := clInfoBk,

       // Folder-Watch erstellen

     oWatchFolder                      := CreateObject('TBeCbFolderWatch', 'WATCH'),

     oWatchFolder.CbDirectory          := 'C:\',

     oWatchFolder.CbWatchSubFolders    := true,

     oWatchFolder.CbWatchNotifyFilters := fnfLastWrite,

     AssignEvent(oWatchFolder, 'CbOnWatchNotify', 'FolderWatchWatchNotify'),

     oWatchFolder.CbActive             := true,

     ShowModal(oForm),

   always

     startseq,

        oWatchFolder.CbActive := false,

     onerror,

     stopseq,

     DestroyObject(oForm),

   stopseq,

onerror,

   MessageDlg('Fehler: ' + crlf + GetErrorText()),

stopseq,

Siehe auch:

TBeCbFolderWatchNotifyObj


TBeCbFolderWatchNotifyObj

TBeCbFolderWatchNotifyObj

Info-Klasse, welche im Event CbOnWatchNotify der Klasse TBeCbFolderWatch zur Verfügung steht und Informationen über das aufgetretene Überwachungs-Ereignis enthält.

Eigenschaften:

Allgemeine-Eigenschaften

CbAction:N Typ der Aktion, die aufgetreten ist

Mögliche Werte sind

fwaAdded Datei / Verz. wurde erstellt

fwaRemoved Datei / Verz. wurde gelösch

fwaModified Datei / Verz. wurde geändert

fwaRenamedOldName Datei / Verz. wurde umbenannt -> alter Name

fwaRenamedNewName Datei / Verz. wurde umbenannt -> neuer Name

CbActionText:N Typ der aufgetretenen Aktion als Text

CbDirectory:C Ordner-Name

CbFileName:C Datei- oder Verzeichnis-Name

Verwendung:

Eine Instanz dieser Klasse steht im Event CbOnWatchNotify der Klasse TBeCbFolderWatch als einziger Parameter zur Verfügung.

Beispiel

siehe TBeCbFolderWatch

Siehe auch:

TBeCbFolderWatch


TBeCbFormExHelper

TBeCbFormExHelper

Diese Klasse stellt für ein TFormEx-Objekt erweiterte Funktionen im Codeblock zur Verfügung.

Zugriff erfolgt über TFormEx.CbHelper.

Eigenschaften

Eigenschaften
CbFormEx:O | Formular (TFormEx) auf welchem der CbHelper seine Funktionen ausführt
Aktive Eigenschaften (Events)
OnCbUserDefinedEvent | Event welcher ausgeführt wird wenn die Methode CbInvokeUserDefinedEvent() ausgeführt wird

Funktionen und Methoden

CbInvokeUserDefinedEvent()

Löst den auf OnCbUserDefinedEvent zugewiesenen Event aus

Sender:O | Sender-Objekt welches den Event auslöst
aKey:S | eindeutiger Key welcher das User-Event beschreibt
aParams:U | beliebig definierbarer Parameter

CbManualDock():L

Formular wird an das angegebene Control angedockt

aDockSite:O

Control an welches angedockt werden soll

CbManualDockEx():L

entspricht CbManaulDock() mit erweiterten Möglichkeiten

aDockSite:O | Control an welches angedockt werden soll
aDropControl:O | Control an welchem sich ausgerichtet werden soll
aControlSide:O | an welche Seite von aDropControl angedockt werden soll

CbManualUndock():L

Formular wird von seiner aktuellen Position abgedockt

CbResize()

Führt einen Resize vom Formular aus

Hierbei wird das Formular angewiesen seine Größe neu zu setzen

CbRequestAlign()

Führt ein RequestAlign vom Formular aus

Hierbei wird das Formular angewiesen dass all seine Untercontrols sich neue ausrichten

Beispiel

| oMainForm, oMF_Btn, oMF_Info |

//******************************************************************************

function DoDF_Btn1_Click(Sender)

   |oParent|

   oParent := GetParent(Sender),

   oParent.CbHelper.CbInvokeUserDefinedEvent(Sender, 'LOCK', True),

end,

//******************************************************************************

function DoDF_Btn2_Click(Sender)

   |oParent|

   oParent := GetParent(Sender),

   oParent.CbHelper.CbInvokeUserDefinedEvent(Sender, 'LOCK', False),

end,

function DoCbUserDefinedEvent(Sender, aKey, aParams)

  if aKey = 'LOCK' then

     if aParams = True then

        oMF_Info.Visible := True,

     else

        oMF_Info.Visible := False,

     endif,

  endif,

end,

//******************************************************************************

function DoMF_Btn_Click(Sender)

   | oDetailForm, oDF_Btn1, oDF_Btn2 |

   // Detail-Formular erzeugen/anzeigen

   oDetailForm := CreateObject('TFormEx',, oMainForm),

   oDetailForm.OrigCapt := 'Detail-Fenster',

   AssignEvent(oDetailForm.CbHelper, 'OnCbUserDefinedEvent', 'DoCbUserDefinedEvent'),

   oDF_Btn1 := CreateObject('TBeBitBtn',, oDetailForm, oDetailForm),

   oDF_Btn2 := CreateObject('TBeBitBtn',, oDetailForm, oDetailForm),

   oDF_Btn1.Left    := 10,

   oDF_Btn1.Top     := 10,

   oDF_Btn1.Width   := 150,

   oDF_Btn1.Caption := 'Haupt-Fenster sperren',

   AssignEvent(oDF_Btn1, 'OnClick', 'DoDF_Btn1_Click'),

   oDF_Btn2.Left    := 180,

   oDF_Btn2.Top     := 10,

   oDF_Btn2.Width   := 150,

   oDF_Btn2.Caption := 'Haupt-Fenster entsperren',

   AssignEvent(oDF_Btn2, 'OnClick', 'DoDF_Btn2_Click'),

   Show(oDetailForm),

end,

//******************************************************************************

// Haupt-Formular erzeugen/anzeigen

//******************************************************************************

oMainForm := CreateObject('TFormEx'),

oMainForm.OrigCapt := 'Haupt-Fenster',

oMF_Btn  := CreateObject('TBeBitBtn',, oMainForm, oMainForm),

oMF_Info := CreateObject('TBeInfoPanel',, oMainForm, oMainForm),

oMF_Btn.Align            := alBottom,

oMF_Btn.AlignWithMargins := True,

oMF_Btn.Caption          := 'Detail-Fenster öffnen',

AssignEvent(oMF_Btn, 'OnClick', 'DoMF_Btn_Click'),

oMF_Info.Visible := False,

oMF_Info.Caption := 'Fenster ist Gesperrt!',

oMF_Info.Align   := alTop,

ShowModal(oMainForm),


TBeCbFormVariantMaskEdit

TBeCbFormVariantMaskEdit

Dialog zum Definieren eines Varianten-Arrays.

Findet Verwendung im Codeblock Standard-Modul "Sachmerkmalleisten".

Eigenschaften

Eigenschaften

CbSLMemo:C

Varianten-Definition als String

CbModified:L

Gibt an, ob Änderungen an der Varianten-Definition durchgeführt wurden.

CbReadOnly:L

True | Die Varianten-Definition kann nicht verändert werden. Sämtliche Controls zum Ändern der Varianten-Definition sind disabled.
False (Default) | Die Varianten-Definition kann beliebig verändert werden.

Ereignisse
OnSave | Beim Speichern der Änderungen
OnCancel | Beim Verwerfen der Änderungen

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Beispiel für die Benutzung des Variatnendialogs

//               (TBeCbFormVariantMaskEdit) im Codeblock.

//##############################################################################

//##############################################################################

|

   m_oOwner:P1,

   m_cPositionSaveID,

   m_cBrowserID,

   m_cSMLFieldName,

   m_nSMLWorkarea,

   m_bCanClose,

   m_oDM,

   m_oMainTable,

   ds_MainTable,

   m_bMainTableExpicitPost,

   // Actions

   A_Save, A_Cancel, A_EditSML,

   // GUI-Controls

   oForm, pnl_Detail, grd_Main, ipnl_EditAttribs, pnl_EditAttribs,

   pnl_Grid, ipnl_SML, pnl_SMLCode, edt_SMLCode, ipnl_SMLCode,

   pnl_Toolbar, toolbar_Main, tb_Save, tb_Cancel, tb_Split, tb_EditSML,

   pnl_SMLControl, btn_AttribsToText, btn_AttribsFromText

|

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_cPositionSaveID := '@VARIANT_POS',

m_cBrowserID      := 'ART_FIN',

m_cSMLFieldName   := 'SL_MEMO',

m_nSMLWorkarea    := waDab010,

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// SLMemo aus aktuellen Datensatz der Haupttabelle holen

// @Result: string

//******************************************************************************

function GetSLMemo()

   Result := AsString(m_cSMLFieldName, m_oMainTable),

end,

//******************************************************************************

// Zentrale Steuerung des "Enabled-Zustand" aller Actions

//******************************************************************************

function ActionsEnabled()

| bInEditMode, bMainTableIsEmpty |

   bInEditMode       := EditModes(m_oMainTable),

   bMainTableIsEmpty := Bof(m_oMainTable) and Eof(m_oMainTable),

   // Buttons in der Toolbar En-/Disablen

   A_Save.Enabled    := bInEditMode,

   A_Cancel.Enabled  := bInEditMode,

   A_EditSML.Enabled := not bMainTableIsEmpty,

end,

//******************************************************************************

// Oberflächen-Controls aktualisieren

// @Result: null

//******************************************************************************

function RefreshControls()

| cSLMemo |

   cSLMemo                             := GetSLMemo(),

   pnl_EditAttribs.FormVarCalc.PL_Memo := cSLMemo,

   edt_SMLCode.Text                    := cSLMemo,

end,

//******************************************************************************

// Neue Spalte in einem TBeAltGrid hinzufügen

//    cFieldName: Name des Feldes, dessen Inhalt angezeigt werden soll

//    cCaption:   Anzeigename für das Feld

// @Result: TBeColumn

//******************************************************************************

function TBeAltGrid_AddColumn(oSelf, cFieldName, cCaption)

   Result               := CollAdd(oSelf),

   Result.FieldName     := cFieldName,

   Result.Title.Caption := cCaption,

end,

//******************************************************************************

// SLMemo String speichern

// @Result: null

//******************************************************************************

function SaveSLMemo(cSLMemo)

| oField |

   BeginSuspend(m_oMainTable),

   startseq

      SetErrorIf(not DbEdit(m_oMainTable),

                 'Datensatz konnte nicht bearbeitet werden'),

      oField := DbField(m_cSMLFieldName, m_oMainTable),

      SetErrorIf(Empty(oField),

                 'Feld <' + m_cSMLFieldName + '> nicht vorhanden!'),

      SetErrorIf(not DbReplace(oField, cSLMemo),

                 'SLMemo-String konnte nicht gespeichert werden!'),

      RefreshControls(),

   always

      EndSuspend(m_oMainTable),

   stopseq,

end,

//******************************************************************************

// Variantendialog erzeugen und anzeigen

// @Result: null

//******************************************************************************

function ShowVariantEdit()

| oVariantEdit |

   m_bCanClose  := True,

   oVariantEdit := CreateObject('TBeCbFormVariantMaskEdit', '', oForm),

   oVariantEdit.PositionSaveID := m_cPositionSaveID,

   oVariantEdit.CbSLMemo       := GetSLMemo(),

   AssignEvent(oVariantEdit, 'OnSave',       'VariantEdit_Save'),

   AssignEvent(oVariantEdit, 'OnCancel',     'VariantEdit_Cancel'),

   AssignEvent(oVariantEdit, 'OnCloseQuery', 'VariantEdit_CloseQuery'),

   ShowModal(oVariantEdit),

end,

//##############################################################################

//##############################################################################

// Eventhandler

//##############################################################################

//##############################################################################

//******************************************************************************

// Event: OnScroll_Update

//******************************************************************************

function DataSource_ScrollUpdate()

   ActionsEnabled(),

   RefreshControls(),

end,

//******************************************************************************

// Event: BeforePost

//******************************************************************************

function MainTable_BeforePost(Sender)

   if m_bMainTableExpicitPost then

      m_bMainTableExpicitPost := False,

   else

      Abort(True),

   endif,

end,

//******************************************************************************

// Event: Beim Speichern des SLMemo Strings

//******************************************************************************

function VariantEdit_Save(Sender)

   startseq

      SaveSLMemo(Sender.CbSLMemo),

   onerror

      MessageDlg('Fehler beim Speichern des SLMemo-Strings: [' + CRLF +

                 GetErrorText()                                + CRLF +

                 ']'),

      DbCancel(m_oMainTable),

   stopseq,

end,

//******************************************************************************

// Event: Beim Klick auf "Abbrechen" im Variantendialog

//******************************************************************************

function VariantEdit_Cancel(Sender)

   m_bCanClose := True,

   if Sender.CbModified then

      m_bCanClose := Jn('Änderungen verwerfen?'),

   endif,

end,

//******************************************************************************

// Event: Kann der Dialog geschlossen werden?

//******************************************************************************

function VariantEdit_CloseQuery(Sender, CanClose)

   CanClose := m_bCanClose,

   // Globale CanClose-Variable muss zurückgesetzt werden, damit der Dialog beim

   // nächsten Schließen "normal" geschlossen werden kann.

   m_bCanClose := True,

end,

//******************************************************************************

// Event: Merkmale zu Text

//******************************************************************************

function btn_AttribsToTextExecute(Sender)

   edt_SMLCode.Text := pnl_EditAttribs.FormVarCalc.PL_Memo,

end,

//******************************************************************************

// Event: Merkmale aus Text

//******************************************************************************

function btn_AttribsFromTextExecute(Sender)

   pnl_EditAttribs.FormVarCalc.PL_Memo := edt_SMLCode.Text,

end,

//##############################################################################

//##############################################################################

// Actionhandler

//##############################################################################

//##############################################################################

//******************************************************************************

// Action: Änderung speichern

//******************************************************************************

function A_SaveExecute(Sender)

   m_bMainTableExpicitPost := True,

   if not DbPost(m_oMainTable) then

      MessageDlg('Änderungen konnten nicht gespeichert werden!', mtError),

   endif,

end,

//******************************************************************************

// Action: Änderung verwerfen

//******************************************************************************

function A_CancelExecute(Sender)

   if Jn('Änderungen verwerfen?') then

      DbCancel(m_oMainTable),

   endif,

end,

//******************************************************************************

// Action: Sachmerkmalleiste bearbeiten

//******************************************************************************

function A_EditSMLExecute(Sender)

   ShowVariantEdit(),

end,

//##############################################################################

//##############################################################################

// Oberflächen-Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// InitForm lädt das Formular in Abhängigkeit des Owners

// @Result: null

//******************************************************************************

function InitForm()

   if Empty(m_oOwner) then

      oForm := CreateObject('TFormEx', 'FormEx'),

   else

      oForm := CreateObject('TFormEx', 'FormEx', m_oOwner, m_oOwner),

      oForm.FormStyle   := fsMDIChild,

      oForm.Windowstate := wsMaximized,

   endif,

   //---------------------------------------------------------------------------

   // Formular erstellen

   oForm.Name      := GFU_CalcFormularName('', oForm, m_oOwner),

   oForm.OrigCapt  := 'Beispielprogramm für den Variantendialog im Codeblock',

   oForm.Font.Name := 'Segoe UI',

   oForm.Width     := 1200,

   //---------------------------------------------------------------------------

   // Panel für Toolbar erstellen

   pnl_Toolbar                  := CreateObject('TBePanel', 'pnl_Toolbar', oForm, oForm),

   pnl_Toolbar.Align            := alTop,

   pnl_Toolbar.AlignWithMargins := True,

   pnl_Toolbar.Caption          := '',

   pnl_Toolbar.Height           := 24,

   pnl_Toolbar.BevelOuter       := bvNone,

   //---------------------------------------------------------------------------

   // Toolbar erstellen

   toolbar_Main                  := CreateObject('TToolbar', 'toolbar_Main', pnl_Toolbar, pnl_Toolbar),

   toolbar_Main.Images           := BeImageList(nImageListMain16),

   toolbar_Main.AllowTextButtons := True,

   //---------------------------------------------------------------------------

   // Toolbuttons erstellen

   //    * Sachmerkmalleiste bearbeiten

   tb_EditSML       := CreateObject('TToolButton', 'tb_EditSML', toolbar_Main, toolbar_Main),

   tb_EditSML.Style := 5, // tbsTextButton

   //    * Splitter

   tb_Split       := CreateObject('TToolButton', 'tb_Split', toolbar_Main, toolbar_Main),

   tb_Split.Style := 3,

   tb_Split.Width := 7,

   //    * Abbrechen

   tb_Cancel      := CreateObject('TToolButton', 'tb_Cancel', toolbar_Main, toolbar_Main),

   //    * Speichern

   tb_Save        := CreateObject('TToolButton', 'tb_Save', toolbar_Main, toolbar_Main),

   //---------------------------------------------------------------------------

   // Panel für Grid erstellen

   pnl_Grid                  := CreateObject('TBePanel', 'pnl_Grid', oForm, oForm),

   pnl_Grid.Align            := alLeft,

   pnl_Grid.ShowBeSplitter   := True,

   pnl_Grid.BevelOuter       := bvNone,

   pnl_Grid.Width            := 450,

   //---------------------------------------------------------------------------

   // InfoPanel "Sachmerkmalleisten" erstellen

   ipnl_SML                  := CreateObject('TBeInfoPanel', 'ipnl_SML', oForm, pnl_Grid),

   ipnl_SML.Align            := alTop,

   ipnl_SML.AlignWithMargins := True,

   ipnl_SML.Caption          := 'Sachmerkmalleisten',

   //---------------------------------------------------------------------------

   // Grid erstellen (DAB010)

   grd_Main                  := CreateObject('TBeAltGrid', 'grd_Main', oForm, pnl_Grid),

   grd_Main.Align            := alClient,

   grd_Main.Margins.Top      := 0,

   grd_Main.AlignWithMargins := True,

   //---------------------------------------------------------------------------

   // Detail-Panel erstellen

   pnl_Detail                  := CreateObject('TBePanel', 'pnl_Detail', oForm, oForm),

   pnl_Detail.Align            := alClient,

   pnl_Detail.Caption          := '',

   pnl_Detail.ShowBeSplitter   := True,

   pnl_Detail.BevelOuter       := bvNone,

   //---------------------------------------------------------------------------

   // InfoPanel "Sachmerkmale bearbeiten" erstellen

   ipnl_EditAttribs                  := CreateObject('TBeInfoPanel', 'ipnl_EditAttribs', oForm, pnl_Detail),

   ipnl_EditAttribs.Align            := alTop,

   ipnl_EditAttribs.AlignWithMargins := True,

   ipnl_EditAttribs.Caption          := 'Ausprägungen bearbeiten',

   //---------------------------------------------------------------------------

   // Button "Merkmale als Text" erstellen

   btn_AttribsToText                        := CreateObject('TBeBitBtn', 'btn_AttribsToText', oForm, pnl_Detail),

   btn_AttribsToText.Align                  := alTop,

   btn_AttribsToText.AlignWithMargins       := True,

   btn_AttribsToText.Caption                := 'Merkmale in Text konvertieren',

   btn_AttribsToText.ImageIndex.IndexNormal := 24,

   btn_AttribsToText.Height                 := 22,

   AssignEvent(btn_AttribsToText, 'OnClick', 'btn_AttribsToTextExecute'),

   //---------------------------------------------------------------------------

   // TVarCalcPanel zum bearbeiten der Sachmerkmale erstellen

   pnl_EditAttribs                  := CreateObject('TVarCalcPanel', 'pnl_EditAttribs', oForm, pnl_Detail),

   pnl_EditAttribs.Align            := alClient,

   pnl_EditAttribs.Margins.Top      := 0,

   pnl_EditAttribs.AlignWithMargins := True,

   pnl_EditAttribs.Caption          := '',

   pnl_EditAttribs.BevelOuter       := bvNone,

   pnl_EditAttribs.FormVarCalc.Font.Name := 'Segoe UI',

   //---------------------------------------------------------------------------

   // Detail-Control-Panel erstellen

   pnl_SMLControl                  := CreateObject('TBePanel', 'pnl_SMLControl', oForm, pnl_Detail),

   pnl_SMLControl.Align            := alBottom,

   pnl_SMLControl.AlignWithMargins := True,

   pnl_SMLControl.Caption          := '',

   //pnl_SMLControl.Width            := 24,

   pnl_SMLControl.Height           := 48,

   pnl_SMLControl.BevelOuter       := bvNone,

   //---------------------------------------------------------------------------

   // SML-Code-Panel erstellen

   pnl_SMLCode                := CreateObject('TBePanel', 'pnl_SMLCode', oForm, oForm),

   pnl_SMLCode.Align          := alRight,

   pnl_SMLCode.Caption        := '',

   pnl_SMLCode.ShowBeSplitter := True,

   pnl_SMLCode.Width          := 300,

   pnl_SMLCode.BevelOuter     := bvNone,

   //---------------------------------------------------------------------------

   // InfoPanel "Sachmerkmalleiste als Text" erstellen

   ipnl_SMLCode                  := CreateObject('TBeInfoPanel', 'ipnl_SMLCode', oForm, pnl_SMLCode),

   ipnl_SMLCode.Align            := alTop,

   ipnl_SMLCode.AlignWithMargins := True,

   ipnl_SMLCode.Caption          := 'Sachmerkmalleiste als Text',

   //---------------------------------------------------------------------------

   // Button "Merkmale aus Text" erstellen

   btn_AttribsFromText                        := CreateObject('TBeBitBtn', 'btn_AttribsFromText', oForm, pnl_SMLCode),

   btn_AttribsFromText.Align                  := alTop,

   btn_AttribsFromText.AlignWithMargins       := True,

   btn_AttribsFromText.Caption                := 'Merkmale aus Text befüllen',

   btn_AttribsFromText.ImageIndex.IndexNormal := 23,

   btn_AttribsFromText.Height                 := 22,

   AssignEvent(btn_AttribsFromText, 'OnClick', 'btn_AttribsFromTextExecute'),

   //---------------------------------------------------------------------------

   // Edit für den Code der Sachmerkmalleiste erstellen

   edt_SMLCode                  := CreateObject('TBeEdit', 'edt_SMLCode', oForm, pnl_SMLCode),

   edt_SMLCode.Align            := alClient,

   edt_SMLCode.Margins.Top      := 0,

   edt_SMLCode.AlignWithMargins := True,

   edt_SMLCode.Autosize         := False,

   edt_SMLCode.WordWrap         := True,

   edt_SMLCode.WantReturns      := True,

   edt_SMLCode.Text             := '',

   //---------------------------------------------------------------------------

   // Lokales DataSource erstellen

   ds_MainTable := CreateObject('TDataSourceEx', 'ds_MainTable', oForm),

   AssignEvent(ds_MainTable, 'OnScroll_Update', 'DataSource_ScrollUpdate'),

end,

//******************************************************************************

// Actions erzeugen

// @Result: null

//******************************************************************************

function InitActions()

   // Action: Speichern

   A_Save              := CreateObject('TAction', 'A_Save', oForm),

   A_Save.Caption      := '',

   A_Save.Hint         := 'Änderungen speichern',

   A_Save.ImageIndex   := 7,

   A_Save.Enabled      := False,

   AssignEvent(A_Save, 'OnExecute', 'A_SaveExecute'),

   // Action: Abbrechen

   A_Cancel            := CreateObject('TAction', 'A_Cancel', oForm),

   A_Cancel.Caption    := '',

   A_Cancel.Hint       := 'Änderungen verwerfen',

   A_Cancel.ImageIndex := 8,

   A_Cancel.Enabled    := False,

   AssignEvent(A_Cancel, 'OnExecute', 'A_CancelExecute'),

   // Action: Sachmerkmalleiste bearbeiten

   A_EditSML            := CreateObject('TAction', 'A_EditSML', oForm),

   A_EditSML.Caption    := 'Sachmerkmalleiste bearbeiten',

   A_EditSML.Hint       := 'Sachmerkmalleiste bearbeiten',

   A_EditSML.ImageIndex := 284,

   A_EditSML.Enabled    := False,

   AssignEvent(A_EditSML, 'OnExecute', 'A_EditSMLExecute'),

   // Actions zuordnen

   tb_Save.Action    := A_Save,

   tb_Cancel.Action  := A_Cancel,

   tb_EditSML.Action := A_EditSML,

end,

//******************************************************************************

// Eigenes Datenmodul erstellen, benötigte Tabellen öffnen und mit GUI verbinden

//******************************************************************************

function OpenDataBaseAndLinkToGUI()

| oColumn |

   // Lokales DataSource mit Haupttabelle verbinden

   m_oDM        := CreateObject('TBeDbGet', 'm_oDM', oForm),

   m_oMainTable := DbGetTable(m_oDM, m_nSMLWorkarea, 'DAB010'),

   AssignEvent(m_oMainTable, 'BeforePost', 'MainTable_BeforePost'),

   DbGoTop(m_oMainTable),

   ds_MainTable.DataSet := m_oMainTable,

   GFU_Docking_LinkMasterTableToLocalDataSource(

      m_oMainTable,

      ds_MainTable,

      m_nSMLWorkarea,

      'TBeRightsTable'

   ),

   // Grid mit Haupttabelle verbinden

   grd_Main.DataSource      := ds_MainTable,

   grd_Main.RegisterDataSet := m_oMainTable,

   // HINWEIS:

   // Um den Standard-Artikel-Browser zu nutzen müssen folgende zwei Zeilen

   // einkommentiert werden (kann zu schlechter Performance führen):

   //grd_Main.ID              := m_cBrowserID,

   //grd_Main.ReadWriteProps  := 0,

   // Grid: Ggf. eigene Spalten hinzufügen/initialisieren

   // (darf erst nach der DB Initialisierung gemacht werden)

   if grd_Main.ID == '' then

      oColumn       := TBeAltGrid_AddColumn(grd_Main.Columns, 'ID', 'ID'),

      oColumn.Width := 35,

      if m_nSMLWorkarea = waDab010 then

         TBeAltGrid_AddColumn(grd_Main.Columns, 'ARTNR', 'Artikelnummer'),

         oColumn := TBeAltGrid_AddColumn(grd_Main.Columns, 'BEZ',  'Bezeichnung'),

         oColumn.Width            := 243,

         oColumn.BeAttr.Caption   := 'Bezeichnung',

         oColumn.BeAttr.FuncBlock := 'AllTrim(BEZ1) + iif(Empty(AllTrim(BEZ2)), ""," / " + AllTrim(BEZ2))',

      endif,

   endif,

end,

//******************************************************************************

// ShowGUI zeigt das GUI an, das vorher mit LoadGUI geladen werden muss.

// @Result: null

//******************************************************************************

function ShowGUI()

   if Empty(m_oOwner) then

      ShowModal(oForm),

   else

      Show(oForm),

   endif,

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   InitForm(),

   InitActions(),

   OpenDataBaseAndLinkToGUI(),

   ShowGUI(),

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + CRLF +

              GetErrorText()                     + CRLF + CRLF +

              DebugArr(GetErrorStack(True)), mtError),

   DestroyObject(oForm),

stopseq,

oForm


TBeCbHTTP

TBeCbHTTP

Die Klasse TBeCbHTTP ermöglicht das Auslesen von HTML-Quelltext für die Verwendung im Codeblock.

Außerdem stellt die Klasse Eigenschaften und Methoden zur erweiterten Nutzung von HTTP-Requests zur Verfügung.

Eigenschaften:

Eigenschaften

CbConnectTimeout:N

Timeout in Millisekunden für den Verbindungsaufbau (Default: 0: kein Timeout)

CbReadTimeout:N

Timeout in Millisekunden für das Lesen des Ergebnisses (Default: 0: kein Timeout)

CbHTTPBody:C

Inhalt des Body der HTTP-Response, im Fehlerfall leer

CbErrorHTTPStatusCode:N

Im Fehlerfall: Statuscode der HTTP-Response, sonst = 0

Sonderfälle - werden vom Client (nicht vom Server!) gesetzt, damit eine Behandlung dieser relativ häufig vorkommenden Problemfälle möglich wird.

- Ein ReadTimeout führt immer zu ErrorHTTPStatusCode = 408

- Ein ConnectTimeout führt immer zu ErrorHTTPStatusCode = 118

- Eine nicht verfügbare Adresse führt immer zu ErrorHTTPStatusCode = 404

(sofern der Server nicht anderweitig antwortet)

CbErrorHTTPStatusText:C

Im Fehlerfall: Statustext der HTTP-Response, sonst leer

CbErrorHTTPBody:C

Im Fehlerfall: Inhalt des Body der HTTP-Response, sonst leer

CbAuthentificationMode:N

Authentifizierungsmodus (wird für JSON-Requests benötigt)

- 1 = BasicAuthentification

CbAuthentificationUserName:C

User-Name für die BasicAuthentification

CbAuthentificationPassword:C

Passwort für die BasicAuthentification

CbJSONResponse:O

Antwort eines JSON-Request als Objekt vom Typ TBeasCustomServiceParamItem

CbHandleRedirects:L

Für Statuscode 3xx (auserhalb 304) weiterleiten nach eine Redirect URL wenn ein URL bekommt werde von Server

CbUserAgent:C

Angabe welcher Client die Anfrage sendet, z.b. "Mozilla/4.0 (compatible)"

CbHeaders:O

String-Listen Objekt welche zusätzliche Header für den Request enthalten

CbResponse:C

identisch zu CbHTTPBody

CbResponseAsAnsi:C

Inhalt des HTTP-Response, im Fehlerfall leer. Die Rückgabe wird automatisch in das ANSI-Format konvertiert.

CbResponseHeaders:O

String-Listen Objekt zum Zugriff auf alle Header welche zurückgeliefert werden

CbDebugActive:L

Debug-Ausgabe aktivieren. True - es werden alle Kommunikations-Schritte protokolliert

Default = False

CbDebugInfo:C

Debug-Ausgabe. Nach Durchführung einer Kommunikation bei CbDebugActive = True, ist hier das Protokoll enthalten

Funktionen / Methoden

CbGetURL()

Führt mit der übergebenden URL einen HTTP-Get-Request aus.

aURL:C

URL

CbJSONRequest()

Führt mit der übergebenden URL einen JSON-Request aus.

aURL:C | URL
aMode:N | Request-Modus; - 1 = GET; - 2 = POST
aRequestParam:O | Objekt von der Klasse TBeasCbServiceInputParam, mit dem je nach Modus und Anforderung Parameter übergeben werden können.

CbGetURLHandleRedirects()

Führt mit der übergebenden URL einen HTTP-Get-Request aus und im fall von Server Redirect wird nach die nächste URL weiter leiten.

aURL:C

aHandleRedirects:L

URL

Boolean, wenn True wird nach die nächste URL weiterleiten sonnst gibt es eine URL Fehler.

CbGet()

identisch zu CbGetURL()

CbPost()

Führt mit der übergebenen URL einen HTTP-Post-Request aus. Dabei wird aData übertragen.

aURL:C | URL
aData:C | Daten welche per HTTP-Post übertragen werden sollen

CbPut()

Führt mit der übergebenen URL einen HTTP-Put-Request aus. Dabei wird aData übertragen.

aURL:C | URL
aData:C | Daten welche per HTTP-Put übertragen werden sollen

CbResponseHeaderExists()

Prüft ob ein Key im Rückgabe Header existiert

aKey:C

Key des Headers

CbResponseHeaderValue()

Gibt den Wert eines Keys im Rückgabe Header zurück

aKey:C

Key des Headers

Beispiel

//******************************************************************************

// Liefert als Ergebnis den Inhalt der HTML-Seite

//   Im Fehlerfall enthält cHTTPGetResult alle verfügbaren Informationen

//   über den aufgetretenen Fehler.

//   Im Fall von einem Redirect, ist der Inhalt der neue HTML-Seite das Ergebnis

//******************************************************************************

function HTTPRequest(lUseRedirect:L, lAllowRedirect:L)

|cURL, oHTTP, cDivider, cResult|

   cResult  := '',

   cURL     := 'http://www.google.com/search?q=example',

   cDivider := Replicate('-', 80),

   oHTTP    := CreateObject('TBeCbHTTP'),

   startseq,

     oHTTP.CbConnectTimeout := 2000,

     oHTTP.CbReadTimeout    := 2000,

     oHTTP.CbUserAgent      := 'Mozilla/4.0 (compatible)',

     CollAdd(oHTTP.CbHeaders, 'be-test:beheader'),

     startseq

        if lUseRedirect then

           oHTTP.CbGetURLHandleRedirects(cURL, lAllowRedirect),

        else

           oHTTP.CbGetURL(cURL), // HTTP-Request auslösen

        endif,

        cResult := oHTTP.CbHTTPBody,

     onerror

        cResult :=

           GetErrorText()                                              + crlf + cDivider + crlf +

           'ErrorHTTPStatusCode = ' + Str(oHTTP.CbErrorHTTPStatusCode) + crlf + cDivider + crlf +

           'ErrorHTTPStatusText = ' +     oHTTP.CbErrorHTTPStatusText  + crlf + cDivider + crlf +

           'ErrorHTTPBody       = ' +     oHTTP.CbErrorHTTPBody,

     stopseq,

   always,

     DestroyObject(oHTTP),

   stopseq,

   Result := cResult,

end,

//******************************************************************************

// Liefert als Ergebnis den Inhalt des POST-Request zurück

//******************************************************************************

function HTTPPost()

|cHTTPBody:C, oHTTP|

   cHTTPBody := '',

   oHTTP     := CreateObject("TBeCBHTTP"),

   startseq,

      oHTTP.CbUserAgent  := "Mozilla/5.0 (compatible)",

      CollAdd(oHTTP.CbHeaders, "be-test:testheader"),

      CollAdd(oHTTP.CbHeaders,  "accept:application/json"),

      oHttp.CbPost("https://postman-echo.com/post", 'USERID=12345' + CRLF + 'PASSWD=56789'),

      cHTTPBody := oHTTP.CbResponseAsAnsi,

   always,

      DestroyObject(oHTTP),

   stopseq,

   Result := cHTTPBody,

end,

writeln('--- Kein Redirect ---'),

writeln( HTTPRequest(false, false) ),

writeln('--- Redirect verboten ---'),

writeln( HTTPRequest(true, false) ),

writeln('--- Redirect erlaubt ---'),

writeln( HTTPRequest(true, true) ),

writeln('--- HTTP-Post ---'),

writeln( HTTPPost() ),

Siehe auch:

HTTPGet()


TBeCBHTTPGet

TBeCBHTTPGet

Klasse zum Abruf des Quelltextes einer Internetseite.

Hinweis:

Die neuere Klasse TBeCbHTTP bietet eine bessere Fehlerbehandlung und erweitere Information im Fehlerfall.

Eigenschaften:

Allgemeine-Eigenschaften

Address:C HTTP Adresse der Internetseite welche abgerufen werden soll.

Port:N Port, default = 80

ReadTimeout:N Zeitspanne in Millisekunden, nachdem ein Ladeversuch abgebrochen wird, default = 0 (nicht abbrechen)

Utf8ToAnsi:L Sonderzeichen-Konvertiereung durchführen, default = false.

UserAgent:C UserAgent, default = Mozilla/4.0 (compatible).

Header:C Custom Header im Format "Name:Wert". Es können mehrere hinzugefügt werden, die mit einem CRLF getrennt werden müssen.

PostData:C Wenn Daten rein geschrieben werden dann wird intern Post gerufen. Post im Format "Name=Wert". Es können mehrere hinzugefügt werden, die mit einem CRLF getrennt werden müssen.

Aktive-Eigenschaften (Methoden)

LoadHTTPText Quelltext von gegebener Adresse abrufen. Rückgabe = Quelltext

Beispiel

|cHTTPBody:C := "", oHTTP|

oHTTP := CreateObject("TBeCBHTTPGet"),

Startseq,

    oHTTP.Address    := "https://postman-echo.com/headers",

    oHTTP.Utf8ToAnsi := true,

    oHTTP.UserAgent  := "Mozilla/4.0 (compatible)",

    oHTTP.Header     := "be-test:unittest",

    cHTTPBody        := 'Header Test:' + CRLF + oHTTP.LoadHTTPText,

    oHTTP.Address    := "https://postman-echo.com/post",

    oHTTP.Utf8ToAnsi := true,

    oHTTP.UserAgent  := "Mozilla/4.0 (compatible)",

    oHTTP.Header     := "accept:application/json" + CRLF + "be-test:UnitTest",

    oHTTP.PostData   := 'USERID=12345' + CRLF + 'PASSWD=56789',

    cHTTPBody        := cHTTPBody + CRLF + CRLF + 'POST Test:' + CRLF + oHTTP.LoadHTTPText,

Always,

    DestroyObject(oHTTP),

StopSeq,

cHTTPBody

Siehe auch:

FTPDownload()

TBeCbHTTP


TbeCbHttpServer

TbeHttpServer

Diese Klasse ist eine Komponente, die keine Oberfläche hat. Sie dient dazu auf die HTTP Anfragenden Kunden-Inhalte zu liefern, wie z.B. Bilder, Dokumente, formatierte Informationen (HTML) aus dem be-Datenbestand.

Eigenschaften

Eigenschaften
OnCbRequest | Ereignis zur Vorbereitung der Antwort auf HTTP Anfrage
CbPort | Port Nummer auf die der Server auf die Anfragen wartet
CbActive | Aktivieren den Server, default: false

Eigenschaften des Sender Objekt von OnCbRequest Eregniss

Eigenschaften
CbAddress | Relative Adresse der Anfrage. Root ist '/'. Ico der Seite ist '/favicon.ico' usw. Beinhaltet keine Parameter. Siehe hierfür Methode GetCbRequestParameter.
CbProcessed | Default: true. Setzt false, falls der HTTP Server die default Antwort schicken sollte.
CbResponseContentType | Default: text/plain. Content-Type der Antwort, ein MIME-Type je nach https://www.iana.org/assignments/media-types/media-types.xhtml; Wie z.B.: text/plain - unformatierter Text text/html - HTML Dokument image/jpeg - .jpg Bild image/png - .png Bild mage/x-icon - .ico Bild, typisch für /favicon.ico Anfrage text/rtf - Rich-Text application/octet-stream - unbekantes Format
CbResponseString | Default: HTTP 1.1 200 Ok; Antwort für die Anfrage. Wird nicht benutzt, falls entweder die Methode LoadResponseFromField oder die Methode LoadResponseFromFile aufgerufen wurde.
CbResponseCode | Default: 200; HTTP 1.1 Code je nach https://www.w3.org/Protocols/HTTP/HTRESP.html; Z.B: 200 - OK, Antwort vorhanden; 302 - Inhalt liegt temporär wo anders: SetCbResponseHeader sollte mit Parametnern 'Location' und '<url>' aufgerufen werden. 404 - Nicht gefunden; 500 - Interne Fehler; Trotzt eines Fehler, kann CbResponseString gesetzt werden, sodass der Browser den Inhalt anzeigt.
CbRequestContentType | Content-Type der Anfrage.
CbRequestContentString | Falls die Anfrage per POST geschickt wurde, gibt diese Eigenschaft die Parameter, wie z.B. 'user=065&pass=*****&location=000' zurück.
Methoden
GetCbRequestHeader | Parameter 1: Name des Headers; Gibt den Wert des Header-Parameters der Anfrage zurück, wie gewünschte Sprache, Große von Bildschirm usw, je nach https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
SetCbResponseHeader | Parameter 1: Name des Headers; Parameter 2: Wert des Parameters. Keine Rückgabe-Wert; Setzt Header Parametern der Antwort, wie z.B. Sprache, Hersteller, usw. Default Antwort-Headers: Server: bussiness express, x-info: bussiness express
GetCbRequestParameter | Parameter 1: Name des Parameters; Gibt die Parameter zurück, die der Addresse nach dem ersten Fragezeichen folgen. Wie z.B: Anfrage: '/article?id=shirt&color=red&size=M'; Address: '/article'; GetCbRequestParameter('id') = 'shirt'; GetCbRequestParameter('color') = 'red'; GetCbRequestParameter('art') = ''
LoadResponseFromField | Parameter 1: Dataset; Parameter 2: Name des Felds; Setzt die Antwort auf den Inhalt des Feldes der aktuelle Zeile
LoadResponseFromFile | Parameter 1: Datei Name; Setzt die Antwort auf den Inhalt der Datei

- TbeCbHttpServer auf eine F12-Maske platzieren, wenn möglich Eigenschaft CbPort und Erreigniss OnCbRequest setzen

- Im Quell-Code, wenn den Zeit kommt, CbActive auf True setzen

- Im F12-Designer befindet sich die Komponente unter der Palette "Allgemein"

Beispiel

| oForm, beCbHTTPServer |

//******************************************************************************

function beCbHTTPServerCbRequest( Sender )

   | oMemoData |

   if Sender.CbAddress == '/' then

      Sender.CbResponseString := '<h3>Hallo</h3>' +

        '<p>Data: <a href="data">download</a></p>' +

        '<br>' +

        '<img src="file">',

      Sender.CbResponseContentType := 'text/html',

   else

      if Sender.CbAddress = '/favicon.ico' then

         Sender.CbProcessed := false, // default ico

      else

         if Sender.CbAddress = '/data' then

            oMemoData := DBOpen(waDab065),

            Sender.LoadResponseFromField(oMemoData, 'MEMO'),

            DestroyObject(oMemoData),

         else

            if Sender.CbAddress = '/file' then

               Sender.LoadResponseFromFile('C:\irgendwelche\bild.jpg'),

               Sender.CbResponseContentType := 'text/jpeg',

            else

               if Sender.CbAddress = '/default' then

                  // nichts

               else

                  if Sender.CbAddress = '/move' then

                     Sender.SetCbResponseHeader('Location', '/'),

                     Sender.CbResponseString := 'Temporär verschoben auf <a href="/">Root</a>',

                     Sender.CbResponseContentType := 'text/html',

                     Sender.CbResponseCode := 302, // redirect - permanent

                  else

                     Sender.CbResponseString := 'Nicht gefunden ' + Sender.CbAddress,

                     Sender.CbResponseContentType := 'text/plain',

                     Sender.CbResponseCode := 404, // not found

                  endif

               endif,

            endif,

         endif,

      endif,

   endif

end,

startseq

   oForm          := CreateObject('TFormEx', 'HttpServerForm', Application),

   beCbHTTPServer := CreateObject('TbeCbHTTPServer', 'HTTPServer', oForm),

   AssignEvent(beCbHTTPServer, 'OnCbRequest', 'beCbHTTPServerCbRequest'),

   beCbHTTPServer.CbPort   := 1234,

   beCbHTTPServer.CbActive := true,

   // jetzt warte auf die Anfrage

   ShowModal(oForm),

always

   DestroyObject(oForm),

stopseq,


TBeCbImageListEditor

TBeCbImageListEditor

Die Klasse TBeCbImageListEditor stellt das Formular zur Anzeige und Bearbeitung der be-Image-Listen dar.

Eigenschaften:

Eigenschaften
CbImageIndex:N | Image-Index der ausgewählt wurde bzw. markiert wird
CbListIndex:N | Index der Image-Liste
CbImageLists:O | (nur lesend) Lister der Image-Listen (Collection)
CbChanged:L | (nur lesend) Wurde die Individual-Images vom User verändert

Beispiel

//******************************************************************************

//******************************************************************************

// Diese Funktion ist auch als globale Funktion über "Global\GUIUtils" verfügbar

//

// Zeigt den Standard-Image-List Editor an

// @Result: Array {Status des Dialogs (mrOK, mrCancel, mrAbort),

//                 Index Image-Liste,

//                 Image-Index,

//                 Indi Image-Liste wurde verändert}

//******************************************************************************

//******************************************************************************

function ShowBeImageListEditor(nListIndex, nImageIndex)

| oImgListEditor, nDlgResult |

   Result := {},

   oImgListEditor := CreateObject('TBeCbImageListEditor', 'CbImgEditor'),

   startseq

      // ggf. Liste und Image-Index vorbelegen

      oImgListEditor.CbListIndex  := nListIndex,

      oImgListEditor.CbImageIndex := nImageIndex,

      nDlgResult := ShowModal(oImgListEditor),

      Result     := {nDlgResult,

                     oImgListEditor.CbListIndex,

                     oImgListEditor.CbImageIndex,

                     oImgListEditor.CbChanged}

   always

      DestroyObject(oImgListEditor)

   stopseq,

end,

writeln(ShowBeImageListEditor(0,123))

Siehe auch:

AttribImageInfo()

BeImageList()


TBeCbImapMailOperations

TBeCbImapMailOperations

Die Klasse ermöglicht die Definition von Operationen, die auf einem Imap-Mail-Server ausgeführt werden sollen.

Eine Instanz dieser Klasse steht im Business Object Event "Nach dem Import einer E-Mail" über die Klasse TBeCbMailImportedInfo zur Verfügung.

Methoden und Funktionen:

CreateMailBox(aMailBoxPath: String) | Eine Mailbox erstellen. "aMailBoxPath" muss dabei den vollen Pfad zur Mailbox und den neuen Mailboxnamen enthalten, z.B. "INBOX\Ablage\Kunden".
MoveToMailBox(aImapUId: String, aSourceMailBoxPath: String, aTargetMailBoxPath: String) | Die E-Mail mit der UId "aImapUId" von Mailbox "aSourceMailBoxPath" in die Mailbox "aTargetMailBoxPath verschieben. Pfadangaben müssen absolut sein.
ExceptOnMailOperationFails(aExcept: Boolean) | Import-Prozess abbrechen (inkl. Import-Transaktion), wenn die definierten (Imap)-Mail-Operationen nicht erfolgreich durchgeführt werden können. Default = True.
DeleteMail(aImapUId: String; aMailBoxPath: String); | Die E-Mail mit der UId aImapUId wird aus der Mailbox gelöscht. Achtung: es werden zusätzlich ALLE als gelöscht gekennzeichneten E_Mails der Mailbox endgültig gelöscht.
MarkMailAsDeleted(aImapUId: String; aMailBoxPath: String); | Eine E-Mail als gelöscht kennzeichnen.
MarkMailAsUndeleted(aImapUId: String; aMailBoxPath: String) | Eine E-Mail als nicht gelöscht kennzeichnen.
MarkMailAsRead(aImapUId: String; aMailBoxPath: String) | Eine E-Mail als gelesen kennzeichnen.
MarkMailAsUnread(aImapUId: String; aMailBoxPath: String) | Eine E-Mail als ungelesen kennzeichnen.

Siehe auch:

Business Object Event "Nach dem Import einer E-Mail"

TBeCbMailImportedInfo


TBeCbLicenseInfo

TBeCbLicenseInfo

Info-Objekt, welches Informationen zur aktuell aktiven Lizenz zur Verfügung stellt.

Eigenschaften:

Allgemeine-Eigenschaften |
Initialized:L | True = Lizenz-Informationen stehen zur Verfügung
IsLiveSystem:L | True = es wird aktuell auf dem Live-Datenbestand gearbeitet; (LiveDatabasePath = Startparameter P:..)
LicenseName:C | Kunden-Name der Lizenz
LicenseNumber:N | Kunden-Nummer der Lizenz
DatabaseSerialNumber:N | ADS Serien-Nummer
MaxConcurrentUsers:N | maximal zulässige Anzahl an gleichzeitig angemeldeten Benutzern
MaxLocations:N | maximal verfügbare Anzahl an Standorten
ValidUntil:D | Ablaufs-Datum der Lizenz
LiveDatabasePath:C | UNC-Pfad des Live-Datenbestandes
MaxVersionStr:C | maximal gültige be-Version die mit dieser Lizenz verwendet werden kann

Alle Eigenschaften sind "nur lesend"

Verwendung:

Eine Instanz dieser Klasse ist als Konstante BeLicenseInfo registriert.
TBeCbLicenseInfo kann nicht mit CreateObject erzeugt werden.


TBeCbMailAccountConfigFrame

TBeCbMailAccountConfigFrame

Oberflächen-Konfigurationsbereich für E-Mail-Konten.

Eigenschaften
CbAccountDesc_Visibility:N | Sichtbarkeit der Konto-Bezeichnung
CbMailAddress_Visibility:N | Sichtbarkeit der E-Mail-Adresse
CbUserDisplayName_Visibility:N | Sichtbarkeit des E-Mail-Absendernamens
CbReceiveServerAccountID_Visibility:N | Sichtbarkeit des Posteingangsservers
CbSendServerAccountId_Visibility:N | Sichtbarkeit des Postausgangsservers
CbReceiveUserName_Visibility:N | Sichtbarkeit des Benutzernamens
CbReceivePassword_Visibility:N | Sichtbarkeit des Passwort-Feldes
CbMailboxPath_Visibility:N | Sichtbarkeit des Mailbox-Pfads
CbDeleteFromServer_Visibility:N | Sichtbarkeit der Checkbox "E-Mails nach Empfang vom Server löschen"
CbReceiveSettings_Visibility:N | Sichtbarkeit der Empfangs-Einstellungen
CbSettings_Visibility:N | Sichtbarkeit der Einstellungen (Allgemein)
CbSendSettings_Visibility:N | Sichtbarkeit der Sende-Einstellungen
CbSendUserName_Visibility:N | Sichtbarkeit des Benutzernamens in den Sende-Einstellungen
CbSendPassword_Visibility:N | Sichtbarkeit des Passwort-Feldes in den Sende-Einstellungen
CbSendViaReceiveSettings_Visibility:N | Sichtbarkeit von "Empfangseinstellungen verwenden"

Funktionen und Methoden

(siehe TBeCbCustomConfigFrame)

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Codeblock-Beispiel für die Klasse TBeCbMailAccountConfigFrame

//##############################################################################

//##############################################################################

| m_oForm, m_oFrame, m_nSettingsType |

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_nSettingsType := 5300,

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Setzen der Standardeinstellungen

// @Result: null

//******************************************************************************

function SetDefaults()

   // Sichtbarkeiten der Oberflächen Controls

   m_oFrame.CbAccountDesc_Visibility            := 1,

   m_oFrame.CbMailAddress_Visibility            := 1,

   m_oFrame.CbUserDisplayName_Visibility        := 1,

   m_oFrame.CbReceiveServerAccountID_Visibility := 1,

   m_oFrame.CbSendServerAccountId_Visibility    := 1,

   m_oFrame.CbReceiveUserName_Visibility        := 1,

   m_oFrame.CbMailboxPath_Visibility            := 1,

   m_oFrame.CbDeleteFromServer_Visibility       := 1,

   m_oFrame.CbReceiveSettings_Visibility        := 1,

   m_oFrame.CbSettings_Visibility               := 1,

end,

//##############################################################################

//##############################################################################

// Oberflächen-Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// LoadGUI lädt sämtliche Komponenten die für die Oberfläche benötigt werden

// @Result: null

//******************************************************************************

function LoadGUI()

| oQuery |

   startseq

      m_oForm         := CreateObject('TFormEx'),

      m_oFrame        := CreateObject('TBeCbMailAccountConfigFrame',,

                                      m_oForm, m_oForm),

      m_oForm.Height  := 600,

      m_oForm.Width   := 500,

      m_oFrame.Align  := alClient,

      // Gültiges E-Mail-Konto ermitteln

      oQuery := Sql(SELECT * FROM

                    WHERE TYP =

      if not (Eof(oQuery) and Bof(oQuery)) then

         m_oFrame.CbKey1 := oQuery:KEY1,

      endif,

      m_oFrame.CbInitFrame(),

   onerror

      DestroyObject(m_oForm),

      SetError('Fehler beim Laden der Oberfläche' + crlf + GetErrorText()),

   stopseq

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   LoadGUI(),

   SetDefaults(),

   ShowModal(m_oForm),

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + GetErrorText(), mtError),

stopseq,

Siehe auch:

TBeCbCustomConfigFrame

TBeCbMailServerConfigFrame

TBeCbAvailableMailAccountConfigFrame

TBeCbOutlookSyncAccountConfigFrame

TBeCbAvailableOutlookSyncAccountConfigFrame


TBeCbMailImportedInfo

TBeCbMailImportedInfo

Im Business Object Event "Nach dem Import einer E-Mail" steht die Klasse TBeCbMailImportedInfo als ein Informations- und Transport-Objekt zur Verfügung. Die Klasse enthält Informationen über den soeben erfolgten E-Mail-Import. Außerdem können mittels der ImapOperations-Klasse zeitversetzte Aktionen auf dem Mail-Server ausgelöst werden.

Eigenschaften:

ImportedUId:C | UID der importierten E-Mail
CanDoImapOperations:L | zeigt an, ob Imap-Operationen ausgelöst werden können abhängig von Konten-Einstellungen
ImapMailBoxPath:C | Pfad der Mailbox, aus der die E-Mail importiert wurde
DuplicateMemoId:N | Memo-ID eines an Hand des E-Mail-Headers ermittelten Duplikats (im selben Konto)
DuplicateMemoIdsArray:A | Array mit Duplikats-Memo-IDs, die über alle Konten hinweg ermittelt wurden; Format: {{<GUID-String des empfangenden Kontos>, <MemoId>}, ...}
ImapOperations:O (TBeCbImapMailOperations) | ermöglicht die Definition von Imap-Operationen

Siehe auch:

Business Object Event "Nach dem Import einer E-Mail"


TBeCbMailServerConfigFrame

TBeCbMailServerConfigFrame

Oberflächen-Konfigurationsbereich für E-Mail-Server.

Eigenschaften
CbAccountDesc_Visibility:N | Sichtbarkeit der Bezeichnung
CbConnectionType_Visibility:N | Sichtbarkeit der Verbindungs-Typs
CbHostname_Visibility:N | Sichtbarkeit des Servers
CbEncryptionMode_Visibility:N | Sichtbarkeit der Verschlüsselung
CbPort_Visibility:N | Sichtbarkeit des Ports
CbTimeout_Visibility:N | Sichtbarkeit des Timeout

Funktionen und Methoden

(siehe TBeCbCustomConfigFrame)

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Codeblock-Beispiel für die Klasse TBeCbMailAccountConfigFrame

//##############################################################################

//##############################################################################

| m_oForm, m_oFrame, m_nSettingsType |

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_nSettingsType := 5200,

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Setzen der Standardeinstellungen

// @Result: null

//******************************************************************************

function SetDefaults()

   // Sichtbarkeiten der Oberflächen Controls

   m_oFrame.CbConnectionType_Visibility := 1,

   m_oFrame.CbHostname_Visibility       := 1,

   m_oFrame.CbEncryptionMode_Visibility := 2,

   m_oFrame.CbPort_Visibility           := 2,

   m_oFrame.CbTimeout_Visibility        := 2,

end,

//##############################################################################

//##############################################################################

// Oberflächen-Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// LoadGUI lädt sämtliche Komponenten die für die Oberfläche benötigt werden

// @Result: null

//******************************************************************************

function LoadGUI()

| oQuery |

   startseq

      m_oForm         := CreateObject('TFormEx'),

      m_oFrame        := CreateObject('TBeCbMailServerConfigFrame',,

                                      m_oForm, m_oForm),

      m_oForm.Height  := 600,

      m_oForm.Width   := 500,

      m_oFrame.Align  := alClient,

      // Gültiges E-Mail-Konto ermitteln

      oQuery := Sql(SELECT * FROM

                    WHERE TYP =

      if not (Eof(oQuery) and Bof(oQuery)) then

         m_oFrame.CbKey1 := oQuery:KEY1,

      endif,

      m_oFrame.CbInitFrame(),

   onerror

      DestroyObject(m_oForm),

      SetError('Fehler beim Laden der Oberfläche' + crlf + GetErrorText()),

   stopseq

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   LoadGUI(),

   SetDefaults(),

   ShowModal(m_oForm),

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + GetErrorText(), mtError),

stopseq,

Siehe auch:

TBeCbCustomConfigFrame

TBeCbMailAccountConfigFrame

TBeCbAvailableMailAccountConfigFrame

TBeCbOutlookSyncAccountConfigFrame

TBeCbAvailableOutlookSyncAccountConfigFrame


TBeCbMemoDuplicatedInfo

TBeCbMemoDuplicatedInfo

Im Business Objekt Event "nach dem Duplizieren" steht die Klasse TBeCbMemoDuplicatedInfo als ein Informations- und Transport-Objekt zur Verfügung. Die Klasse enthält Informationen über das Quell-Business Objekt . Außerdem kann der Duplizierungs-Vorgang über verschiedene Eigenschaften gesteuert werden.

Eigenschaften:

SourceBo:TBeMemoBO | Quell-Business Objekt
MemoDuplicateMode:TBeMemoDuplicateMode | Modus des Vorgangs der den Event ausgelöst hat (readonly) o mdmReply // "Antworten" o mdmForward // "Weiterleiten" o mdmReplyAll // "Allen Antworten" o mdmSequence // "Folge-Memo" erstellt
WriteSourceMemoHistory:L | History-Eintrag für Quell-Memo schreiben. default = true, bei "Folge-Memo" = false
MarkSourceMemoAsRead:L | Quell-Memo für den Benutzer als gelesen markieren default = true, bei "Folge-Memo" = false
TakeOverOldContent:L | (Memo)-Inhalt des Quell-Memos übernehmen default = true, bei "Folge-Memo" = false
TakeOverSourceAttachments:L | "echte" Anhänge des Quell-Memos übernehmen default = false
ExceptOnSourceMemoLocked:L | Exception auslösen und Vorgang abbrechen wenn Quell-Memo gesperrt ist. Wird nur geprüft wenn WriteSourceMemoHistory und/oder MarkSourceMemoAsRead aktiv ist. default = true, bei "Folge-Memo" = false
SubjectPrefix:C | Präfix das beim Antworten bzw. Weiterleiten dem Betreff vorangestellt wird (übersetzbar) bei Antworten per Default = 'AW:' bei Weiterleiten per Default = 'WG:' bei Folge-Memo erstellen per Default = ''
NewContentFont:O | Font-Objekt über welches die Schrift im Bereich über dem Header gesteuert werden kann; (Nur Font-Name und Font-Größe können gesetzt werden) default = Arial;10
NewContentAsRTF:C | Neuer Memo-Inhalt der oberhalb von allem Anderen eingefügt wird
PrevContentHeaderArray:A | Array mit Informationen aus denen ein Header erzeugt und zwischen dem alten und neuen Inhalt eingefügt wird. Der "Präfix"-Teil wird immer "fett" und mit 2 Leerzeichen zum Text dargestellt. Aufbau: {{Typ,"Präfix:","Text"}}; Typ: pchiFrom // Abender pchiSentDate // Erstellungs-Datum/Zeit pchiTo // Empfänger pchiCC // Kopie-Empfänger pchiSubject // Betreff pchiCustom
PrevContentHeaderFont:O | Font-Objekt über welches die Schrift des Headers gesteuert werden kann; (Nur Font-Name und Font-Größe können gesetzt werden) default = Arial;10
PrevContentHeaderAsRtf:C | Zusätzlicher Header-Text, welcher zwischen dem Header-Array und dem alten Inhalt eingefügt wird.

hier wird jeweils eingefügt:

NewContentAsRTF

PrevContentHeaderArray

PrevContentHeaderAsRtf

OldContent

Beispiel

// siehe Event "nach dem Duplizieren"

Siehe auch:

TBeMemoBO

Business Objekt Event "nach dem Duplizieren"


TBeCbOperationTimeLine

TBeCbOperationTimeLine

Die Klasse TBeCbOperationTimeLine stellt eine Zeitleiste zur Abbildung der Anwesenheit und Verfügbarkeit von Ressourcen (Personen oder Maschinen) dar.

Hintergrund:

Für die Berechnung von (Produktions-)Planungs-Szenarien etc. unter Berücksichtigung von

Ressourcen-Verfügbarkeit wird u.a. Information darüber benötigt, ob eine Ressource zum

Zeitpunkt x verfügbar (im Sinne von anwesend, nicht im Sinne von frei) ist oder nicht.

Des Weiteren stellt sich häufig die Frage, wie lange eine Ressource mit einem Arbeitsauftrag

belegt ist, wenn dieser zum Zeitpunkt x begonnen wird und y Stunden in Anspruch nimmt.

Die Klasse TBeCbOperationTimeLine stellt eine Kapselung von Funktionalität zur Beantwortung

dieser Fragestellungen und verwandter Fragen bereit. Üblicherweise würde man in einer

Planung mind. eine Instanz einer Anwesenheits-Zeitleiste je zur Verfügung stehender

Ressource halten.

Funktionsweise:

Für die Abbildung von Anwesenheiten und Arbeitszeit werden zwei Zeit-Typen unterscheiden.

Zeit-Typ "Kalenderzeit"

- Ein Kalenderzeitpunkt stellt, wie der Name sagt einen exakten Zeitpunkt im Kalender dar.

- Zur Abbildung im Codeblock wird der Variablen-Typ "DT" (DateTime) genutzt.

Zeit-Typ "Operationszeit"

- Eine Operationszeit hat den Charakter einer Zeit-Dauer-Angabe. Synonyme wären

"Arbeitszeit" bzw. "Arbeitsdauer".

Die Anwesenheits-Blöcke werden durch sog. "TimeItems" definiert. (siehe AddTimeItem).

Ein TimeItem hat einen Kalenderzeit-Start und ein Kalenderzeit-Ende.

Jeder Kalenderzeitpunkt wird nach der Initilisierung der Zeitleiste auf genau einen

Operationszeitpunkt abgebildet:

Nutzung:

Eine TBeCbOperationTimeLine muss vor der Nutzung mit den Anwesenheitsdaten

befüllt werden (siehe AddTimeItem). Anschließend müssen die Operations-Zeiten

berechnet werden (siehe CalcTimeLine). Jetzt können auf der Zeitleiste Berechnungen

wie z.B. OperationDurationBetween() durchgeführt werden.

Eigenschaften |
Precision:N | Präzision der Zeitrechnung. Muss definiert werden. Typ = Präzision eines DateTime-Variablen-Typs (DT)
HasAvailabilityData:L | Prüft, ob Anwesenheitsdaten definiert wurden.
BeginOfFirstAvailability | Ersten Zeitpunkt der Anwesenheit ermitteln.Kann erst nach Initialisierung der Zeitleiste abgefragt werden.
EndOfLastAvailability | Letzten Zeitpunkt der Anwesenheit ermitteln. Kann erst nach Initialisierung der Zeitleiste abgefragt werden.
Funktionen / Methoden |
AddTimeItem |
CreateTimeLine |
CalcTimeLine |
InitWithStandardTimeLine |
CalendarToOperation |
OperationToCalendar |
CalendarAdd |
CalendarSub |
AdjustCalendarToTimeLine |
OperationDurationBetween |

Beispiel

| oTimeLine:U,

  dStart:DT, dFinish:DT,

  dArbeitsdauer:DR,

  i |

// Kalenderzeit Start und Ende-Variablen für die TimeItems

dStart.Precision  := precMinutes,

dStart.DateTime   := Date() + (8/24),  // 08:00 Uhr

dFinish.Precision := precMinutes,

dFinish.DateTime  := Date() + (17/24), // 17:00 Uhr

// Zeitleiste erstellen

oTimeLine           := CreateObject('TBeCbOperationTimeLine'),

oTimeLine.Precision := precMinutes,

oTimeLine.CreateTimeLine(),

// Anwesenheiten eintragen für 2 Wochen ab heute

for i := 0 to 13 do

   // keine Anwesenheit am Samstag oder Sonntag

   if not (DoW(dStart.DateTime) = 7 or DoW(dStart.DateTime) = 1) then

      oTimeLine.AddTimeItem(dStart, dFinish),

   endif,

   dStart.DateTime  += 1,

   dFinish.DateTime += 1,

next,

// Operationszeiten berechnen lassen

oTimeLine.CalcTimeLine(),

// Infos ausgeben:

Writeln('Erster Anwesenheits-Zeitpunkt  ', oTimeLine.BeginOfFirstAvailability ),

Writeln('Letzter Anwesenheits-Zeitpunkt ', oTimeLine.EndOfLastAvailability ),

dStart.DateTime  := Date(),

dFinish.DateTime := Date() + 1,

Writeln('Anwesenheitsdauer heute        ', oTimeLine.OperationDurationBetween(dStart, dFinish)),

Writeln('Anwesenheitsdauer gesamt       ', oTimeLine.OperationDurationBetween(oTimeLine.BeginOfFirstAvailability, oTimeLine.EndOfLastAvailability)),

// Eine 12-stündige Arbeit die heute um 08:45 begonnen wird endet wann?

dStart.DateTime         := Date() + (8.75/24),

dArbeitsdauer.Precision := precMinutes,

dArbeitsdauer.Hours     := 12,

Writeln('12 h Arbeit fertig am / um     ', oTimeLine.CalendarAdd(dStart, dArbeitsdauer)),

Siehe auch:

TBeCbPCData


TBeCbOutlookSyncAccountConfigFrame

TBeCbOutlookSyncAccountConfigFrame

Oberflächen-Konfigurationsbereich für Outlook-Konten.

Eigenschaften
CbAccountDesc_Visibility:N | Sichtbarkeit der Konto-Bezeichnung
CbPersNo_Visibility:N | Sichtbarkeit des Mitarbeiterkalenders
CbProfileName_Visibility:N | Sichtbarkeit des Profilnamens
CbPassWord_Visibility:N | Sichtbarkeit des Passwort-Feldes
CbCalenderName_Visibility:N | Sichtbarkeit des Kalendernamens
CbTimeRangePast_Visibility:N | Sichtbarkeit des Vergangenheits-Synchronisationszeitraumes
CbTimeRangeFuture_Visibility:N | Sichtbarkeit des Zukunfts-Synchronisationszeitraumes

Funktionen und Methoden

(siehe TBeCbCustomConfigFrame)

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Codeblock-Beispiel für die Klasse TBeCbMailAccountConfigFrame

//##############################################################################

//##############################################################################

| m_oForm, m_oFrame, m_nSettingsType |

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_nSettingsType := 5100,

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Setzen der Standardeinstellungen

// @Result: null

//******************************************************************************

function SetDefaults()

   // Sichtbarkeiten der Oberflächen Controls

   m_oFrame.CbPersNo_Visibility          := 2,

   m_oFrame.CbCalenderName_Visibility    := 1,

   m_oFrame.CbTimeRangePast_Visibility   := 1,

   m_oFrame.CbTimeRangeFuture_Visibility := 1,

end,

//##############################################################################

//##############################################################################

// Oberflächen-Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// LoadGUI lädt sämtliche Komponenten die für die Oberfläche benötigt werden

// @Result: null

//******************************************************************************

function LoadGUI()

| oQuery |

   startseq

      m_oForm         := CreateObject('TFormEx'),

      m_oFrame        := CreateObject('TBeCbOutlookSyncAccountConfigFrame',,

                                      m_oForm, m_oForm),

      m_oForm.Height  := 600,

      m_oForm.Width   := 500,

      m_oFrame.Align  := alClient,

      // Gültiges E-Mail-Konto ermitteln

      oQuery := Sql(SELECT * FROM

                    WHERE TYP =

      if not (Eof(oQuery) and Bof(oQuery)) then

         m_oFrame.CbKey1 := oQuery:KEY1,

      endif,

      m_oFrame.CbInitFrame(),

   onerror

      DestroyObject(m_oForm),

      SetError('Fehler beim Laden der Oberfläche' + crlf + GetErrorText()),

   stopseq

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   LoadGUI(),

   SetDefaults(),

   ShowModal(m_oForm),

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + GetErrorText(), mtError),

stopseq,

Siehe auch:

TBeCbCustomConfigFrame

TBeCbMailAccountConfigFrame

TBeCbMailServerConfigFrame

TBeCbAvailableMailAccountConfigFrame

TBeCbAvailableOutlookSyncAccountConfigFrame


TBeCbPCData

TBeCbPCData

Die Klasse TBeCbPCData stellt Daten zur Verfügung, die üblicherweise für eine Ressourcen-Planung / Planungs-Simulation o.ä. benötigt werden.

In der aktuellen Ausbaustufe werden Ressourcen-Daten und darüber ressourcenspezifische Anwesenheiten zur Verfügung gestellt.

Eigenschaften |
Params:TBeCbPCParams | Zugriff auf die internen Parameter der Datenhaltung. Hierüber wird beispielsweise der zu ladende Zeitbereich definiert.
ResourceList:TBeCbPCResourceList | Zugriff auf die Liste der Ressourcen.
DocumentAddingErrorsOnly:L | Fehler in der Bearbeitung aufgrund von internen Duplikaten nur protokollieren und keinen Fehler auslösen
CheckOnDuplicatesIfSorted:L | Erweiterte Prüfungen auf interne Duplikate aktiveren
Funktionen / Methoden |
ReInit() | Datenhaltung (re-)initialisieren.
LoadTestData() | Testdaten laden.
LoadDataBaseData() | Daten aus der Datenbank in den Speicher von TBeCbPCData laden.
GetAddingErrors() | Alle protokollierten Fehler in der Bearbeitung auslesen

TBeCbPCParams

TBeCbPCResourceList

TBeCbPCResource

Übersicht:

Beispiel

| m_oCbPcData, m_oResourceList, m_dPlanningStart:DT |

//******************************************************************************

function ResourceTypToString(nResourceTyp)

  case nResourceTyp

    of cbrtPerson   :: Result := 'Person',

    of cbrtMaschine :: Result := 'Maschine',

  endcase,

end,

//******************************************************************************

// Infos über alle Ressourcen in der Liste ausgeben

//******************************************************************************

function PrintResourceList(oResourceList) // Klasse = TBeCbPCResourceList

| i, m_oCurResource, m_oCurTimeLine, m_dtStartAvail:DT, m_dtEndAvail:DT,

  m_drCompOperationTime:DR, cResDesc, cAvailText  |

   for i := 0 to oResourceList.Count - 1 do

      m_oCurResource := oResourceList.GetResourceByIndex(i), // Klasse = TBeCbPCResource

      // TimeLine der Ressourcen holen

      m_oCurTimeLine := m_oCurResource.OperationTimeLine,

      cResDesc := Str(i) + '. Ressource ' + crlf + crlf +

                  '   Bezeichnung   : ' + m_oCurResource.Description  + crlf +

                  '   Res.Typ       : ' + ResourceTypToString(m_oCurResource.ResType) + crlf +

                  '   Res.Id        : ' + Str(m_oCurResource.ResID ),

      // Information über die Anwesenheit der Ressource zusammenstellen

      if m_oCurTimeLine.HasAvailabilityData then

         m_dtStartAvail        := m_oCurTimeLine.BeginOfFirstAvailability,

         m_dtEndAvail          := m_oCurTimeLine.EndOfLastAvailability,

         m_drCompOperationTime := m_oCurTimeLine.OperationDurationBetween(m_dtStartAvail, m_dtEndAvail),

         cAvailText := '   Verfügbarkeit : ' + m_dtStartAvail.AsString + ' bis ' + m_dtEndAvail.AsString + crlf +

                       '   Operationszeit: Insgesamt ' + m_drCompOperationTime.AsString,

      else

         cAvailText := crlf + '   Keine Verfügbarkeitsdaten vorhanden !',

      endif,

      Writeln( cResDesc + crlf + cAvailText + crlf ),

   next,

end,

// Datenhaltung erzeugen

m_oCbPcData := CreateObject('TBeCbPCData'),

startseq,

   m_oCbPcData.ReInit(),

   // Planungs-Start = Monats-Beginn, 14 Tage Dauer

   // => die Angaben sind relevant für das Laden der Planungs-Daten

   m_dPlanningStart.Precision       := precMinutes,

   m_dPlanningStart.DateTime        := BoM(Date()),

   m_oCbPcData.Params.PlanningStart := m_dPlanningStart,

   m_oCbPcData.Params.PlanningDays  := 2,

   // Alternative 1: Test-Daten laden

   m_oCbPcData.LoadTestData(),

   // Alternative 2: DB-Daten laden

   // m_oCbPcData.LoadDataBaseData(),

   // Infos über Ressourcen ausgeben

   PrintResourceList(m_oCbPcData.ResourceList),

always,

   DestroyObject(m_oCbPcData),

stopseq,

Siehe auch:

TBeCbOperationTimeLine


TBeCbPCProdOrderInfo

TBeCbPCProdOrderInfo

Im Event "Kapazitätsanalyse: bei Berechnung Auftrags-Priorität" steht die Klasse TBeCbPCProdOrderInfo als ein Informations- und Transport-Objekt zur Verfügung.

Die Klasse enthält Informationen welche zur Berechnung der Auftrags Priorität benötigt werden.

Eigenschaften

Eigenschaften

Alle nachfolgenden Eigenschaften sind readonly außer "CbOrderCalcedPriority"

CbOrderID:N

Auftrags Datensatz-ID

CbOrderNo:N

Auftragsnummer

CbOrderQuant:N

Fertigungsmenge

CbOrderArtNo:C

Artikelnummer der Baugruppe

CbOrderCommissNo:S

Kommissions-Nr.

CbOrderState:N

Auftrags-Status

posActive | Auftrag ist in Bearbeitung, d.h. es sind bereits Buchungen erfolgt.
posCommissed | Die Auftragskarte ist teilweise oder komplett gedruckt, aber noch keine Buchungen vorhanden
posOpen | Auftragskarte noch nicht gedruckt

CbOrderDueDate:DT

Fertigstellungstermin

CbOrderDueDateMinus:DR

Auftrags-Zeitabstand zum Fertigungsauftragstermin

otCalender | Kalenderzeit
otCompanyOperation | Betriebszeit

CbOrderDueDateMinusType:N

otCalender otCompanyOperation (TPCTimeOffsetType)

CbOrderTermModus:N

Terminierungsmodus

tmBackward | Rückwärtsterminierung
tmForward | Vorwärtsterminierung

CbOrderMaxMove:DR

Max. Verschiebung

CbOrderPriority:N

Priorität (Feld Dab035:KAP_PRIORI)

CbArbgCountRelevant:N

Anzahl der für die Analyse relevanten Arbeitsgänge

CbArbgCountCurrentlyActive:N

Anzahl der Arbeitsgänge mit aktuell offener BDE-Buchung

CbArbgCountStateActive:N

Anzahl der Arbeitsgänge mit Ressourcen Anforderung im Status "Aktiv"

CbArbgCountResFix:N

Anzahl der Ressourcen-Fixierungen im Gesamt-Auftrag

CbArbgCountTimeFix:N

Anzahl der Startzeitpunkt-Fixierungen im Gesamt-Auftrag

CbArbgCountTimeAndResFix:N

Anzahl der Arbeitsgänge mit komplett-Fixierung (Ressource und Startzeitpunkt)

CbOrderCalcedPriority:N

vom Standard berechnete Priorität

Ereignisse

Event "Kapazitätsanalyse: bei Berechnung Auftrags-Priorität"

Beispiel

// siehe Event "Kapazitätsanalyse: bei Berechnung Auftrags-Priorität"

Siehe auch:

Event "Kapazitätsanalyse: bei Berechnung Auftrags-Priorität"


TbeCbPermissionBusinessController

TbeCbPermissionBusinessController

Verwendung:

Die Klasse dient zur Erstellung und Bearbeitung von Benutzerrollen und zur Rollenzuordnung von existierenden be-Usern.

Die Klasse steht nur im DEVELOPER-Modus zur Verfügung.

Eigenschaften

CbUserRole:O

BusinessObject, womit die Benutzerrolle bearbeitet werden kann

Funktionen und Methoden

CbInsertUserRole:C

Funktion zur Erstellung ein Benutzerrolle

aRoleName:C

aRoleKey:C

Name des Rolle

Key des Rolle

CbEditUserRole:L

Funktion zur Bearbeitung ein Benutzerrolle

aRoleKey:C

Key des Rolle

CbPostUserRole

Methode zum Speichern der Benutzerrolle

CbAddUserToRole

Funktion zur Rollenzuordnung von existierenden be-Usern

Beispiel

| oDM, aPermissionBC, cGUIDString |

aPermissionBC := CreateObject('TbeCbPermissionBusinessController', 'aPermissionBC', nil ,nil),

oDM := CreateObject('TBeDbGet', 'DM', nil, nil),

startseq

  aPermissionBC.CbDataModule := oDM,

  aPermissionBC.CbDataModule.CbTransaction_Begin(),

  //****************************************************************************

  // Anlegen einer Rolle

  //****************************************************************************

  cGUIDString := aPermissionBC.CbInsertUserRole('NEUE ROLLE2', 'NEUE_ROLLE_KEY2'),

  // aPermissionBC.CbUserRole.CbIsActive  := false, // DEFAULT = true

  // aPermissionBC.CbUserRole.CbDescription := 'NEUE ROLLE', // DEFAULT = LEER

  // aPermissionBC.CbUserRole.CbRoleKey := 'NEUER KEY', // DEFAULT = der gesetze Rollenname von CreateUserRole

  // aPermissionBC.CbUserRole.CbOnlyForAreas := 'MSK/ZGR', // DEFAULT = Rolle für Maske und Zugriff

  // aPermissionBC.CbUserRole.CbOnlyForAreas := 'MSK', // Rolle ist nur für Maske

  // aPermissionBC.CbUserRole.CbOnlyForAreas := 'ZGR', // Rolle ist nur für Zugriffe

  aPermissionBC.CbPostUserRole(),

  //****************************************************************************

  // Benutzer wird der erstellten Rolle hinzugefuegt

  //****************************************************************************

  aPermissionBC.CbAddUserToRole(65, cGUIDString),

  //****************************************************************************

  // erstellte Rolle wird bearbeitet

  //****************************************************************************

  if aPermissionBC.CbEditUserRole('NEUE_ROLLE_KEY2') then

    aPermissionBC.CbUserRole.CbIsActive  := false,

    // aPermissionBC.CbUserRole.CbDescription := 'GEANDERTE ROLLE',

    // aPermissionBC.CbUserRole.CbRoleKey := 'GEANDERTE KEY',

    // aPermissionBC.CbUserRole.CbOnlyForAreas := 'MSK/ZGR',

    // aPermissionBC.CbUserRole.CbOnlyForAreas := 'MSK',

    // aPermissionBC.CbUserRole.CbOnlyForAreas := 'ZGR',

    aPermissionBC.CbPostUserRole(),

  endif,

  aPermissionBC.CbDataModule.CbTransaction_Commit(),

always

   DestroyObject(oDM),

   DestroyObject(aPermissionBC),

stopseq,


TBeCbPermissionController

TBeCbPermissionController

Kapselung von Funktionen für die Verwendung von Benutzer-Rollen (RABAC) im Codeblock.

Eigenschaften

Eigenschaften

CbLogFileName:C

Name/Pfad der Log-Datei, in der beispielsweise der Verlauf der Migration protokolliert wird.

CbMigration:O

Unterobjekt, vom Typ TBeCbPermissionMigrationSubController, welches alle Migrations-Methoden kapselt.

ACHTUNG: Dieses Objekt wird ab einer bestimmten Master-Version wieder entfernt werden, da es nur zur Migration eines 6.0-Datenbestandes dient.

Funktionen und Methoden

CbIsActive():L

Prüft, ob RABAC aktiv ist.

CbUserHasRole():L

Prüft, ob ein bestimmter Benutzer einer bestimmten Rolle zugeordnet ist.

cRoleKey:C | Schlüssel der zu prüfenden Rolle
nUserNo:N | Nummer des Users, für den die Prüfung durchgeführt werden soll
nDepartment:N | Abteilung, für die die Zuordnung geprüft werden soll
nLocation:N | Standort, für den die Zuordnung geprüft werden soll

CbGetUserRoles():A

Liefert ein Array mit den Schlüsseln aller aktiven Rollen

nUserNo:N | Nummer des Users
nDepartment:N | Abteilung
nLocation:N | Standort

CbCanReadTable():L

Prüft, ob Datensätze in der Tabelle gelesen werden können

nWorkArea:N | Workarea der Tabelle
nUserNo:N | Nummer des Users
nDepartment:N | Abteilung
nLocation:N | Standort

CbCanEditTable():L

Prüft, ob Datensätze in der Tabelle geändert werden können

nWorkArea:N | Workarea der Tabelle
nUserNo:N | Nummer des Users
nDepartment:N | Abteilung
nLocation:N | Standort

CbCanInsertIntoTable():L

Prüft, ob Datensätze in die Tabelle eingefügt werden können

nWorkArea:N | Workarea der Tabelle
nUserNo:N | Nummer des Users
nDepartment:N | Abteilung
nLocation:N | Standort

CbCanDeleteFromTable():L

Prüft, ob Datensätze aus der Tabelle gelöscht werden können

nWorkArea:N | Workarea der Tabelle
nUserNo:N | Nummer des Users
nDepartment:N | Abteilung
nLocation:N | Standort

CbCanReadField():L

Prüft, ob das Feld in der Tabelle gelesen werden kann

nWorkArea:N | Workarea der Tabelle
cFieldName:C | Name des Feldes
nUserNo:N | Nummer des Users
nDepartment:N | Abteilung
nLocation:N | Standort

CbCanEditField():L

Prüft, ob das Feld in der Tabelle geändert werden kann

nWorkArea:N | Workarea der Tabelle
cFieldName:C | Name des Feldes
nUserNo:N | Nummer des Users
nDepartment:N | Abteilung
nLocation:N | Standort

Beispiel

|

  cLogFileName, oPermissionController,

  bReset, bPreprocess, bCleanup,

  bMigrate, bMigrateUsers, bMigrateMasks, bMigratePermissions

|

bReset              := True,

bPreprocess         := True,

bCleanup            := False,

bMigrate            := True,

bMigrateUsers       := True,

bMigrateMasks       := True,

bMigratePermissions := True,

//******************************************************************************

// Log-Funktion

//******************************************************************************

function Log(cMessage)

   ProcessMsg(),

   WriteLn(cMessage),

   RABAC_Log(cLogFileName, cMessage),

   ProcessMsg(),

end,

cLogFileName          := 'C:\be_debug\rabac_migration.log',

oPermissionController := CreateObject('TBeCbPermissionController'),

startseq

   oPermissionController.CbLogFileName := cLogFileName,

   // --------------------------------------------------------------------------

   if bReset then

      Log('Resetting RABAC Data ...'),

      oPermissionController.CbMigration.CbReset(),

   endif,

   // --------------------------------------------------------------------------

   if bPreprocess then

      if oPermissionController.CbMigration.CbPreprocessDabMSK() then

         Log('Preprocess DabMSK: OK'),

      else

         Log('Preprocess DabMSK: FAILED'),

         bMigrate := False,

         if bCleanup then

            oPermissionController.CbMigration.CbCleanupDabMSK(),

         endif,

      endif,

      if oPermissionController.CbMigration.CbPreprocessDabPWD() then

         Log('Preprocess DabPWD: OK'),

      else

         Log('Preprocess DabPWD: FAILED'),

         bMigrate := False,

         if bCleanup then

            oPermissionController.CbMigration.CbCleanupDabPWD(),

         endif,

      endif,

   endif,

   // --------------------------------------------------------------------------

   if bMigrate and

      (bMigrateUsers or bMigrateMasks or bMigratePermissions) then

      Log('Running Migration ...'),

      if bMigrateUsers then

         Log('Migration: Users'),

         oPermissionController.CbMigration.CbMigrateUsers(),

      endif,

      if bMigrateMasks then

         Log('Migration: Masks'),

         oPermissionController.CbMigration.CbMigrateMasks(),

      endif,

      if bMigratePermissions then

         Log('Migration: Permissions'),

         oPermissionController.CbMigration.CbMigratePermissions(),

      endif,

      Log('Migration: DONE'),

      Log('Running CleanupPermissionRoles'),

      oPermissionController.CbMigration.CbCleanupPermissionRoles(),

      Log('CleanupPermissionRoles: DONE'),

 else

      Log('Skipping Migration ...'),

   endif,

always

   DestroyObject(oPermissionController),

stopseq,

Siehe auch:

TBeCbPermissionMigrationSubController


TBeCbPermissionMigrationSubController

TBeCbPermissionMigrationSubController

Sammlung von Funktionen zur Migration von der alten Berechtigungs-Logik nach RABAC.

HINWEIS: Diese Klasse kann nicht im Codeblock erzeugt werden. Jedoch ist eine Instanz dieser Klasse in der Klasse TBeCbPermissionController vorhanden.

ACHTUNG: Diese Klasse dient nur für die Migration und wird ab einer bestimmten Master-Version wieder entfernt werden!

Eigenschaften

Funktionen und Methoden
CbReset() | Setzt RABAB zurück/Löscht alle RABAC-Daten.
CbPreprocessDabMSK():L | Prüft ob die Datensätze in der DabMSK migrierbar sind.
CbPreprocessDabPWD():L | Prüft ob die Datensätze in der DabPWD migrierbar sind.
CbCleanupDabMSK() | Löscht alle nicht migrierbaren Datensätze in der DabMSK.
CbCleanupDabPWD() | Löscht alle nicht migrierbaren Datensätze in der DabPWD.
CbCleanupPermissionRoles() | Löscht alle überflüssigen Rollen, d.h. Rollen, für die keine Berechtigungen existieren.
CbMigrateUsers() | Migriert die Benutzer
CbMigrateMasks() | Migriert designbare Formulare/Masken.
CbMigratePermissions() | Migriert alle weiteren Berechtigungen (z.B. Für Formular-Actions und Modul-Logins)

Beispiel

|

  cLogFileName, oPermissionController,

  bReset, bPreprocess, bCleanup,

  bMigrate, bMigrateUsers, bMigrateMasks, bMigratePermissions

|

bReset              := True,

bPreprocess         := True,

bCleanup            := False,

bMigrate            := True,

bMigrateUsers       := True,

bMigrateMasks       := True,

bMigratePermissions := True,

//******************************************************************************

// Log-Funktion

//******************************************************************************

function Log(cMessage)

   ProcessMsg(),

   WriteLn(cMessage),

   RABAC_Log(cLogFileName, cMessage),

   ProcessMsg(),

end,

cLogFileName          := 'C:\be_debug\rabac_migration.log',

oPermissionController := CreateObject('TBeCbPermissionController'),

startseq

   oPermissionController.CbLogFileName := cLogFileName,

   // --------------------------------------------------------------------------

   if bReset then

      Log('Resetting RABAC Data ...'),

      oPermissionController.CbMigration.CbReset(),

   endif,

   // --------------------------------------------------------------------------

   if bPreprocess then

      if oPermissionController.CbMigration.CbPreprocessDabMSK() then

         Log('Preprocess DabMSK: OK'),

      else

         Log('Preprocess DabMSK: FAILED'),

         bMigrate := False,

         if bCleanup then

            oPermissionController.CbMigration.CbCleanupDabMSK(),

         endif,

      endif,

      if oPermissionController.CbMigration.CbPreprocessDabPWD() then

         Log('Preprocess DabPWD: OK'),

      else

         Log('Preprocess DabPWD: FAILED'),

         bMigrate := False,

         if bCleanup then

            oPermissionController.CbMigration.CbCleanupDabPWD(),

         endif,

      endif,

   endif,

   // --------------------------------------------------------------------------

   if bMigrate and

      (bMigrateUsers or bMigrateMasks or bMigratePermissions) then

      Log('Running Migration ...'),

      if bMigrateUsers then

         Log('Migration: Users'),

         oPermissionController.CbMigration.CbMigrateUsers(),

      endif,

      if bMigrateMasks then

         Log('Migration: Masks'),

         oPermissionController.CbMigration.CbMigrateMasks(),

      endif,

      if bMigratePermissions then

         Log('Migration: Permissions'),

         oPermissionController.CbMigration.CbMigratePermissions(),

      endif,

      Log('Migration: DONE'),

      Log('Running CleanupPermissionRoles'),

      oPermissionController.CbMigration.CbCleanupPermissionRoles(),

      Log('CleanupPermissionRoles: DONE'),

 else

      Log('Skipping Migration ...'),

   endif,

always

   DestroyObject(oPermissionController),

stopseq,

Siehe auch:

TBeCbPermissionController


TBeCbProductResolving

TBeCbProductResolving

Funktionalität für die Produktauflösung bzw. des Bauzustandes eines Serien-Nr. Artikels.

Eigenschaften

ArtNo:C

Artikel-Nummer

BatchNo:C

Serien-Nummer des Artikels

CalcOnlySerialNoArticles:L

Berechnungen und Auflösungen nur für Serien-Nummer Artikel durchführen

Default = False

CalcUnambiguousSerialNoBooking:L

Berechnung für die Ermittlung von "eindeutige Serien-Nummer Buchung" ausführen

Default = False

Funktionen / Methoden

CreateMemView:O

MemTable für Ausgabe erzeugen

aOwner:O

Owner der MemTable

CreateMemView_Extended:O

Erweiterte MemTable für Ausgabe erzeugen (für Berechnung von "eindeutigen Serien-Nummer Buchungen" notwendig)

aOwner:O

Owner der MemTable

Validate_BatchNo:L

Artikel Serien-Nummer prüfen ob diese für die Berechnung erlaubt ist

aArtNo:C | Artikel-Nummer
aBatchNo:C | Serien-Nummer des Artikels

Validate_ArtNo:L

Artikel prüfen ob dieser gültig ist

aArtNo:C | Artikel-Nummer
aOnlySerialNoArticle:L | Prüfung nur für Serien-Nummer Artikel erlauben

ValidateAll:L

Alle gesetzten Eigenschaften validieren

Execute

Berechnung ausführen (Produktauflösung)

TransferResult

Berechnetes Ergebnis in eine MemTable übertragen

aDestMemView:O | MemTable
aWithHeaderLine:L | Kopfzeile einfügen
aWithNeutralizedBookings:L | Alle ermittelten Buchungen einfügen
aOnlyBatchArticles:L | Nur Buchungen von Serien-Nr./Chargen-Nr. Artikeln einfügen

TransferMaterialListResult

Material-Liste vom berechnetem Ergebnis in eine MemTable übertragen

aDestMemView:O | MemTable
aWithHeaderLine:L | Kopfzeile einfügen
aOnlyBatchArticles:L | Nur Buchungen von Serien-Nr./Chargen-Nr. Artikeln einfügen

DataModule:O

Gibt das intern verwendete DatenModul zurück

Beispiel

//******************************************************************************

// Beispiel für Produktauflösung

//******************************************************************************

|oProdRes, oMemRes, bShowOnlyBatch|

oProdRes := CreateObject('TBeCbProductResolving'),

startseq

   bShowOnlyBatch := False,

   oMemRes := oProdRes.CreateMemView(oProdRes),

   oProdRes.ArtNo   := 'PC',

   oProdRes.BatchNo := '0909',

   oProdRes.CalcOnlySerialNoArticles       := False,

   oProdRes.CalcUnambiguousSerialNoBooking := False,

   if oProdRes.ValidateAll() then

      oProdRes.Execute(),

      oProdRes.TransferResult(oMemRes, True, False, bShowOnlyBatch),

      oProdRes.TransferMaterialListResult(oMemRes, True, bShowOnlyBatch),

      Browse(, oMemRes),

   else

      Meld('Artikel ' + oProdRes.ArtNo + ' mit der Serien-Nr. ' + oProdRes.BatchNo + ' ist ungültig!'),

   endif,

always

   DestroyObject(oProdRes),

stopseq,

//******************************************************************************

// Beispiel für Bauzustand

//******************************************************************************

|oProdRes, oMemRes, bAllBookings, bOnlySerialNoArticles|

oProdRes := CreateObject('TBeCbProductResolving'),

startseq

   bAllBookings          := False,

   bOnlySerialNoArticles := False,

   oMemRes := oProdRes.CreateMemView_Extended(oProdRes),

   oProdRes.ArtNo   := 'PC',

   oProdRes.BatchNo := '0909',

   oProdRes.CalcOnlySerialNoArticles       := bOnlySerialNoArticles,

   oProdRes.CalcUnambiguousSerialNoBooking := False,

   if oProdRes.ValidateAll() then

      oProdRes.Execute(),

      oProdRes.TransferResult(oMemRes, False, bAllBookings, True),

      Browse(, oMemRes),

   else

      Meld('Artikel ' + oProdRes.ArtNo + ' mit der Serien-Nr. ' + oProdRes.BatchNo + ' ist ungültig!'),

   endif,

always

   DestroyObject(oProdRes),

stopseq,


TBeCBRegExpr

TBeCBRegExpr

Klasse zum Suchen (und Ersetzen) in einem Text mit Hilfe von regulären Ausdrücken.

Hinweis:

Allgemeine Dokumentation zu regulären Ausdrücken z.B. unter http://www.perl.com/doc/manual/html/pod/perlre.html

Eigenschaften:

Allgemeine-Eigenschaften

SearchText:C Beliebige Zeichenkette.

SearchExpression:C Regulärer Suchausdruck.

ReplaceText:C Zeichenkette, mit der bei einem Treffer ersetzt werden soll.

UseSingleLine:L Behandle den Zielstring als einzelne Zeile, default = false.

UseMultiLine:L Behandle den Zielstring als mehrzeiligen String, default = true.

UseCaseSensitive:L Groß- und Kleinschreibung beachten, default = false.

Matches:A Array mit Suchtreffer (nur lesend)

Aktive-Eigenschaften (Methoden)

ExecSearch Suche ausführen (Rückgabe true/false, Eigenschaft Matches wird gefüllt)

ExecSeachNext Weitersuchen (Rückgabe true/false, Eigenschaft Matches wird gefüllt)

Replace Suchen und Ersetzen (unabhängig von ExecSearch/ExecSearchNext)

Beispiel

|oObj|

startseq,

   oObj            := CreateObject('TBeCBRegExpr'),

   //------ Suche nach allen EMail Adressen

   oObj.SearchText := 'Lorem info@dontenwill.de ipsum dolor sit amet, consetetur' + crlf,

   oObj.SearchText += 'sadipscing elitr, abc@dontenwill.de tempor invidunt ut',

   oObj.SearchExpression := '[\w-]+@([\w-]+\.)+[\w-]+',

                         // beliebige Anzahl alphanum. Zeichen (inkl. -_) +

                         // @ +

                         // beliebige Anzahl alphanum. Zeichen mit nachfolgendem '.' +

                         // beliebige Anzahl alphanum. Zeichen

   if oObj.ExecSearch then

      writeln(oObj.Matches[1]),

      while oObj.ExecSearchNext do

         writeln(oObj.Matches[1]),

      end,

   endif,

   //------ Suchen

   writeln(crlf + crlf + 'Suchen

   oObj.SearchText := 'ArtNr: Y-98498'          + crlf +

                      'Seriennummer: SN1234566' + crlf +

                      'ArtNr: D-12412'          + crlf +

                      'Seriennummer: SN1234567' + crlf +

                      'ArtNr: X-25792'          + crlf +

                      'Seriennummer: SN1234568' + crlf,

   // Suchmuster:

   // X oder Y oder Z gefolgt von '-' gefolgt von genau 5 Ziffern (0-9)

   oObj.SearchExpression := '[X-Z]-[0-9]{5}',

   oObj.ReplaceText      := 'A-11111',

   writeln(oObj.Replace),

always

   DestroyObject(oObj),

stopseq,


TBeCBSerialNoReconstruction

TBeCBSerialNoReconstruction

Klasse zum Umbau eines Seriennr.- Artikels.

Eigenschaften:

Allgemeine-Eigenschaften

ArtNoOld: C Bisherige Artikelnummer

ArtNoNew: C Neue Artikelnummer

SerialOld: C Bisherige Seriennummer (Kommissnr.)

SerialNew: C Neue Seriennummer (Kommissnr.)

DataModule: O Zugewiesenes Datenmodul

Quiet: L Ausführungsmodus

True: Ausführung ohne Dialoge, nur Exceptions

False: Dialogmeldungen

Aktive-Eigenschaften (Methoden)

Execute:L Ausführen der Umbuchung
True = Einstellungen okay

--> Buchung durchgeführt
False = Fehler bei Einstellungen oder Buchung

-->keine Buchung durchgeführt

Validate:L Prüfung der Parameter (Artikel-, Seriennr. alt und neu)

Hinweis:

- Datenmodul muss erzeugt und zugewiesen werden.

- Umbuchung muss in gestarteter Transaktion ablaufen.

- Bisheriger Seriennr.- Artikel muss sich auf Lager befinden / im Bestand sein.

- Neuer Seriennr.- Artikel darf noch nicht auf Lager sein.

- Die neue Artikelnr. muss die Seriennr.-Verwaltung aktiviert haben

- Umbau erfolgt durch Angabe einer neuen Artikel und/oder neuen Seriennr.

Beispiel

function Umbau(cArtNoOld, cSerialOld, cArtNoNew, cSerialNew)

  |oUmbau, oDM|

  oDM    := CreateObject("TBeDBGet"),

  startseq,

     oUmbau := CreateObject("TBeCBSerialNoReconstruction"),

     startseq,

        startseq,

           oUmbau.DataModule := oDM,

           oUmbau.ArtNoOld   := cArtNoOld,

           oUmbau.ArtNoNew   := cArtNoNew,

           oUmbau.SerialOld  := cSerialOld,

           oUmbau.SerialNew  := cSerialNew,

           DbStartTrans(oDM.AdsConnection),

           oUmbau.Execute,

           DbCommit(oDM.AdsConnection),

        onerror,

           if DbInTrans(oDM.AdsConnection) then

              DbRollback(oDM.AdsConnection),

           endif,

           SetError('Umbau nicht erfolgreich: ' + GetErrorText()),

        stopseq,

     always

        DestroyObject(oUmbau),

     stopseq,

  always

    DestroyObject(oDM),

  stopseq,

end,

Umbau('0815', '4711', '0815' , '4712'),


TbeCbSFTP

TbeCbSFTP

Klasse zur Kommunikation mit SFTP-Diensten

SFTP ist ein File-Transfer-Protokoll, welches SSH und TCP/IP nutzt.

Hinweis

Remote Pfade und Remote Filename müssen als Verzeichnis-Separator den Schrägstrich und nicht den Backslash nutzen, z.B: user/sub/date/datei.txt

Falls eine Anmeldung mit einer Privat-Schlüssel-Datei erfolgen soll, existiert die Methode AuthenticateByFile(), die auch einen eigenen Parameter für ein Kennwort besitzt. Falls jedoch die Passwort-Eigenschaft des Objekts gesetzt ist, wird ein vorheriger Aufruf der Funktion AuthenticateByFile() ignoriert.

Eigenschaften:

Eigenschaften

HostName:C

SFTP Server-Name: Angabe entweder IP-Adresse oder Domain-Name möglich.

z.B: 192.167.10.10 oder myserver.mydomain

Muss eingegeben werden.

Port:N

SFTP Server-Port
Default: 22

User:C

SFTP Benutzername

Password:C

SFTP Benutzer-Kennwort

KeyHash:C

Standardmäßig Hash von Privat-Schlüssel für Überprüfung.
Read-Only

Timeout:N

Timeout der TCP Verbindung in Sekunden
Default: 15

KeepAlive:L

TCP "Keep-Alive" Pakete schicken
Default: true

LoggingActive:L

Internes Logging einschalten. Log zu [image] LogText und [image] FullLogText schreiben
Default: false

LogText:O

Output Objekt TStrings, das speichert interne Logging-Output, falls es mit [image] LoggingActive eingeschaltet wurde.

FullLogText:C

Output String, das speichert interne Logging-Output, falls es mit [image] LoggingActive eingeschaltet wurde.

DirectoryList:O

Output Objekt TList, das speichert Ergebnis vom letzten Aufruf der [image] OpenDirectory()

Verfügbare Ereignisse

OnValidateServerKey

Beim Validieren des SSH-Schlüssels des Servers

Funktionen und Methoden

AuthenticateByFile(aFileName:C, aPassword:C):C

Setzt die Authentifizierung mit Privat-Schlüssel-Datei an. Gibt MD5-Hash vom eingegebenen Privat-Schlüssel-Datei.
> Pfad zur Privat-Schlüssel-Datei.

> Kennwort für Privat-Schlüssel
Falls kein Kennwort gebraucht wird, um diese Datei zu lesen, benutzen Sie leer String

Connect()

Erstellt Verbindung um Eigenschaften

Disconnect()

Beendet Verbindung

OpenDirectory(aPath:C):A

Gibt ein Array aus, der die Namen, Größen und Daten der letzten Änderungen von die Dateien im Remote-Pfad beinhaltet.

RemoveFile(aFileName:C)

Löscht Remote-Datei

CreateDir(aDirName:C)

Erzeugt neue Remote-Verzeichnis

RemoveDir(aDirName:C, aRecursive:B)

Löscht Remote-Verzeichnis

RenameFile(aOldPath:C, aNewPath:C)

Verschiebung oder Umbenennung einem Remote-Datei oder einem Remote-Verzeichnis

DownloadFile(aRemoteFile:C, aLocalFile:C, aOverwrite:L)

Downloaded Remote-Datei zu Lokal-Datei, falls das Local-Datei existiert muss aOverwrite das Wert true haben

UploadFile(aLocalFile:C, aRemoteFile:C, aOverwrite:L)

Uploaded Lokal-Datei zu Remote-Datei, falls das Remote-Datei existiert muss aOverwrite das Wert true haben

Beispiel

|oSFTP, bUseKeyFile, aVerzeichnis, aFile|

oSFTP := CreateObject("TbeCbSFTP"),

oSFTP.HostName := '192.167.10.10',

oSFTP.Port     := 22,

oSFTP.User     := 'MyName',

if bUseKeyFile then

  oSFTP.AuthenticateByFile('Pfad_zu_privat_key\privat_file_name', 'KeyPassword'),

else

  oSFTP.Password := 'MyPassword',

endif,

function VerifyKey(oSender,aKeyHash,aValue),

  if aKeyHash = '01:23:45:67:89:ab:cd:ef:01:23:34:45:67:89:ab:cd:ef:01:23:34' then

    aValue := true,

  else

    Writeln('Unknwon server key: ' + aKeyHash),

  endif,

end,

AssignEvent(oSFTP,"OnValidateServerKey","VerifyKey"),

oSFTP.Connect(),

aVerzeichnis := oSFTP.OpenDirectory(""), // default Verzeichnis lesen

foreach aFile in aVerzeichnis do

  if Left(aFile[1],1) = '<' then

    Writeln('Directory Name: ' + aFile[1]),

  else

    Writeln('File Name: ' +  aFile[1] + ' Size: ' +Str(aFile[2]) + ' Datum der letzten Änderung: ' + DateTimeToStr(aFile[3])),

  endif

end,

oSFTP.Disconnect(),

Siehe auch:

SFTPDelete()

SFTPDownload()

SFTPUpload()

SFTPDir()

SFTPRename()


TBeCbTCPClient

TBeCbTCPClient

Die Klasse TBeCbTCPClient ermöglicht die Kommunikation auf Basis einer TCP/IP-Socket-Verbindung mit einem TCP-Server.

Die Klasse stellt Funktionen und Methoden zum Verbindungsaufbau und zum Lesen und Schreiben von Daten über bestehende Verbindungen zur Verfügung.

Hinweis: Derzeit wird nur Version 4 des IP-Protokolls unterstützt.

Eigenschaften:

Eigenschaften

CbConnectTimeout:N

Timeout in Millisekunden für den Verbindungsaufbau (Default: -1: kein Timeout)

CbReadTimeout:N

Timeout in Millisekunden für das Lesen von Daten (Default: -1: kein Timeout)

CbHost:C

IP-Adresse oder Name des Host, mit dem kommuniziert werden soll. (Default: "")

Dieser Eigenschaft kann nur ein String zugewiesen werden, der nicht leer ist.

CbPort:N

Port auf dem eine Verbindung mit dem angegebenen Host aufgebaut werden soll. (Default: -1)

Dieser Eigenschaft können nur Werte zwischen 0 und 65535 zugewiesen werden.

Funktionen / Methoden

CbConnect()

Stellt eine Verbindung zu einem TCP-Server unter Verwendung der Werte der Eigenschaften CbHost und CbPort her.

Kann innerhalb der durch den Wert der Eigenschaft CbConnectTimeout definierten Zeitraums keine Verbindung zum TCP-Server erstellt werden, führt dies zu einer Exception.

Der Aufruf dieser Methode für einen TCP-Client, für den bereits eine Verbindung zu einem TCP-Server besteht, führt zu einer Exception.

CbDisconnect()

Löst eine bestehende Verbindung zwischen dem TCP-Client und einen TCP-Server.

Der Aufruf dieser Methode für einen TCP-Client, für den keine Verbindung zu einem TCP-Server besteht, führt zu keiner Exception.

CbConnected():L

Liefert:

True - falls für den TCP-Client einer Verbindung zu einem TCP-Server besteht.

False - sonst

CbReadLn():C

Liest aus der bestehenden Verbindung zwischen TCP-Client und TCP-Server eine Zeile mit einem ANSI-String und liefert den Inhalt der Zeile (ohne Zeilenumbruch).

Kann innerhalb der durch den Wert der Eigenschaft CbReadTimeout definierten Zeitraums keine Zeile über die Verbindung gelesen werden, führt dies zu einer Exception.

CbWriteLn()

Schreibt in die bestehende Verbindung zwischen TCP-Client und TCP-Server eine Zeile mit dem übergebenen ANSI-String.

aAnsiString:C

ANSI-String (ohne Zeilenumbruch), dessen Inhalt in einer Zeile an der TCP-Server übermittelt werden soll.

CbReadLnUTF8():C

Liest über die bestehende Verbindung zwischen TCP-Client und TCP-Server eine Zeile mit einem UTF8-String und liefert den Inhalt der Zeile (ohne Zeilenumbruch).

Kann innerhalb der durch den Wert der Eigenschaft CbReadTimeout definierten Zeitraums keine Zeile über die Verbindung gelesen werden, führt dies zu einer Exception.

CbWriteLnUTF8()

Schreibt in die bestehende Verbindung zwischen TCP-Client und TCP-Server eine Zeile mit dem übergebenen UTF8-String.

aUTF8String:C

UTF8-String (ohne Zeilenumbruch), dessen Inhalt in einer Zeile an den TCP-Server übermittelt werden soll.

CbReadCurrentBufferAsAnsiString():C

Liest über die bestehende Verbindung zwischen TCP-Client und TCP-Server einen ANSI-String und liefert dessen Inhalt.

Kann innerhalb der durch den Wert der Eigenschaft CbReadTimeout definierten Zeitraums kein ANSI-String über die Verbindung gelesen werden, liefert die Funktion einen leeren ANSI-String.

CbReadCurrentBufferAsUTF8String():C

Liest über die bestehende Verbindung zwischen TCP-Client und TCP-Server einen UTF8-String und liefert dessen Inhalt.

Kann innerhalb der durch den Wert der Eigenschaft CbReadTimeout definierten Zeitraums kein UTF8-String über die Verbindung gelesen werden, liefert die Funktion einen leeren UTF8-String.

CbWriteFile()

Schreibt in die bestehende Verbindung zwischen TCP-Client und TCP-Server den Inhalt der Datei mit dem übergebenen Namen.

aFileName:C

Name der Datei, deren Inhalt an den TCP-Server übermittelt werden soll.

CbWriteAnsiString()

Schreibt in die bestehende Verbindung zwischen TCP-Client und TCP-Server eine Zeile mit dem übergebenen ANSI-String.

aAnsiString:C

ANSI-String, dessen Inhalt in einer Zeile an der TCP-Server übermittelt werden soll.

Beispiel

//******************************************************************************

// Öffnet eine TCP-Verbindung zum Localhost auf dem Port 5000.

// Übermittelt anschließend eine Zeile mit dem Text "test" an den TCP-Server und

// liest eine Zeile mit der Antwort des TCP-Servers.

// Hat der Client nach Ablauf von einer Sekunde keine Zeile empfangen, dann

// wird eine Exception ausgelöst und der Vorgang abgebrochen.

//******************************************************************************

|oCbTCPClient, cErrorText:C := "", cRead:C := ""|

oCbTCPClient := CreateObject("TBeCbTCPClient"),

StartSeq,

   StartSeq,

      oCbTCPClient.CbHost := "127.0.0.1",

      oCbTCPClient.CbPort := 5000,

      oCbTCPClient.CbReadTimeout := 1000,

      oCbTCPClient.CbConnect(),

      oCbTCPClient.CbWriteLn("test"),

      cRead := oCbTCPClient.CbReadLn(),

      oCbTCPClient.CbDisconnect(),

   OnError,

      cErrorText := GetErrorText(GetErrorObj()),

   StopSeq,

Always,

   DestroyObject(oCbTCPClient),

StopSeq,

//******************************************************************************

// Öffnet eine TCP-Verbindung zum Localhost auf dem Port 5000.

// Übermittelt anschließend eine Zeile mit dem Text "test" an den TCP-Server und

// liest einen ANSI-String mit der Antwort des TCP-Servers.

// Hat der Client nach Ablauf von einer Sekunde keinen ANSI-String empfangen,

// dann wird ein leerer ANSI-String zurückgegeben und erneut auf einen

// ANSI-String gewartet.

// Wurde ein ANSI-String mit einer Länge von mindestens zwei Zeichen empfangen,

// wird dieser ausgewertet.

//******************************************************************************

|oCbTCPClient, cErrorText:C := "", cRead:C := ""|

oCbTCPClient := CreateObject("TBeCbTCPClient"),

StartSeq,

   StartSeq,

      oCbTCPClient.CbHost := "127.0.0.1",

      oCbTCPClient.CbPort := 5000,

      oCbTCPClient.CbReadTimeout := 1000,

      oCbTCPClient.CbConnect(),

      oCbTCPClient.CbWriteLn("test"),

      while Len(cRead) < 2 do

         cRead += oCbTCPClient.CbReadCurrentBufferAsAnsiString(),

      end,

      oCbTCPClient.CbDisconnect(),

   OnError,

      cErrorText := GetErrorText(GetErrorObj()),

   StopSeq,

Always,

   DestroyObject(oCbTCPClient),

StopSeq,

if cRead = 'OK' then

   Meld("OK!"),

else

   Meld("NOT OK!"),

endif,

//******************************************************************************

// Öffnet eine TCP-Verbindung zum Localhost auf dem Port 5000.

// Übermittelt anschließend den Inhalt der Datei "test.txt" an den TCP-Server

// und liest eine Zeile mit der Antwort des TCP-Servers.

// Hat der Client nach Ablauf von einer Sekunde keine Zeile empfangen, dann

// wird eine Exception ausgelöst und der Vorgang abgebrochen.

//******************************************************************************

|oCbTCPClient, cErrorText:C := "", cRead:C := ""|

oCbTCPClient := CreateObject("TBeCbTCPClient"),

StartSeq,

   StartSeq,

      oCbTCPClient.CbHost := "127.0.0.1",

      oCbTCPClient.CbPort := 5000,

      oCbTCPClient.CbReadTimeout := 1000,

      oCbTCPClient.CbConnect(),

      oCbTCPClient.CbWriteFile("test.txt"),

      cRead := oCbTCPClient.CbReadLn(),

      oCbTCPClient.CbDisconnect(),

   OnError,

      cErrorText := GetErrorText(GetErrorObj()),

   StopSeq,

Always,

   DestroyObject(oCbTCPClient),

StopSeq,

//******************************************************************************

//

//******************************************************************************

|oCbTCPClient, cErrorText:C := "", cRead:C := ""|

oCbTCPClient := CreateObject("TBeCbTCPClient"),

StartSeq,

    StartSeq,

        oCbTCPClient.CbHost := "127.0.0.1",

        oCbTCPClient.CbPort := 5002,

        oCbTCPClient.CbConnect(),

        oCbTCPClient.CbWriteAnsiString("write"),

        oCbTCPClient.CbDisconnect(),

    OnError,

        cRead := GetErrorText(GetErrorObj()),

    StopSeq,

Always,

  DestroyObject(oCbTCPClient),

StopSeq,

cRead


TBeCbTextModInfo

TBeCbTextModInfo

Dieses Objekt ist nur im Autovervollständigungs-Codeblock der Textbaustein-Verwaltung verfügbar.

Dieses Objekt dient zur Information über die Ziel-Tabelle und das Ziel-Feld in das ein Textbaustein später eingefügt werden soll.

z. B. kann mit Hilfe dieser Daten anhand des Memo-Typs in der übergebenen DAB065 entschieden werden ob eine Signatur mit

oder ohne Firmenlogo in ein Memo eingefügt werden soll.

Eigenschaften

Tabellen und Felder

CbTargetDataSet:O

Tabelle die an der Aufrufenden Stelle des Textbausteinfensters/Autovervollständigung an den Textbaustein übergeben wurde.

z.B. beim Aufruf der Textbaustein-Verwaltung aus einem Memo in der Groupware würde die Property die DAB065 der Groupware enthalten.

CbTargetFieldName:C

Name des Ziel-Feldes in das der Textbaustein eingefügt werden soll.

z.B. beim Aufruf der Textbaustein-Verwaltung aus einem Memo in der Groupware würde die Property den Text 'MEMO' enthalten.

Beispiel

//##############################################################################

//##############################################################################

// Beispiel für eine Signatur in Email-Memos

//##############################################################################

//##############################################################################

//******************************************************************************

// Textbaustein-Text (Signatur ggf. mit Bild etc.):

//******************************************************************************

Mit freundlichen Grüßen

@@PLATZHALTER_FUER_NAME@@

//******************************************************************************

// Autovervollständigungs-Codeblock des Textbausteins:

//******************************************************************************

| cResultText, oDAB065 |

cResultText := '',

// ZielTabelle übergeben?

if not empty(TEXTMODINFO.CbTargetDataSet) then

   oDAB065 := TEXTMODINFO.CbTargetDataSet,

   // Ziel-Feld ist 'MEMO'?

   if TEXTMODINFO.CbTargetFieldName = 'MEMO' then

      // Memo-Typ = Email? (50) Dann Textbaustein auswerten. Ansonsten bleibt das Ergebnis leer.

      if oDAB065:TYP = 50 then

         // Platzhalter für den Namen im Textbaustein durch den Namen des Benutzers ersetzen

         cResultText := StrTran(DAB350:MEMO, '@@PLATZHALTER_FUER_NAME@@', BeUserName(c_usr)),

      endif,

   endif,

endif,

cResultText

Siehe auch:

GetTextMod()


TBeCbVATVerification

TBeCbVATVerification

Klasse zur qualifizierten Prüfung von Umstatzsteuer-Nummern (USt-ID) mit integriertem Caching.

Zur qualifizierten Prüfung wird der externe Service des Bundeszentralamt für Steuern (http://evatr.bff-online.de/eVatR/) verwendet.

Für die Prüfung von deutschen USt-IDs oder wenn der Service nicht verfügbar ist, wird eine normale Prüfung über den

externen Service der Europäischen Kommission (http://ec.europa.eu/taxation_customs/vies/) ausgeführt.

Eigenschaften

Eigenschaften

CbSenderVATID:C

Eigene USt-ID (engl.: VAT-No.)

CbRequestVATID:C

USt-ID die geprüft werden soll

CbRequestName:C

Name der Firma die geprüft werden soll (Pflicht für qual. Prüfung)

CbRequestCity:C

Ort der Firma die gepüft werden soll (Pflicht für qual. Prüfung, kann auch die PLZ enthalten)

CbRequestPostCode:C

Postleitzahl der Firma die geprüft werden soll

CbRequestStreet:C

Straße der Firma die gepüft werden soll

CbRequestPrintedProtocol:L

Protokoll der Anfrage wird auch als gedruckte Version per Post an die hinterlegte Adresse der CbSenderVATID geschickt

Default = False

CbTimeOut:N

Zeit in Millisekunden bis die Abfrage abbricht, wenn keine Antwort erfolgt

Default = 30000

CbUseSimpleVerificationAfterTimeOut:L

Einfache Prüfung verwenden, falls qualifizierte Prüfung nicht möglich war

Default = True

CbValidCacheDays:N

Anzahl der Tage wie lange eine bereits erfolgte Prüfung nicht online abgefragt wird

Default = 1

CbUseCache:L

Cache-Logik verwenden

Default = True

CbCacheDataSet:O

Tabelle in welcher die Cache-Einträge gespeichert werden

Achtung: wird eine Tabelle zugewiesen, können alle Aufrufe diese Tabelle ändern!

notwendige Struktur der Tabelle (MemTable oder Datenbanktabelle)

VATID | C
NAME | C
ORT | C
PLZ | C
STRASSE | C
ERG_NAME | N
ERG_ORT | N
ERG_PLZ | N
ERG_STR | N
GUELTIGAB | D
GUELTIGBIS | D
PRUEFDATUM | T
ERR_CODE | N

CbResult_ErrorCode:N

Ergebnis der Prüfung, siehe http://evatr.bff-online.de/eVatR/xmlrpc/codes

CbResultCode_Name:N

Ergebnis der Überprüfung des Firmen-Namens

Rückgabe-Werte:

vatrcUnkown | nicht definiert
vatrcValid | stimmt überein
vatrcInvalid | stimmt nicht überein
vatrcNotRequested | nicht angefragt
vatrcNotSupported | vom EU-Mitgliedsstaat nicht mitgeteilt
Diese können mittels der Funktion VATResultCodeToText() auch in übersetzbaren Text umgewandelt werden.

CbResultCode_City:N

Ergebnis der Überprüfung des Firmen-Orts

Rückgabe-Werte: siehe CbResultCode_Name

CbResultCode_PostCode:N

Ergebnis der Überprüfung der Firmen-Postleitzahl

Rückgabe-Werte: siehe CbResultCode_Name

CbResultCode_Street:N

Ergebnis der Überprüfung der Firmen-Straße

Rückgabe-Werte: siehe CbResultCode_Name

CbResult_RequestDateTime:D

Zeitpunkt der Prüfung

CbResult_ValidFrom:D

Zeitpunkt ab welchem die zu prüfende USt-ID gültig ist

CbResult_ValidUntil:D

Zeitpunkt bis zu welchem die zu prüfende USt-ID gültig ist

Funktionen und Methoden
CbVerify():L | Prüfung ausführen. Rückgabe logisch, ob USt-ID generell gültig
CbClearCache() | kompletten Cache löschen (Achtung: bei zugewiesenem CacheDataSet wird dieses geleert!)

Beispiel

|oVerify, lResult|

oVerify := CreateObject('TBeCbVATVerification'),

StartSeq

   oVerify.CbTimeOut                           := 3000,

   oVerify.CbValidCacheDays                    := 1,

   oVerify.CbUseCache                          := True,

   oVerify.CbUseSimpleVerificationAfterTimeOut := True,

   oVerify.CbRequestPrintedProtocol := False,

   oVerify.CbSenderVATID            := '', // hier die eigene USt-Id eintragen

   oVerify.CbRequestVATID           := 'IT00348170101',

   oVerify.CbRequestName            := 'UniCredit S.p.A.',

   oVerify.CbRequestCity            := '00186 Roma',

   oVerify.CbRequestPostCode        := '00186',

   oVerify.CbRequestStreet          := 'Via A. Specchi 16',

   lResult := oVerify.CbVerify(),

   WriteLn('*** USt-ID generell gültig ***'),

   WriteLn('Gültig: ', lResult),

   WriteLn('*** Gültigkeits-Informationen ***'),

   WriteLn('Code:          ', oVerify.CbResult_ErrorCode),

   WriteLn('Name:          ', oVerify.CbResultCode_Name),

   WriteLn('Ort:           ', oVerify.CbResultCode_City),

   WriteLn('PLZ:           ', oVerify.CbResultCode_PostCode),

   WriteLn('Strasse:       ', oVerify.CbResultCode_Street),

   WriteLn('Abfrage Datum: ', oVerify.CbResult_RequestDateTime),

   WriteLn('Gültig ab:     ', oVerify.CbResult_ValidFrom),

   WriteLn('Gültig bis:    ', oVerify.CbResult_ValidUntil),

Always

   DestroyObject(oVerify),

StopSeq,


TBeCbViewParams

TBeCbViewParams

Die Klasse TBeCbViewParams stellt eine Memo-Ansicht im Codeblock als Objekt dar. Über den Codeblock können so die "statischen Einstellungen" sowie Filter-Einstellungen überschrieben / gesteuert werden.

Hinweis:

Gesetzte Einstellungen für (Toolbar) Filter überschreiben beim Laden/Wechsel einer Ansicht immer die (letzten) Einstellungen des Users.

Eigenschaften:

Allgemeine-Eigenschaften

ID:C                   Eindeutige (readonly) ID (GUID) der Ansicht, wird beim Erzeugen einer Ansicht automatisch generiert

SQLWhere:C             Anzeige-Bedingung für Memo-Filterung (SQL: WHERE)

SQLOrderBy:C               Vorgabe-Sortierung für Browser (SQL: ORDER BY)

SQLTop:C                   Bedingung für Memo-Filterung (SQL: TOP)

Disabled:L             Ansicht ist deaktiviert (kann nicht im Baum ausgewählt werden)
(Kontext-Ansichten einer deaktivierten Ansicht sind ebenfalls deaktiviert)

BrowserInfoTag:C                       Hier kann ein beliebiger Text eingetragen werden.

ViewParamsInfo:O                       Objekt, um Daten über die Aktuelle Ansicht auszulesen.

Verfügbare Werte sind:

ID                      ID der Aktuellen Ansicht

                                              BrowserInfoTag          BrowserInfoTag der aktuellen Ansicht

                                              BrowserExt              BrowserExt der aktuellen Ansicht

                                              ParentViewParamsInfo ViewParamsInfo der nächsthöheren Ansicht (Vaterknoten)

TryKeepPriorViewPosition:L Memo-Positionierung bei Ansichten-Wechsel beibehalten? (default=False)

TryKeepPriorViewPositionFromViews:A    Ansichten deren Memo-Positionierung übernommen werden soll (leer=von Allen)

AlwaysGotoPosition:N Legt fest, wie beim Springen auf eine Ansicht die Memos positioniert werden.

vpDefault Versuchen das zuletzt markierte Memo in der Ansicht zu positionieren.

Kann dieses Memo nicht gefunden werden, wird versucht das Vorgänger-/Nachgänger-Memo zu

Positionieren

vpTop Auf das erste Memo in der Ansicht springen

vpBottom Auf das letzte Memo in der Ansicht springen

Description:C          Anzeige-Text für Ansicht

ImageIndex:N           Symbol für Ansicht

BrowserExt:C           Vorgabe für "Browser-Erweiterung"

UserList:C             Vorgabe für "Sichtbar für Benutzer"

Einstellungen für (Toolbar) Filter

ReminderDateValue:D    Datum-Vorgabe für Filter "nur Wiedervorlagen anzeigen" (default = aktuelles Datum)

ReminderDateVisible:L  Eingabebereich für Datum ""nur Wiedervorlagen anzeigen" sichtbar (default = True)

ShowReminderActive:L   Filter "nur Wiedervorlagen anzeigen" aktiv (default = False)

ShowReminderVisible:L  Filter "nur Wiedervorlagen anzeigen" sichtbar (default = True)

NextActionValue:C      Vorgabe für Filter "nächste Aktion" (default = '')

NextActionVisible:L    Filter "nächste Aktion" sichtbar (default = True)

ShowUnreadActive:L     Filter "nur meine Ungelesenen anzeigen" aktiv (default = False)

ShowUnreadVisible:L    Filter "nur meine Ungelesenen anzeigen" sichtbar (default = True)

ShowGroupActive:L      Filter "nur meine Gruppe anzeigen" aktiv (default = False)

ShowGroupVisible:L     Filter "nur meine Gruppe anzeigen" sichtbar (default = True)

FTSSearchValue:C       Vorgabe für Volltext-Suche (default = '')

FTSSearchVisible:L     Eingabebereich für Volltext-Suche sichtbar (default = True)

ShowDeletedActive:L    Filter "auch gelöschte anzeigen" aktiv (default = False)

ShowDeletedVisible:L   Filter "auch gelöschte anzeigen" sichtbar (default = True)

ParentView:O           Übergeordnete Ansicht (falls vorhanden, readonly)

Beispiel

// siehe "Default-Ansichten" im Memo-System (-> als SuperVisor unter "Ansichten bearbeiten")


TBeCheckCombo

TBeCheckCombo

TBeCheckCombo ist eine erweiterte TBeCombo Klasse welche zur Auswahl eine bildlauffähige Liste mit Datenbank-Bindung an, deren Einträge mit Kontrollfeldern (Checkboxen) ausgestattet sind. Der Benutzer kann die Listeneinträge aktivieren und deaktivieren.

Eigenschaften:

Allgemeine-Eigenschaften

CheckedItems:Collection Indizes der aktuell ausgewählten Einträge

CheckedCount:N Anzahl der ausgewählten Einträge

ValuesChecked: Collection Wert (Value) der Einträge im ausgewähltem Zustand

ValuesUnChecked: Collection Wert (Value) der Einträge im abgewähltem Zustand

DisplayText:C Anzeige Text (Text der ausgewählten Einträge mit Trennzeichen)

ShowTextAsHint:L Anzeige Text als Hint anzeigen (ShowHint muss aktiv sein)

Separator:C Trennzeichen für Anzeigetext

ShowUserSelectionInContextMenu:L Per Kontext-Menu den aktuellen User an/abwählen (default=False)
Wird automatisch aktiv wenn eine der beiden be-User MM-Tabellen
(-11 & -13) eingestellt wird.

Aktive-Eigenschaften (Methoden)

CBCheckAllItems Alle vorhandenen Einträge auswählen

CBUnCheckAllItems Alle vorhandenen Einträge abwählen

Verwendung:

- TBeCheckCombo auf eine F12-Maske platzieren

- DataSource muss zugewiesen und aktiv sein

- DataField muss zugewiesen sein

- DataField muss als Control-Typ TBeCheckCombo definiert sein

- Im F12-Designer findet sich die Komponente unter der Palette "BE-Combo"

Beispiel

// demonstriert den Einsatz der Klassen  TBeCheckCombo, TBeAttribCheckCombo und

// TBeFieldAttribCheckCombo

//

// HINWEIS:

// Die im Beispiel "manuell" erzeugten Klassen können natürlich auch im Designer

// erstellt werden und die entsprechenden Eigenschaften dort gesetzt werden.

| oForm, oSeparatorButton, oSeparatorEdit, oLabelSeparator, oCheckAllButton,

  oCheckNoneButton, oBeCheckCombo, oBeFieldAttribCheckCombo, oBeAttribCheckCombo,

  oDab065:DB:="waDAB065, DAB066", oDataSourceStd, oTextEdit, oLabelAttribBox, oLabelFieldBox,

  oLabelCheckCombo, oLabelFieldAttribCheckCombo, oMemTable, oMemField,

  oLabelAttribCheckCombo, oDataSourceMem |

//******************************************************************************

function OnBeCheckComboClickCheck( Sender )

| i, aItems, aValues |

  oTextEdit.Text := 'Sender: ' + ClassName(Sender) + crlf,

  // Werte (Value) der einzelnen Einträge

  oTextEdit.Text += 'ValuesChecked: ',

  aValues        := Sender.ValuesChecked,

  for i:=1 to CollCount(aValues) do

     oTextEdit.Text += CollItem(aValues, i) + ',',

  end,

  // Index der ausgewählten Einträge

  aItems         := Sender.CheckedItems,

  oTextEdit.Text += crlf + 'CheckedItems: '  + arrtostr(aItems) + crlf,

  // Werte wie sie in der Table abgelegt werden

  oTextEdit.Text += 'Table: ',

  for i:=1 to aLen(aItems) do

     oTextEdit.Text += CollItem(aValues, aItems[i]) + '/',

  end,

  oTextEdit.Text += crlf + 'Anzeige-Text: ',

  oTextEdit.Text += Sender.DisplayText,

  oTextEdit.Text += crlf + 'Ausgewählt: ',

  oTextEdit.Text += str(Sender.CheckedCount),

end,

//******************************************************************************

function OnSeparatorChangeClick( Sender )

  oBeCheckCombo.Separator := oSeparatorEdit.Text,

end,

//******************************************************************************

function OnCheckAllClick( Sender )

  oBeCheckCombo.CBCheckAllItems,

end,

//******************************************************************************

function OnCheckNoneClick( Sender )

  oBeCheckCombo.CBUnCheckAllItems,

end,

//******************************************************************************

startseq

   //***************************************************************************

   // Beispiel-Formular erzeugen

   //***************************************************************************

   oForm          := CreateObject('TFormEx'),

   oForm.OrigCapt := 'CheckCombo im Codeblock',

   oForm.Position := POSCREENCENTER,

   oForm.Width    := 440,

   oForm.Height   := 320,

   //***************************************************************************

   // Beispiel eines datengebundenen "Standard" CheckCombo-Controls

   //***************************************************************************

   // DataSource erzeugen

   oDataSourceStd           := CreateObject('TDataSourceEx',

                                            'DataSourceExStd1', oForm, oForm),

   oDataSourceStd.DataSet   := oDAB065,

   DbGoBottom(oDAB065),

   // "Standard" CheckCombo-Control erzeugen

   oBeCheckCombo            := CreateObject('TBeCheckCombo',

                                            'BeCheckCombo1', oForm, oForm),

   oBeCheckCombo.Left       := 10,

   oBeCheckCombo.Top        := 30,

   oBeCheckCombo.Width      := 200,

   oBeCheckCombo.Height     := 90,

   oBeCheckCombo.ShowTextAsHint := True,

   oBeCheckCombo.ShowUserSelectionInContextMenu := True,

   // durch die Zuweisung eines DataSources und eines DataFields, holt sich die

   // BeCheckCombo die MM-Tabelle von selbst

   oBeCheckCombo.DataSource := oDataSourceStd,

   oBeCheckCombo.DataField  := 'N_AKTION',

   dbrefresh(oDAB065),

   // Event zuweisen

   AssignEvent(oBeCheckCombo, 'OnClickCheck', 'OnBeCheckComboClickCheck'),

   // Eingabefeld für Anzeigetrenner

   oSeparatorEdit           := CreateObject('TBeEdit',

                                            'TBeEdit2', oForm, oForm),

   oSeparatorEdit.Left      := 220,

   oSeparatorEdit.Top       := 30,

   oSeparatorEdit.Width     := 55,

   oSeparatorEdit.Text      := oBeCheckCombo.Separator,

   oSeparatorButton         := CreateObject('TButton',

                                            'TButton1', oForm, oForm),

   oSeparatorButton.Left    := 285,

   oSeparatorButton.Top     := 28,

   oSeparatorButton.Width   := 55,

   oSeparatorButton.Caption := 'ändern',

   // Event zuweisen

   AssignEvent(oSeparatorButton, 'OnClick', 'OnSeparatorChangeClick'),

   // Button "Alle Einträge auswählen"

   oCheckAllButton          := CreateObject('TBeBitBtn',

                                            'TButton2', oForm, oForm),

   oCheckAllButton.Left     := 220,

   oCheckAllButton.Top      := 58,

   oCheckAllButton.Width    := 55,

   oCheckAllButton.ImageIndex.IndexNormal := 189,

   oCheckAllButton.Caption  := 'alle',

   // Event zuweisen

   AssignEvent(oCheckAllButton, 'OnClick', 'OnCheckAllClick'),

   // Button "Keine Einträge auswählen"

   oCheckNoneButton         := CreateObject('TBeBitBtn',

                                            'TButton3', oForm, oForm),

   oCheckNoneButton.Left    := 285,

   oCheckNoneButton.Top     := 58,

   oCheckNoneButton.Width   := 55,

   oCheckNoneButton.ImageIndex.IndexNormal := 190,

   oCheckNoneButton.Caption := 'keine',

   // Event zuweisen

   AssignEvent(oCheckNoneButton, 'OnClick', 'OnCheckNoneClick'),

   //***************************************************************************

   // Beispiel eines datengebundenen CheckCombo-Controls auf einer MemTable

   // (jede beliebige Tabelle denkbar)

   //***************************************************************************

   // Memtable erzeugen

   oMemTable          := CreateObject('TMemCalcTable', 'MemTable1', oForm),

   // Feld erzeugen

   oMemField          := CollAdd( oMemTable.FieldsDefinition ),

   oMemField.Name     := 'MEM_ABTLG',

   oMemField.DataType := 1, // Character

   oMemField.Size     := 40,

   oMemTable.Active   := True,

   // Datensatz anlegen mit 'Abteilungen'

   dbappend(oMemTable),

   oMemTable:MEM_ABTLG := '100/200/', // Initialwert

   dbpost(oMemTable),

   // DataSource erzeugen

   oDataSourceMem         := CreateObject('TDataSourceEx', 'DataSourceExMem1', oForm),

   oDataSourceMem.DataSet := oMemTable,

   // CheckCombo-Control erzeugen

   oBeFieldAttribCheckCombo            := CreateObject('TBeFieldAttribCheckCombo',

                                                       'BeFieldAttribCheckCombo1', oForm, oForm),

   oBeFieldAttribCheckCombo.Left          := 10,

   oBeFieldAttribCheckCombo.Top           := 130,

   oBeFieldAttribCheckCombo.Width         := 200,

   oBeFieldAttribCheckCombo.Height        := 90,

   oBeFieldAttribCheckCombo.BeAttributeID := -8,

   oBeFieldAttribCheckCombo.DataField     := 'MEM_ABTLG',

   oBeFieldAttribCheckCombo.DataSource    := oDataSourceMem,

   // Event zuweisen

   AssignEvent(oBeFieldAttribCheckCombo, 'OnClickCheck', 'OnBeCheckComboClickCheck'),

   //***************************************************************************

   // Beispiel eines nit datengebundenen CheckCombo-Controls

   //***************************************************************************

   oBeAttribCheckCombo               := CreateObject('TBeAttribCheckCombo',

                                                     'BeAttribCheckCombo1', oForm, oForm),

   oBeAttribCheckCombo.Left          := 220,

   oBeAttribCheckCombo.Top           := 130,

   oBeAttribCheckCombo.Width         := 200,

   oBeAttribCheckCombo.Height        := 90,

   oBeAttribCheckCombo.BeAttributeID := -8,

   oBeAttribCheckCombo.Value         := '200/300', // Initialwert

   // Event zuweisen

   AssignEvent(oBeAttribCheckCombo, 'OnClickCheck', 'OnBeCheckComboClickCheck'),

   //***************************************************************************

   // Ausgabe-Control - nur für den Test

   //***************************************************************************

   oTextEdit             := CreateObject('TBeEdit', 'Edit1', oForm, oForm),

   oTextEdit.Text        := '',

   oTextEdit.Left        := 10,

   oTextEdit.Top         := 170,

   oTextEdit.Width       := 410,

   oTextEdit.AutoSize    := False,

   oTextEdit.Height      := 110,

   oTextEdit.WantReturns := True,

   oTextEdit.WordWrap    := True,

   oTextEdit.ReadOnly    := True,

   //***************************************************************************

   // Beschriftungen

   //***************************************************************************

   oLabelCheckCombo         := CreateObject('TBeLabel', 'BeLabel1', oForm, oForm),

   oLabelCheckCombo.Left    := 10,

   oLabelCheckCombo.Top     := 10,

   oLabelCheckCombo.Caption := 'TBeCheckCombo',

   oLabelFieldAttribCheckCombo         := CreateObject('TBeLabel', 'BeLabel2', oForm, oForm),

   oLabelFieldAttribCheckCombo.Left    := 10,

   oLabelFieldAttribCheckCombo.Top     := 110,

   oLabelFieldAttribCheckCombo.Caption := 'TBeFieldAttribCheckCombo',

   oLabelAttribCheckCombo         := CreateObject('TBeLabel', 'BeLabel3', oForm, oForm),

   oLabelAttribCheckCombo.Left    := 220,

   oLabelAttribCheckCombo.Top     := 110,

   oLabelAttribCheckCombo.Caption := 'TBeAttribCheckCombo',

   oLabelSeparator          := CreateObject('TBeLabel', 'BeLabel4', oForm, oForm),

   oLabelSeparator.Left     := 220,

   oLabelSeparator.Top      := 10,

   oLabelSeparator.Caption  := 'Anzeige Trenner',

   // Formular anzeigen

   ShowModal(oForm),

   // Formular zerstören

   DestroyObject(oForm),

onerror,

   writeln(GetErrorText()),

   DestroyObject(oForm),

stopseq,

Siehe auch:

TBeCheckListBox

TBeAttribCheckCombo

TBeFieldAttribCheckCombo


TBeCheckListBox

TBeCheckListBox

TBeCheckListBox zeigt eine bildlauffähige Liste mit Datenbank-Bindung an, deren Einträge mit Kontrollfeldern (Checkboxen) ausgestattet sind. Der Benutzer kann die Listeneinträge aktivieren und deaktivieren.

Eigenschaften:

Allgemeine-Eigenschaften

CheckedItems:Collection Indizes der aktuell ausgewählten Einträge

ValuesChecked: Collection Wert (Value) der Einträge

Verwendung:

- TBeCheckListBox auf eine F12-Maske platzieren und BeAttributeID zuweisen

- DataSource muss zugewiesen und aktiv sein

- DataField muss zugewiesen sein

- DataField muss als Control-Typ TBeCheckListBox definiert sein

- Im F12-Designer findet sich die Komponente unter der Palette "BE-Combo"

Beispiel

// demonstriert den Einsatz der Klassen TBeCheckListBox

//                                      TBeAttribCheckListBox,

//                                      TBeFieldCheckListBox,

// HINWEIS:

// Die im Beispiel "manuell" erzeugten Klassen können natürlich auch im Designer

// erstellt werden und die entsprechenden Eigenschaften dort gesetzt werden.

| oForm, oBeAttribCheckListBox, oBeFieldCheckListBox, oMemTable, oMemField,

  oDataSourceMem, oBeCheckListBox, oDab010:DB:="waDAB010, DAB011", oDataSourceStd, oTextEdit,

  oLabelAttribBox, oLabelFieldBox, oLabelListBox, aItems |

//******************************************************************************

function OnBeAttribCheckListBoxClickCheck( Sender )

| i, aItems, aValues |

  oTextEdit.Text := 'Sender: ' + ClassName(Sender) + crlf,

  // Werte (Value) der einzelnen Einträge

  oTextEdit.Text += 'ValuesChecked: ',

  aValues        := oBeAttribCheckListBox.ValuesChecked,

  for i:=1 to CollCount(aValues) do

     oTextEdit.Text += CollItem(aValues, i) + ',',

  end,

  // Index der ausgewählten Einträge

  aItems         := oBeAttribCheckListBox.CheckedItems,

  oTextEdit.Text += crlf + 'CheckedItems: '  + arrtostr(aItems) + crlf,

end,

//******************************************************************************

function OnBeFieldListBoxClickCheck( Sender )

| i, aItems, aValues |

  oTextEdit.Text := 'Sender: ' + ClassName(Sender) + crlf,

  // Werte (Value) der einzelnen Einträge

  oTextEdit.Text += 'ValuesChecked: ',

  aValues        := oBeFieldCheckListBox.ValuesChecked,

  for i:=1 to CollCount(aValues) do

     oTextEdit.Text += CollItem(aValues, i) + ',',

  end,

  // Index der ausgewählten Einträge

  aItems         := oBeFieldCheckListBox.CheckedItems,

  oTextEdit.Text += crlf + 'CheckedItems: '  + arrtostr(aItems) + crlf,

  // Werte wie sie in der MemTable abgelegt werden

  oTextEdit.Text += 'MemTable: ',

  for i:=1 to aLen(aItems) do

     oTextEdit.Text += CollItem(aValues, aItems[i]) + '/',

  end,

end,

//******************************************************************************

function OnBeCheckListBoxClickCheck( Sender )

| i, aItems, aValues |

  oTextEdit.Text := 'Sender: ' + ClassName(Sender) + crlf,

  // Werte (Value) der einzelnen Einträge

  oTextEdit.Text += 'ValuesChecked: ',

  aValues        := oBeCheckListBox.ValuesChecked,

  for i:=1 to CollCount(aValues) do

     oTextEdit.Text += CollItem(aValues, i) + ',',

  end,

  // Index der ausgewählten Einträge

  aItems         := oBeCheckListBox.CheckedItems,

  oTextEdit.Text += crlf + 'CheckedItems: '  + arrtostr(aItems) + crlf,

  // Werte wie sie in der Table abgelegt werden

  oTextEdit.Text += 'Table: ',

  for i:=1 to aLen(aItems) do

     oTextEdit.Text += CollItem(aValues, aItems[i]) + '/',

  end,

end,

//******************************************************************************

startseq

   //***************************************************************************

   // Beispiel-Formular erstellen

   //***************************************************************************

   oForm          := CreateObject('TFormEx'),

   oForm.OrigCapt := 'CheckListBox im Codeblock',

   oForm.Position := POSCREENCENTER,

   oForm.Width    := 505,

   oForm.Height   := 250,

   //***************************************************************************

   // Beispiel eines nicht datengebundenes CheckListBox-Controls

   //***************************************************************************

   oBeAttribCheckListBox         := CreateObject('TBeAttribCheckListBox',

                                                 'BeAttribCheckListBox1',

                                                 oForm, oForm),

   oBeAttribCheckListBox.Left    := 10,

   oBeAttribCheckListBox.Top     := 30,

   oBeAttribCheckListBox.Width   := 150,

   oBeAttribCheckListBox.Height  := 90,

   // Merkmalstabelle wählen (Standard "Lagerplatz-Verwaltung")

   oBeAttribCheckListBox.BeAttributeID := 102023,

   // der Initialwert kann vorgegeben werden !

   aItems := oBeAttribCheckListBox.CheckedItems,

   AAdd(aItems, 1),

   AAdd(aItems, 3),

   oBeAttribCheckListBox.CheckedItems := aItems,

   // Event zuweisen

   AssignEvent(oBeAttribCheckListBox, 'OnClickCheck', 'OnBeAttribCheckListBoxClickCheck'),

   //***************************************************************************

   // Beispiel eines datengebundenes CheckListBox-Controls auf einer MemTable

   // (jede beliebige Tabelle denkbar)

   //***************************************************************************

   // Memtable erstellen

   oMemTable          := CreateObject('TMemCalcTable', 'MemTable1', oForm),

   // Feld erstellen

   oMemField          := CollAdd( oMemTable.FieldsDefinition ),

   oMemField.Name     := 'PLATZ_VER',

   oMemField.DataType := 1, // Character

   oMemField.Size     := 20,

   oMemTable.Active   := True,

   // leeren Datensatz

   dbappend(oMemTable),

   // DataSource erstellen

   oDataSourceMem         := CreateObject('TDataSourceEx',

                                          'DataSourceExMem1', oForm),

   oDataSourceMem.DataSet := oMemTable,

   // CheckListBox-Control für Datenbank-Zugriff erstellen

   oBeFieldCheckListBox               := CreateObject('TBeFieldCheckListBox',

                                                      'BeFieldCheckListBox1',

                                                      oForm, oForm),

   oBeFieldCheckListBox.Left          := 170,

   oBeFieldCheckListBox.Top           := 30,

   oBeFieldCheckListBox.Width         := 150,

   oBeFieldCheckListBox.Height        := 90,

   oBeFieldCheckListBox.DataSource    := oDataSourceMem,

   oBeFieldCheckListBox.DataField     := 'PLATZ_VER',

   oBeFieldCheckListBox.BeAttributeID := 102023,

   // Event zuweisen

   AssignEvent(oBeFieldCheckListBox, 'OnClickCheck', 'OnBeFieldListBoxClickCheck'),

   //***************************************************************************

   // Beispiel eines datengebundenen "Standard" CheckListBox-Controls

   //***************************************************************************

   // DataSource erstellen

   oDataSourceStd         := CreateObject('TDataSourceEx',

                                          'DataSourceExStd1', oForm, oForm),

   oDataSourceStd.DataSet := oDab010,

   DbGoBottom(oDab010),

   // "Standard" CheckListBox-Control erstellen

   oBeCheckListBox            := CreateObject('TBeCheckListBox',

                                              'BeCheckListBox1', oForm, oForm),

   oBeCheckListBox.Left       := 330,

   oBeCheckListBox.Top        := 30,

   oBeCheckListBox.Width      := 150,

   oBeCheckListBox.Height     := 90,

   // durch die Zuweisung eines DataSources und eines DataFields, holt sich die

   // BeCheckListBox die MM-Tabelle von selbst

   oBeCheckListBox.DataSource := oDataSourceStd,

   oBeCheckListBox.DataField  := 'PLATZ_VER', // Feld-Control-Typ muss

                                              // TBeCheckListBox sein!

   dbrefresh(oDab010),

   // Event zuweisen

   AssignEvent(oBeCheckListBox, 'OnClickCheck', 'OnBeCheckListBoxClickCheck'),

   //***************************************************************************

   // Ausgabe-Control - nur für den Test

   //***************************************************************************

   oTextEdit             := CreateObject('TBeEdit', 'Edit1', oForm, oForm),

   oTextEdit.Text        := '',

   oTextEdit.Left        := 10,

   oTextEdit.Top         := 130,

   oTextEdit.Width       := 470,

   oTextEdit.AutoSize    := False,

   oTextEdit.Height      := 80,

   oTextEdit.WantReturns := True,

   oTextEdit.WordWrap    := True,

   oTextEdit.ReadOnly    := True,

   //***************************************************************************

   // Beschriftungen

   //***************************************************************************

   oLabelAttribBox         := CreateObject('TBeLabel', 'BeLabel1', oForm, oForm),

   oLabelAttribBox.Left    := 10,

   oLabelAttribBox.Top     := 10,

   oLabelAttribBox.Caption := 'TBeAttribCheckListBox',

   oLabelFieldBox          := CreateObject('TBeLabel', 'BeLabel2', oForm, oForm),

   oLabelFieldBox.Left     := 170,

   oLabelFieldBox.Top      := 10,

   oLabelFieldBox.Caption  := 'TBeFieldCheckListBox',

   oLabelListBox           := CreateObject('TBeLabel', 'BeLabel3', oForm, oForm),

   oLabelListBox.Left      := 330,

   oLabelListBox.Top       := 10,

   oLabelListBox.Caption   := 'TBeCheckListBox',

   // Formular anzeigen

   ShowModal(oForm),

   // Formular zerstören

   DestroyObject(oForm),

onerror,

   writeln(GetErrorText()),

   DestroyObject(oForm),

stopseq,

Siehe auch:

TBeAttribCheckListBox

TBeFieldCheckListBox


TBeCollectorErrorItem

TBeCollectorErrorItem

Klasse zum behandeln von Fehlern im TBeCbCodeblockCollector

Eigenschaften

Eigenschaften

CbErrorType:N

(nur lesend) enthält den Wert des Bereichs in dem der Fehler aufgetreten ist

aType:N

be-Codeblock-Bereich

0 (cctUndefined)

1 (cctPrintManager)

2 (cctCRMAction)

3 (cctIndividualMenu)

4 (cctBrowserDefinition)

5 (cctMaskDefinition)

6 (cctAttributeTable)

7 (cctShippingControl)

8 (cctDocLayout)

9 (cctTextModule)

10 (cctRights)

11 (cctMemoViews)

12 (cctParameter)

13 (cctCodeBlockProgram)

14 (cctScComm)

15 (cctColSize)

16(cctIndivDataTurnover)

17(cctReportGenerator)

18(cctIntrastatParameter)

19(cctInventoryFilter)

20(cctFilterList)

21(cctParameterFilter)

22(cctReleaseByDate)

23(cctFiBuParameter)

24(cctSqlSelection)

25(cctAgentArticleFilter)

26(cctSachkonto)

27(cctPaymentMethod)

28(cctOtherWinPosition)

Undefinierte Bereich

Druckerzuweisungen

CRM-Aktionen

Individual Menüs

Browser Definitionen

Masken Definitionen

Merkmalstabellen

Versandsteuerung

Beleg Layouts

Textbausteine

Tabellen- und Feldrechte

Memo Ansichten

Allgemeine- und Lokale Parameter

Codeblock Programme

Außendienst Parameter

Größen/Farb Raster

Kum.Stat. Indiv. Betrachtung

Reportgenerator

Intrastat Parameter

Inventur Filter

Filter Liste

Parameter Filter

Automatische Liefereinstellungen

FiBu Parameter

SQL-Selektionen

Vertreter Absatzplanung Artikelfilter

FiBu Sachkonten

FiBu Zahlungsarten

Sonstige WinPositionen

CbErrorMessage:C

(nur lesend) enthält die Fehlermeldung

CbIsInternalError:L

(nur lesend) ist True wenn der Fehler intern vorgefallen ist

CbRaiseError:L

wenn True wird der weitere Programm-Ablauf abgebrochen

Beispiel

// siehe TBeCbCodeblockCollector Beispiel

Siehe auch:

TBeCbCodeblockCollector


TBeColorComboBox

TBeColorComboBox

TBeColorComboBox zeigt eine Liste von BeDesignColors zur Auswahl an.

Eigenschaften |
ColorValue:N | Numerischer Wert der ausgewählten Farbe. (Nur lesen möglich)
Properties.AllowSelectColor:L | Erlaubt es über einen Button frei definierbare Farben auszusuchen.
ShowDescriptions:L | Bestimmt ob die Farbbeschreibung angezeigt werden soll.

Verwendung:

- Erzeugung per Codeblock-Funktion CreateObject

Beispiel

| oForm, oColorBox1, oColorBox2, oMem, ds_DataSource |

startseq

   oForm      := CreateObject('TFormEx', 'BoxTestForm'),

   oColorBox1 := CreateObject('TBeColorComboBox', 'Box1', oForm, oForm),

   oColorBox2 := CreateObject('TBeColorComboBox', 'Box2', oForm, oForm),

   oColorBox1.Width      := 200,

   oColorBox2.Width      := 200,

   oColorBox2.Top        :=  30,

   oColorBox1.Properties.AllowSelectColor := True,  // Anzeigen des Buttons zum öffnen der Farbauswahl

   oColorBox1.Properties.ShowDescriptions := False, // Keine Farbbeschreibungen

   oColorBox2.Properties.AllowSelectColor := False, // Keinen Button zum öffnen der Farbauswahl anzeigen

   oColorBox2.Properties.ShowDescriptions := True,  // Farbbeschreibungen anzeigen

   ShowModal(oForm),

   writeln(oColorBox1.ColorValue), // Ausgewählte Farbe nach dem Schließen ausgeben

   writeln(oColorBox2.ColorValue), // Ausgewählte Farbe nach dem Schließen ausgeben

always

   DestroyObject(oColorBox1),

   DestroyObject(oColorBox2),

stopseq

Siehe auch:

TBeDBColorComboBox


TBeCommissData

TBeCommissData

Klasse zum Druck eines Kommissionierschein für einen Kundenauftrag.

Eigenschaften:

In dieser Klasse werden keine neuen Eigenschaften eingeführt. Relevante Eigenschaften befinden sich in den Vorfahr-Klasen. Siehe Hierarchie.

Hierarchie:

TBePrintData -> TBeOfferData -> TBeCommissData

Beispiel

function PrintCommiss( nAuftragsNummer )

 | oPrint |

  oPrint := CreateObject("TBeCommissData"),

  startseq

     oPrint.QuietMode    := false,

     oPrint.PrintDocNo   := nAuftragsNummer, // Auftragsnummer des zu druckenden Kommiss.Schein

     oPrint.ExecPrint,                       // Einzeldruck anstoßen

   always

      DestroyObject(oPrint),

   stopseq,

end,

PrintCommiss( 123456 )

Siehe auch:

TBeRemovalData, TBeCumRemovalData

<ungültiger Verweis>

TBePrintData

TBeCumBillData

TBeConfData


TBeConfData

TBeConfData

Klasse zum Druck einer Auftragsbestätigung für einen Kundenauftrag.

Eigenschaften:

In dieser Klasse werden keine neuen Eigenschaften eingeführt. Relevante Eigenschaften befinden sich in den Vorfahr-Klasen. Siehe Hierarchie.

Hierarchie:

TBePrintData -> TBeOfferData -> TBeConfData

Beispiel

function PrintAB( nAuftragsNummer )

 | oPrint |

  oPrint := CreateObject("TBeConfData"),

  startseq

     oPrint.QuietMode    := false,

     oPrint.PrintDocNo   := nAuftragsNummer, // Auftragsnummer der zu druckenden Bestätigung

     oPrint.ExecPrint,                       // Einzeldruck anstoßen

   always

      DestroyObject(oPrint),

   stopseq,

end,

PrintAB( 123456 )

Siehe auch:

TBeRemovalData, TBeCumRemovalData

<ungültiger Verweis>

TBePrintData

TBeCumBillData

TBeCommissData


TBeContactBO

TBeContactBO

Die Klasse TBeContactBO kapselt Zugriffe auf die Kontakte (Dab005).

Eigenschaften:

Tabellen und Felder
CbMasterType:C | Datenzugehörigkeit; 'K' = Kunden; 'Z' = Zulieferer; 'V' = Vertreter; (nur lesender Zugriff)
CbMasterID:N | Betreffende Kunden/Zulieferer/Vertreter.Nr; (nur lesender Zugriff)
CbMemo:C | Bemerkungen; (nur lesender Zugriff)
CbFunctionValue:C | Funktions-Schlüssel; (nur lesender Zugriff)
CbSalutationKey:N | Anrede; (nur lesender Zugriff)
CbName:C | Name; (nur lesender Zugriff)
CbSurName:C | Vorname; (nur lesender Zugriff)
CbTitle:C | Titel; (nur lesender Zugriff)
CbPhoneExtension:C | Telefon-Durchwahl; (nur lesender Zugriff)
CbPhoneNumber:C | Telefon-Nummer; (nur lesender Zugriff)
CbMobileNumber:C | Handy-Nummer; (nur lesender Zugriff)
CbFaxExtension:C | Telefax-Durchwahl; (nur lesender Zugriff)
CbEmail:C | E-Mail Adresse; (nur lesender Zugriff)
CnLastContactDate:D | Datum letzter Kontakt; (nur lesender Zugriff)
CbRetired:L | Ausgeschieden; (nur lesender Zugriff)

Beispiel

//siehe TBeContactBusinessController

Siehe auch:

TBeContactBusinessController


TBeContactBusinessController

TBeContactBusinessController

Die Klasse TBeContactBusinessController kapselt wichtige Funktionen zum Erstellen und Löschen der Datensätze eines TBecontactBusinessObjects.

Eigenschaften:

Funktionen

CbInsertContact:N

Erstellt einen neuen Kontakt und bleibt im Edit-Modus

aType:C | Kontakt-Typ K(Kunde), V(Verteter) oder Z(Zulieferer)
aPersNo:N | Nummer des Kunden, Vertreter oder Zulieferers
aContactBO:O | Verwendetes Kontakt-BO

CbDeleteContact:L

Löscht den aktuellen Kontakt

aContactBO:O

Verwendetes Kontakt-BO

CbPostContact:L

Speichert die aktuellen Änderungen am Kontakt

aContactBO:O

Verwendetes Kontakt-BO

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: TBeContactBO

//               BusinessObject zum Auslesen der Kontakt-Daten

//               BusinessController zum Erstellen neuer Kontakte

//##############################################################################

//##############################################################################

| m_oContactBO, m_oContactBusinessController |

//******************************************************************************

// Datensatz einfügen

//******************************************************************************

function InsertPostContact()

| cType, nPersNo |

   nPersNo := 255,

   cType   := 'K',

   DBStartTrans(m_oContactBO.CbDataModule.ADSConnection),

   startseq

      m_oContactBusinessController.CbInsertContact(cType, nPersNo, m_oContactBO),

      m_oContactBusinessController.CbPostContact(m_oContactBO),

      DBCommit(m_oContactBO.CbDataModule.ADSConnection),

   always

      if DBInTrans(m_oContactBO.CbDataModule.ADSConnection) then

         DBRollback(m_oContactBO.CbDataModule.ADSConnection),

      endif,

   stopseq

end,

//******************************************************************************

// Datensatz auslesen

//******************************************************************************

function ReadContactInformation(),

   // Schreibt die Informationen des aktuellen Datensatzes

   WriteLn('Der Typ des aktuellen Kontakts ist: ' + m_oContactBO.CbMasterType),

   WriteLn('Der Kontakt ist der Nummer zugeordnet: ' + Str(m_oContactBO.CbMasterID)),

end,

//******************************************************************************

// Datensatz löschen

//******************************************************************************

function DeleteContact()

   DBStartTrans(m_oContactBO.CbDataModule.ADSConnection),

   startseq

      m_oContactBusinessController.CbDeleteContact(m_oContactBO),

      DBCommit(m_oContactBO.CbDataModule.ADSConnection),

   always

      if DBInTrans(m_oContactBO.CbDataModule.ADSConnection) then

         DBRollback(m_oContactBO.CbDataModule.ADSConnection),

      endif,

   stopseq

end,

//******************************************************************************

// Hauptfunktion

//******************************************************************************

function InsertDeleteContact()

   m_oContactBO := CreateObject('TBeContactBO'),

   startseq

      m_oContactBusinessController := CreateObject('TBeContactBusinessController'),

      startseq

         m_oContactBusinessController.CbDataModule := m_oContactBO.CbDataModule,

         InsertPostContact(),

         ReadContactInformation(),

         DeleteContact(),

      always

         DestroyObject(m_oContactBusinessController),

      stopseq

   always

      DestroyObject(m_oContactBO),

   stopseq

end,

//******************************************************************************

// Aufruf der Hauptfunktion

//******************************************************************************

InsertDeleteContact()

Siehe auch:

TBeContactBO


TBeCumBillData

TBeCumBillData

Belegdruck-Klasse zum Druck von Sammelrechnungen.

Eigenschaften:

PrintPersNo:N Kunden-Nummer für den die Sammelrechnung gedruckt werden soll

PrintDocNo:C immer leer

MinTotalSum:N Mindestwert je Rechnung; Default = 0

Hierarchie:

TBePrintData -> TBeOfferData -> TBeDelivData -> TBeBillData -> TBeCumBillData

Hinweis:

für weitere Eigenschaften siehe Vorfahr-Klassen

Beispiel

function PrintSammelRechnung(nKdnr, lShowDoc)

  |oCumBill|

  oCumBill := CreateObject("TBeCumBillData"),

  startseq

    oCumBill.UsePrintDlg := False,

    oCumBill.QuietMode   := True,

    oCumBill.PrintPersNo := nKdnr,    // Kundennummer

    oCumBill.MinTotalSum := -9999999, // kein Mindestwert je Rechnung

    oCumBill.ExecPrint,               // Einzeldruck starten

    // wurde Beleg gedruckt? (DocNo <> 999999) -> dann Belegarchiv anzeigen

    if lShowDoc and (oCumBill.DocNo <> 999999) then

       ShowDocument(160, nKdnr, Str(oCumBill.DocNo)),

    endif,

  always

    DestroyObject(oCumBill),

  stopseq,

end,

// Sammelrechnung für KDNR=1 drucken und anzeigen

PrintSammelRechnung(1, True)

Siehe auch:

TBeRemovalData, TBeCumRemovalData

TBeDelivData, TBeCumDelivData

<ungültiger Verweis>

TBePrintData


TbeCustomControlSkin

TbeCustomControlSkin

Diese Klasse ist eine Eigenschaft ("Skin") von bestimmten grafischen Controls. Sie dient zum Ändern des Aussehens der

einzelne Komponente.

Eigenschaften

Funktionen und Methoden

CbIncludeAssignedValues(aValue:N)

Aktiviert die benutzerdefinierte Einstellung.

aValue:N

// Allgemein

csvTextSize,

csvTextColor,

csvTextAccent,

csvTextColorMode,

// Edit-Controls haben noch zusätzlich:

csvBackgroundColor,

csvBackgroundAccent,

csvBorder,

csvBorderColor,

csvBorderAccent,

csvBorderSize,

// Label-Controls haben noch zusätzlich:

csvTextStyle

CbExcludeAssignedValues(aValue:N)

Setzt die gewünschte Eigenschaft zurück auf den default-Wert.

aValue:N

// Allgemein

csvTextSize,

csvTextColor,

csvTextAccent,

csvTextColorMode,

// Edit-Controls haben noch zusätzlich:

csvBackgroundColor,

csvBackgroundAccent,

csvBorder,

csvBorderColor,

csvBorderAccent,

csvBorderSize,

// Label-Controls haben noch zusätzlich:

csvTextStyle

CbResetDefaults()

Setzt das Default-Style der Komponente zurück - die AssignedValues werden geleert.

CbBeginUpdate()

Verhindert neues Zeichnen der Komponente bei Änderungen von Skin-Eigenschaften.

CbEndUpdate()

Erlaubt neues Zeichnen der Komponente bei Änderungen von Skin-Eigenschaften und zeichnet die Komponente neu.

Beispiel

|

  bool,

   // @VDB@ Der nachfolgende Teil wird automatisch gepflegt.

   oForm, A_HelpContent, beButton1, calc

   // @VDE@ Der vorangehende Teil wird automatisch gepflegt.

|

//******************************************************************************

//

//******************************************************************************

function beButton1Click( Sender )

   bool := not bool,

   calc.skin.cbBeginUpdate(),

   startseq

      if bool then

         calc.skin.colorMode := cscmWarning,

      else

         calc.skin.cbexcludeAssignedValue(csvTextColorMode),

        // calc.skin.cbresetdefaults(),

      endif,

   always

     calc.skin.cbEndUpdate(),

   stopseq,

end,

startseq

   // @VZB@ Der nachfolgende Teil wird automatisch gepflegt.

   oForm         := LoadForm("@ASDA", Application),

   A_HelpContent := FindObject(oForm, "A_HelpContent"),

   beButton1     := FindObject(oForm, "beButton1"),

   calc          := FindObject(oForm, "calc"),

   // @VZE@ Der vorangehende Teil wird automatisch gepflegt.

   Show(oForm),

onerror

   DestroyObject(oForm),

stopseq,


TBeCustomFormBO

TBeCustomFormBO

Diese Klasse dient als Basis-Klasse für alle neueren Fenster in be.

Eigenschaften

Funktionen und Methoden

CbRefreshGUI()

Löst eine Aktualisierung des Fensters aus. Hierbei wird der Browser aktualisiert und somit

geht die Positionierung verloren.

Die Maske aktualisiert sich auf den neuen positionierten Datensatz.

aGoToID:N

ID des Datensatzes auf dem nach der Aktualisierung positioniert werden soll.

-1 - erster Datensatz

ID welche nicht vorhanden ist - erster Datensatz

CbRefreshGUIKeepPosition():L

Löst eine Aktualisierung des Fensters aus. Hierbei wird der Browser aktualisiert und es wird versucht, die aktuelle Positionierung beizubehalten.

aForceReposition:L

Position mit allen Mitteln beibehalten. Bei vielen Datensätzen kann dies etwas länger dauern.

False - erst wird nur versucht auf den positionierten Datensatz erneut zu positionieren, falls dieser nicht mehr existiert in der Ansicht, wird der erste Datensatz verwendet.

True - es wird versucht auf den positionierten Datensatz erneut zu positionieren, falls dieser nicht mehr existiert wird versucht auf den nächsten Datensatz zu positionieren usw.

Existiert kein nächster Datensatz mehr, wird versucht auf den vorherigen Datensatz zu positionieren usw.

Beispiel

// kein Beispiel vorhanden


TBeDbChart

TBeDbChart

Die Klasse TBeDbChart kapselt alle Funktionalitäten und Eigenschafte die zum Anlegen und zur Aufbereitung von Diagrammen nötig sind.

Eigenschaften:

Eigenschaften

ExecEditChart:S

Diagramm-Designer aufrufen

CbChartToolCount:N

Anzahl der hinzugefügten Tools

Funktionen

CbChartToolAdd:O

Fügt dem Diagramm ein Tool hinzu. Das Tool das übergeben wird muss bereits instanziiert sein.

aCbChartTool:O

Objekt vom Typ TTeeCustomTool

CbChartToolGet:O

Liefert das Tool zurück, das an sich an der Stelle aIndex befindet

aIndex:L

Index des Tools

Methoden

CbChartToolRemove

Entfernt das übergebene Tool wieder von dem Diagramm

aCbChartTool:O

Objekt vom Typ TTeeCustomTool

Beispiel

// Hinweis: Das Beispiel erfodert ein Formular mit der ID "@CHART_1", auf welchem

//          sich die mit "FindObject()" geladenen Objekte befinden

|oForm, BeDBChart1, Series1, ChartTool1,

 BeAdsQuery1, MemCalcTable1, DataSourceEx1, BeAltGrid1,

 cJahr, cJahrBis

|

StartSeq

   // Formular-Objekte laden

   oForm := LoadForm( "@CHART_1", Application ),

   oForm.Visible := false,

   BeDBChart1    := FindObject( oForm, "BeDBChart1" ),

   Series1       := FindObject( oForm, "Series1" ),

   ChartTool1    := FindObject( oForm, "ChartTool1" ),

   BeAdsQuery1   := FindObject( oForm, "BeAdsQuery1" ),

   MemCalcTable1 := FindObject( oForm, "MemCalcTable1" ),

   DataSourceEx1 := FindObject( oForm, "DataSourceEx1" ),

   BeAltGrid1    := FindObject( oForm, "BeAltGrid1" ),

   // Abfrage-Zeitraum

   cJahr    := str(year(date())-1) + '01',

   cJahrBis := str(year(date())-1) + '12',

   // SQL-Abfrage: Gesamt-Umsätze im angegeben Jahr

   BeAdsQuery1.SQL := sqlstr(SELECT DAB520.JAHRMONAT, DAB520.VK_UMSATZ,

                             convert(DAB520.JAHRMONAT, SQL_INTEGER) AS JAHRMONAT_INT

                                FROM

                                WHERE     SUCHBEGR like 'TT%'

                                      AND JAHRMONAT >=

                                      AND JAHRMONAT <=

                                      AND TAG is null

                                      AND ABTEILUNG =

                                      AND STANDORT =

                            ),

   BeAdsQuery1.Active := true,

   // SQL-Ergebnis in Memtable übertragen

   MemCalcTable1.BorrowFromDataSet := BeAdsQuery1,

   // Weitere Spalte wird für die Beschriftung der Monate im Chart gebraucht

   AddMemField(MemCalcTable1, 'BEZ', 'C', 20, 0),

   MemCalcTable1.Active := true,

   dbgotop(BeAdsQuery1),

   while not eof(BeAdsQuery1) do

     myappend(MemCalcTable1),

     MemCalcTable1:JAHRMONAT     := BeAdsQuery1:JAHRMONAT,

     MemCalcTable1:JAHRMONAT_INT := BeAdsQuery1:JAHRMONAT_INT,

     MemCalcTable1:VK_UMSATZ     := BeAdsQuery1:VK_UMSATZ,

     MemCalcTable1:BEZ           := cMonth(stod(BeAdsQuery1:JAHRMONAT + '01')),

     mypost(MemCalcTable1),

     dbskip(1, BeAdsQuery1),

   end,

   // MemTable zusätzlich im Browser anzeigen

   BeAltGrid1.RegisterDataSet := MemCalcTable1,

   BeAltGrid1.ReadWriteProps  := false,

   // Captions setzen

   oForm.OrigCapt := 'Beispielprogramm: TBeDBChart in F12 Masken',

   BeDBChart1.Title.Text := 'Umsätze nach Monaten (' + Str(year(date())) + ')',

   // Chart: Anzeige refreshen

   BeDBChart1.ExecRefreshChart,

   // Formular anzeigen

   ShowModal(oForm),

OnError

   Meld(GetErrorText()),

   DestroyObject( oForm ),

StopSeq,


TBeDBColorComboBox

TBeDBColorComboBox

TBeDBColorComboBox zeigt eine Liste von BeDesignColors zur Auswahl an.

Eigenschaften |
ColorValue:N | Numerischer Wert der ausgewählten Farbe. (Nur lesen möglich)
Properties.AllowSelectColor:L | Erlaubt es über einen Button frei definierbare Farben auszusuchen.
ShowDescriptions:L | Bestimmt ob die Farbbeschreibung angezeigt werden soll.

Verwendung:

- Erzeugung per Codeblock-Funktion CreateObject

Beispiel

| oForm, oColorBox1, oColorBox2, oMem, ds_DataSource |

startseq

   ds_DataSource         := CreateObject('TDataSource'),

   oMem                  := CreateObject('TMemCalcTable'),

   AddMemfield(oMem, 'Testfeld1', 'N', 10, 0),

   AddMemfield(oMem, 'Testfeld2', 'N', 10, 0),

   oMem.Active           := True,

   DBAppend(oMem),

   oMem:Testfeld1 := GetBeDesignColor(dcbYellow, dcgLevel2),

   oMem:Testfeld2 := GetBeDesignColor(dcbRed,    dcgLevel5),

   DBPost(oMem),

   ds_DataSource.DataSet := oMem,

   oForm      := CreateObject('TFormEx', 'BoxTestForm'),

   oColorBox1 := CreateObject('TBeDBColorComboBox', 'Box1', oForm, oForm),

   oColorBox2 := CreateObject('TBeDBColorComboBox', 'Box2', oForm, oForm),

   oColorBox1.DataSource := ds_DataSource,

   oColorBox2.DataSource := ds_DataSource,

   oColorBox1.DataField  := 'Testfeld1',

   oColorBox2.DataField  := 'Testfeld2',

   oColorBox1.Width      := 200,

   oColorBox2.Width      := 200,

   oColorBox2.Top        :=  30,

   oColorBox1.Properties.AllowSelectColor := True,  // Anzeigen des Buttons zum öffnen der Farbauswahl

   oColorBox1.Properties.ShowDescriptions := False, // Keine Farbbeschreibungen

   oColorBox2.Properties.AllowSelectColor := False, // Keinen Button zum öffnen der Farbauswahl anzeigen

   oColorBox2.Properties.ShowDescriptions := True,  // Farbbeschreibungen anzeigen

   ShowModal(oForm),

   writeln(oColorBox1.ColorValue), // Ausgewählte Farbe nach dem Schließen ausgeben

   writeln(oColorBox2.ColorValue), // Ausgewählte Farbe nach dem Schließen ausgeben

always

   DestroyObject(oMem),

   DestroyObject(oColorBox1),

   DestroyObject(oColorBox2),

stopseq

Siehe auch:

TBeColorComboBox


TBeDbGet

TBeDbGet

Die Klasse dient als "Kontainer" für Tabellen. Alle Tabellen des Kontainers arbeiten auf der ADS-Connection des Containers. Das Klasse dient zur vereinfachten, gesammelten Übergabe von Tabellen an Funktionen, anstelle der einzelnen Tabellen, sowie zur gezielten Steuerung von Transaktionen.

Eigenschaften:

Eigenschaften
AdsConnection:O | Die AdsConnection des Datenmoduls vom Typ TAdsConnection
BeAdsConnection:O | Die AdsConnection des Datenmoduls vom Typ TBeAdsConnection
Funktionen
CbTransaction_TryRollback:L | Die Funktion prüft, ob die Transaktion noch aktiv ist und führt ein RollBack aus, falls dies der Fall ist.
CbTransaction_Active:L | Die Funktion prüft, ob die Transaktion noch aktiv ist.
Methoden
CbTransaction_Begin | Die Methode startet die Transaktion.
CbTransaction_Commit | Die Methode schließt die Transaktion ab.

Beispiel

| oDataModule, oDab020 |

oDataModule := CreateObject('TBeDBGet', 'DATAMODULE'),

startseq

   oDab020 := DbGetTable(oDataModule, waDab020, 'STORE'), // Tabelle gehört nun dem Datenmodul

   oDataModule.CbTransaction_Begin(), // Start der Transaktion

   startseq

      // Beliebige Aktionen die in Transaktion erfolgen müssen...

      oDataModule.CbTransaction_Commit(), // Transaktion abschließen

   always

      oDataModule.CbTransaction_TryRollback(), // Wenn ein Fehler aufgetreten ist

                                               // und die Transaktion noch aktiv ist,

                                               // dann wird ein Rollback() durchgeführt

   stopseq,

always

   DestroyObject(oDataModule),

stopseq,

Siehe auch:

DBGetLookup()

DBGetMemTable()

DBGetTable()

DBLinkTable()

DBUnLinkTable()


TBeDBUserList

TBeDBUserList

Klasse zur Datenbank-gebundenen Darstellung / Auswahl von BE-Benutzern in einer Mehrfach-Auswahlliste.

Eigenschaften:

Allgemeine-Eigenschaften

siehe Klasse TBeUserList

DataSource DataSource-Objekt

DataField Datenbank-Feld

Aktive-Eigenschaften (Methoden)

ExecRefresh User-Liste befüllen

Siehe auch:

TBeUserList

TBeUserCombo


TBeDelivData, TBeCumDelivData

TBeDelivData, TBeCumDelivData

Belegdruck-Klassen zum Druck von Einzel- bzw. Sammellieferscheinen.

Eigenschaften TBeDelivData:

PrintPersNo:N Immer 0 !

PrintDocNo:C Aufragsnummer, numerisch

Eigenschaften TBeCumDelivData:

PrintPersNo:N Kunden-Nr., numerisch

PrintDocNo:C LPRUEFSUM, alpha

Hierarchie:

TBePrintData -> TBeOfferData -> TBe[Cum]DelivData

Beispiel

function PrintLieferschein( oDab050 )

   |oPrint|

   oPrint := CreateObject("TBeDelivData"),

   startseq

     oPrint.QuietMode    := True,

     oPrint.PrintDocNo   := Val(oDab050:ANUMMER), // Zu druckender Auftrag

     oPrint.ExecPrint,                            // Einzeln drucken

   always

     DestroyObject(oPrint),

   stopseq,

end,

function PrintSammelLieferschein( oDab050 )

   |oPrint|

   oPrint := CreateObject("TBeCumDelivData"),

   startseq

     oPrint.QuietMode    := True,

     oPrint.PrintPersNo  := oDab050:KDNR,         // Zu druckende Kundennr.

     oPrint.PrintDocNo   := oDab050:LPRUEFSUM,    // Zu druckende Lieferanschrift

     oPrint.ExecPrint,                            // Einzeln drucken

   always

     DestroyObject(oPrint),

   stopseq,

end,

Siehe auch:

TBeRemovalData, TBeCumRemovalData

TBePrintData

TBeCumBillData


TBeDispositionBusinessController

TBeDispositionBusinessController

Die Klasse TBeDispositionBusinessController kapselt Hilfs-Funktionen für die Disposition.

Eigenschaften

Eigenschaften

Funktionen und Methoden

CbPriorWorkDate:D

Rückwärts-Terminierung

Liefert ein Datum der x Arbeitstage vor dem angegebenen Datum liegt.

Hier werden die Firmen/Bereichs-Arbeitstage sowie die Feiertage und Betriebsruhen berücksichtigt.

aDate:D | Anfangs-Datum der Berechnung
aDayCount:N | Anzahl der Arbeitstage um welche zurück gerechnet werden soll
aDivision:U | Unternehmensbereich; - wddProduction (Produktion); - wddStockOutgoing (Wareineingang); - wddStockReceive (Warenausgang)

CbNextWorkDate:D

Vorwärts-Terminierung

Liefert ein Datum der x Arbeitstage nach dem angegebenen Datum liegt.

Hier werden die Firmen/Bereichs-Arbeitstage sowie die Feiertage und Betriebsruhen berücksichtigt.

aDate:D | Anfangs-Datum der Berechnung
aDayCount:N | Anzahl der Arbeitstage um welche zurück gerechnet werden soll
aDivision:U | Unternehmensbereich (siehe CbPriorWorkDate)

CbWorkDaysCount:N

Liefert die Anzahl der Arbeitstage die im Bereich der angegebenen Datum-Werten liegen.

Beide Daten werden mitgezählt.

Hier werden die Firmen/Bereichs-Arbeitstage sowie die Feiertage und Betriebsruhen berücksichtigt.

aFromDate:D | Anfangs-Datum
aToDate:D | Ende-Datum
aDivision:U | Unternehmensbereich (siehe CbPriorWorkDate)

CbIsWorkDay:L

Prüft ob der Tag, des übergebenen Datums, ein Arbeitstag ist.

Hier werden die Firmen/Bereichs-Arbeitstage sowie die Feiertage und Betriebsruhen berücksichtigt.

aDate:D | Datum
aDivision:U | Unternehmensbereich (siehe CbPriorWorkDate)

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung:

// Berechung bzw. Rueck/Vor-Terminierung von Arbeitstagen unter Berücksichtigung

// von Feiertagen und Betriebsruhen

//##############################################################################

//##############################################################################

| oDispoBC, dDate, cKW, dFoW|

oDispoBC := CreateObject('TBeDispositionBusinessController'),

startseq

   dDate := Date(),

   // Prüfen ob heute ein Arbeitstag ist

   writeln('Heute ' + DateTimeToStr(dDate) + ' ist ein Arbeitstag: ' +

           iif( oDispoBC.CbIsWorkDay( dDate, wddProduction ), 'Ja', 'Nein' ) ),

   // Arbeitstage in der heuten KW

   cKW := KW(Date()),

   dFoW := FridayOfWeek(cKW),

   writeln('Arbeitstage in KW ' + cKW + ': ' +

           Str( oDispoBC.CbWorkDaysCount(dFoW - 4, dFoW + 2, wddProduction) ) ),

   // nächster Arbeitstag

   writeln('nächster Arbeitstag: ' +

           DateTimeToStr( oDispoBC.CbNextWorkDate(dDate, 1, wddProduction) ) ),

   // nächster Arbeitstag nach KW

   writeln('nächster Arbeitstag nach Sonntag der KW: ' +

           DateTimeToStr( oDispoBC.CbNextWorkDate(dFoW + 2, 0, wddProduction) ) ),

   // vorheriger Arbeitstag

   writeln('vorheriger Arbeitstag: ' +

           DateTimeToStr( oDispoBC.CbPriorWorkDate(dDate, 1, wddProduction) ) ),

   // letzer Arbeitstag der vorherigen KW

   writeln('letzer Arbeitstag der vorherigen KW: ' +

           DateTimeToStr( oDispoBC.CbPriorWorkDate(dFoW - 4, 1, wddProduction) ) ),

always

   DestroyObject(oDispoBC),

stopseq,


TBeDocScanItem

TBeDocScanItem

Objekt, dass eine durch den TBeDocScanner gescannte Seite representiert.

Verwendung:

Zugriff über CollItem(TBeDocScanner.StackOfScans, [Seitennummer]) (siehe Beispiel)

Eigenschaften

FileName:C

Name inclusive Verzeichnispfad unter dem die Seite gespeichert ist oder gespeichert werden soll.

AsString:C

Wandelt eine Seite in eine alphanumerische Zeichenfolge um. z. B. um einen Scan in einem Memo-Feld zu speichern.

AsFile:C

&#183 Der Aufruf von TBeDocScanItem.AsFile speichert das aktuelle Bild unter dem gesetzten FileName ab.
Ist hier kein Dateityp angegeben werden Schwarzweiß-Bilder als .TIFF und Farbbilder als .jpeg abgespeichert.

&#183 Eine Zuweisung
z. B. TBeDocScanItem.AsFile := C:\Temp\Bild.jpeg
öffnet dieses Bild und überschreibt das aktuelle TBeDocScanItem mit dem Bild aus der angegebenen Datei.

IsSaveFormatValid:L

Gibt zurück ob die derzeit gesetzte Dateiendung des FileName gültig ist.

ValidSaveFormats:A

Gibt ein Array mit allen, für das aktuelle Bild, verfügbaren Dateiendungen zurück.

CbSelected:L

Gibt zurück ob eine Seite ausgewählt wurde.

Beispiel

| oDocScanner, nSeitenNr, oSeite |

// 1. Objekt erstellen

oDocScanner := CreateObject( 'TBeDocScanner' ),

// 2. Setzen von optionalen Einstellungen

oDocScanner.Options.Silence := 1, // 0 = BE-Dialog UND Twain-Dialog des Treibers

                                  // 1 = nur BE-Dialog

                                  // 2 = kein Dialog

                                  // 3 = nur Twain-Dialog des Treibers

oDocScanner.Options.ScanMultiple           := False,                      // Kein mehrseitigen Scan zulassen

oDocScanner.Options.ScanSetting.Source     := 'HP PrecisionScan LTX 1.2', // Gerätname setzen

oDocScanner.Options.ScanSetting.Size       := 1,                          // A4 = Format voreinstellen

oDocScanner.Options.ScanSetting.Resolution := 150,                        // Auflösung von 150 dpi verwenden

oDocScanner.Options.ScanSetting.Color      := 1,                          // Farben auf Graustufen voreinstellen

// Beleg-Scansetting laden (Nummer entspricht der Reihenfolge der Einträge in den Druckerzuweisungen)

oDocScanner.SettingID := 2,

// 3. Scan ausführen bzw. Dialog anzeigen

oDocScanner.ExecScan,

// Ab hier werden die Einzelnen gescannten Seiten durchlaufen

for nSeitenNr := 1 to CollCount(oDocScanner.StackOfScans) do                 // Zugriff auf die Seiten über die StackOfScans-Property

   oSeite := CollItem(oDocScanner.StackOfScans, nSeitenNr),                  // Laden einer einzelnen Seite

   writeln('Dateipfad + Name der Seite', oSeite.FileName),                   // Ausgabe des Dateinamens unter dem die Seite derzeit gespeichert ist

   writeln('Seite als String ersten 50 Zeichen', Left(oSeite.AsString, 50)), // Ausgabe der ersten 50 Zeichen des Bildes wenn es als String convertiert wurde

   writeln('Dateiendung gültig', oSeite.IsSaveFormatValid),                  // Prüfung ob das derzeit gesetzte Dateiformat gültig ist

   writeln('Gültige Dateiformate', ArrToStr(oSeite.ValidSaveFormats)),       // Ausgabe aller für diese Seite möglichen Dateiformate

   writeln('Die Seite ist vom Benutzer ausgewählt', oSeite.CbSelected),      // Ausgabe ob die aktuelle Seite vom Benutzer im Dialog ausgewählt wurde

   oSeite.FileName := StrTran(oSeite.FileName, '.png', '.jpeg'),             // Wandeln eines .png zu einem .jpeg über den DateiNamen

   writeln('Neuer Dateipfad + Name der Seite', oSeite.FileName),             // Ausgabe des neuen Dateinamen

   writeln('Neue Dateiendung gültig', oSeite.IsSaveFormatValid),             // Prüfung ob jpeg für diese Seite ein gültiges Dateiformat darstellt

   writeln(oSeite.AsFile),                                                   // Speichert das Bild als neue Datei unter dem gesetzten FileName (Pfad + Name)

   oSeite.AsFile := 'C:\Temp\Testpic.png',                                   // Überschreibt das aktuelle TBeDocScanItem mit dem Bild aus dem angegebenen Dateipfad

   writeln('Dateipfad + Name der soeben geladenen Datei', oSeite.FileName),

next,

Siehe auch:

TBeDocScanner


TBeDocScanner

TBeDocScanner - Belege einscannen per Codeblock

Die Klasse dient zum einscannen von Dokumenten mit dem Standard Scan-Dialog. Die gescannten Dokumente können anschließend als Datei oder in der Datenbank (in einem Blob-Feld) gespeichert werden.

Verwendung:

- TBeDocScanner-Objekt erstellen

- die Default-Scan-Einstellungen überschreiben (optional)

- Scan ausführen

- Scan(s) abholen bzw. verarbeiten (siehe TBeDocScanItem)

Eigenschaften

Options.ScanSetting

Hiermit lassen sich die Einstellungen für den Scan manuell setzen.

Source:C | Name der Quelle. (Siehe auch AvailSources)
Size:N | Einstellung der Papiergröße.
Resolution:N | Auflösung des Scans in DPI.
Color:N | Anzahl verfügbarer Farben für den Scan.
AutoDeSkew:B | Papierformat automatisch erkennen.
AutoRotate:B | Scan automatisch Drehen.
AutoBright:B | Helligkeit automatisch anpassen.
AvailSources | Gibt eine Collection mit allen für den Scan verfügbaren Geräten zurück.

StackOfScans

Gibt eine Collection mit allen eingescannten Bildern zurück. Zugriff über CollItem().

SettingID:N

Ermöglicht das Setzen von Einstellungen der Einträge in den Druckerzuweisungen. Nummer entspricht der zweistelligen ID der Einstellungen.

Caption:C

Ermöglicht das Setzen des Dialog-Titels.

AttachFileNames

Gibt eine Collection mit allen Dateinamen der Anhänge zurück. Zugriff über CollItem().

ShowAttachments:B

Ermöglicht das hinzufügen von Anhängen im Scan-Dialog über einen Menüpunkt.

ExecScan

Führt den Scan aus bzw. zeigt den Scan-Dialog an.

ExecPageScan

Startet den Scanvorgang für eine Seite und fügt diese einer eventuell existierenden Scanliste (durch ExecScan) hinzu.

LayoutMode:B

Bestimmt ob die gescannten Dokumente nach der Verarbeitung aus dem Quell-Verzeichnis entfernt werden sollen. (Gilt nicht für Dokumente die über "öffnen" ausgewählt wurden)

Beispiel

| oDocScanner, nSeitenNr, oSeite |

// 1. Objekt erstellen

oDocScanner := CreateObject( 'TBeDocScanner' ),

// 2. Setzen von optionalen Einstellungen

oDocScanner.Options.Silence := 1, // 0 = BE-Dialog UND Twain-Dialog des Treibers

                                  // 1 = nur BE-Dialog

                                  // 2 = kein Dialog

                                  // 3 = nur Twain-Dialog des Treibers

oDocScanner.Options.ScanMultiple           := False,                      // Kein mehrseitigen Scan zulassen

oDocScanner.Options.ScanSetting.Source     := 'HP PrecisionScan LTX 1.2', // Gerätname setzen

oDocScanner.Options.ScanSetting.Size       := 1,                          // A4 = Format voreinstellen

oDocScanner.Options.ScanSetting.Resolution := 150,                        // Auflösung von 150 dpi verwenden

oDocScanner.Options.ScanSetting.Color      := 1,                          // Farben auf Graustufen voreinstellen

// Beleg-Scansetting laden (Nummer entspricht der Reihenfolge der Einträge in den Druckerzuweisungen)

// Achtung: Das Setzen der ID überschreibt bisher getroffene Einstellungen.

oDocScanner.SettingID := 2,

// 3. Scan ausführen bzw. Dialog anzeigen

oDocScanner.ExecScan,

// 4. Die Scans liegen jetzt in Form einer Collection-Liste vor und können abgeholt werden

// Wurde die Verarbeitung abgebrochen, ist die Liste leer

for nSeitenNr := 1 to CollCount(oDocScanner.StackOfScans) do

   // Beispiel 1: als Datei speichern

   oSeite := CollItem(oDocScanner.StackOfScans, nSeitenNr),

   oSeite.Filename := 'c:\temp\TestSeite' + StrZero(nSeitenNr, 3) + '.jpg',

   if oSeite.IsSaveFormatValid then

      oSeite.AsFile,

   else

      MessageDlg('Ungültiges Format: Scan kann nicht gespeichert werden!'),

   endif,

   // Beispiel 2: in Blob-Feld speichern

   DBAppend(oKdn700),

   oKdn700:BILD := oSeite.AsString,

   DBPost(oKdn700),

next,


TBeEdit

TBeEdit

Standard Be-Eingabefeld

Eigenschaften |
IsLoaded:L | Muss auf 'True' gesetzt werden, um das Standard-Be-Kontextmenü zu erhalten
AutoNextField:L | Wird der eingegebene Text länger als die Länge der Eingabemaske, so wird automatisch das nächste Control fokusiert

Beispiel

//******************************************************************************

// Beschreibung: Dieses CodeBlock-Programm dient zur

//               Demonstration der Klasse TBeInfoPanel

//******************************************************************************

| oForm, oEdit, oLabel |

//##############################################################################

//##############################################################################

// Initialisierung

//##############################################################################

//##############################################################################

// oFrom

oForm        := CreateObject('TFormEx', 'frm_Main'),

oForm.Width  := 300,

oForm.Height := 100,

// oEdit

oEdit          := CreateObject('TBeEdit', 'edt_Test', oForm, oForm),

oEdit.Left     := 100,

oEdit.Top      := 5,

oEdit.Width    := 180,

oEdit.Text     := '',

oEdit.IsLoaded := True, // Wichtig, um das Be-Standard-Kontextmenü zu erhalten

// oLabel

oLabel         := CreateObject('TLabel', 'lbl_Test', oForm, oForm),

oLabel.Left    := 5,

oLabel.Top     := 8,

oLabel.Caption := 'TBeEdit',

ShowModal(oForm),

DestroyObject(oForm),

Siehe auch:

TBeSearchEdit


TbeEditCombo

TbeEditCombo

Basis-Lookup-Combo Klasse. Mit eine Möglichkeit mehrere Spalten anzuzeigen und Incremental-Search in beliebigen Spalten durchzuführen.

Eigenschaften:

Eigenschaften

DataSource

DataSource der MainTable, in der die Auswahl/Eingabe gespeichert wird. Einfachste Verwendung ist mit die schon bestehende Merkmalstabelle.

DataField

Name des Feldes der MainTable, in der die Auswahl/Eingabe gespeichert wird.

ItemIndex

Nummer der gerade ausgewählte Zeile des DataSource. Fängt mit 0 an. Wert -1 bedeutet keinen Auswahl.

Value

Wert der Properties.KeyFieldNames der gerade ausgewählten Zeile des DataSource entspricht.

Text

Wert, die im Edit steht. Entspricht Properties.ListFieldNames + Properties.ListFieldIndex der gerade ausgewählte Zeile des DataSource.

Properties.ListSource

DataSource mit Daten zur Anzeige im DropDown-Fenster und für die Incremental-Search.

Properties.ListFieldNames

Namen der Felder. Deren Werte im DropDown-Fenster sichtbar sind. Von links nach rechts, mit Semicolon getrennt.

Properties.ListFieldIndex

Index des Feldes, das zur Incremental-Search genutzt wird.

Default ist 0 was dem ersten sichtbaren Feld entspricht.

Properties.KeyFieldNames

Namen der Felder, deren Werte als Value geliefert werden oder selektiert sind.

Wenn DataField und DataSource gesetzt sind, hat KeyFieldNames nur ein Feld , mit dem gleichen Daten-Typ wie DataField.

Properties.DropDownWidth

Gesamt-Breite des DropDown-Fensters.

Properties.ListOptions.HasHeader

Zeile mit Beschriftungen der Felder anzeigen.

Default ist True.

Properties.ListOptions.GridLines

Art der Anzeige der Linien zwischen den Daten:

Wert 0 zeigt beide (vertikale und horizontale) Linien an. Default.
Wert 1 zeigt keine Linien an.
Wert 2 zeigt nur vertikale Linien an.
Wert 3 zeigt nur horizontale Linien an.

Properties.ListColumns

Collection von Spalten der DropDown-Fenster. Erst anpassbar nach der Zuweisung von Properties.ListFieldNames.

Zur Arbeit mit Collection dient die Funktion CollItem, dessen Index mit 1 anfängt.
ListColumn hat Eigenschaften wie Width, Caption usw.

Verwendung:

- TBeEditCombo auf eine F12-Maske platzieren, wenn möglich DataField und DataSource zuweisen oder ohne Einbindung einer Tabelle nutzen

- Properies.ListSource zuweisen. (DataSource mit Daten für DropDown-Fenster)

- Im F12-Designer befindet sich die Komponente unter der Palette "Combos"

- Es kann die Breite jeder Spalte / Feld mit der Funktion CollItem gesetzt werden, siehe Beispiel.

Beispiel

|

   oForm, BeBitBtn1, beEditCombo1, lbl_beEditCombo1

   , oDataSource, oMemTable, aColumn

|

//******************************************************************************

//

//******************************************************************************

function BeBitBtn1Click( Sender )

  | vVal, sText, nIndex |

  nIndex := beEditCombo1.ItemIndex,

  if Empty(beEditCombo1.Value) then

    ShowMessage('Bitte wählen Sie einen Kontakt aus. (' + Str(nIndex) + ')'),

  else

    vVal  := beEditCombo1.Value, // Telefon

    sText := beEditCombo1.Text,  // Name

    ShowMessage(sText + ' (' + Str(nIndex) + ')' + CrLf + 'Rufen Sie die Nummer an: ' + vVal),

  endif,

end,

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// MemTable erstellen

//******************************************************************************

function CreateMemTable(aFields)

  | oMem, nArrLen, i |

  nArrLen := ALen(aFields),

  oMem := CreateObject('TBeMemTable', 'LookupTable'), // Name der TBeMemTable ist pflichtlich

  // Felder hinzufügen:

  for i := 1 to nArrLen do

     oMem.CbAddField(aFields[i, 1], aFields[i, 2], aFields[i, 3]),

  end,

  Result := oMem,

end,

//******************************************************************************

// MemTable mit Datensätze füllen

//******************************************************************************

function FillMemTable(oMem)

  | aContacts, i, nArrLen |

  aContacts := {

                {'Max Mustermann', '0123456789', 'Straße 1, 12345 München'},

                {'Erika Mustermann', '0123456789', 'Straße 1, 12345 München'},

                {'John Wayne', '0987656789', 'Straße 5, 54321 Hamburg'},

                {'Horst Hansen', '6234858', 'Straße 11, 20945 Stuttgart'},

                {'Herbert Huber', '016789', 'Straße 6, 11145 Berlin'}

                },

  nArrLen := ALen(aContacts),

  for i := 1 to nArrLen do

     oMem.CbAppend(),

     oMem:NAME    := aContacts[i, 1],

     oMem:TELEFON := aContacts[i, 2],

     oMem:ADRESSE := aContacts[i, 3],

     oMem.CbPost(),

  end,

  oMem.CbOrderBy('Name'),

end,

//******************************************************************************

// Initialisierung der MemTable

//******************************************************************************

function Init()

  oMemTable := CreateMemTable({

                               {'Name',    ftString, 30},

                               {'Telefon', ftString, 12},

                               {'Adresse', ftString, 50}

                               }),

  oMemTable.Active             := true,

  oDataSource                  := CreateObject('TDataSourceEx'),

  oDataSource.DataSet          := oMemTable,

  FillMemTable(oMemTable),

end,

startseq

   oForm          := CreateObject('TFormEx'),

   oForm.OrigCapt := 'TbeEditCombo im Codeblock',

   oForm.Position := POSCREENCENTER,

   oForm.Width    := 400,

   oForm.Height   := 180,

   BeBitBtn1         := CreateObject("TBeBitBtn", "BeBitBtn1", oForm, oForm),

   BeBitBtn1.Caption := 'Aktion',

   BeBitBtn1.Left    := 150,

   BeBitBtn1.Top     := 60,

   AssignEvent(BeBitBtn1, 'OnClick', 'BeBitBtn1Click'),

   beEditCombo1      := CreateObject("TbeEditCombo", "beEditCombo1", oForm, oForm),

   beEditCombo1.Left := 150,

   beEditCombo1.Top  := 30,

   lbl_beEditCombo1         := CreateObject("TBeLabel", "lbl_beEditCombo1", oForm, oForm),

   lbl_beEditCombo1.Caption := 'Kontakt',

   lbl_beEditCombo1.Left    := 75,

   lbl_beEditCombo1.Top     := 35,

   Init(),

   beEditCombo1.Properties.ListSource     := oDataSource,

   beEditCombo1.Properties.ListFieldNames := 'Telefon;Name;Adresse',

   beEditCombo1.Properties.ListFieldIndex := 1,          // Name - 0 Indexed von ersten Sichtbaren Feld (Properties.ListFieldNames)

   beEditCombo1.Properties.KeyFieldNames  := 'Telefon',  // beEditCombo1.Value

   beEditCombo1.Properties.DropDownWidth  := 400,        // gesamt Breite

   beEditCombo1.Properties.ListOptions.ShowHeader := false,

   beEditCombo1.Properties.ListOptions.GridLines  := 1, // 0 = beide, 1 = keine, 2 = verikale, 3 = horizontale

   // Anzeige der Spalten steuern

   aColumn := CollItem(beEditCombo1.Properties.ListColumns, 1), // Telefon

   aColumn.Width := 80,

   aColumn := CollItem(beEditCombo1.Properties.ListColumns, 2), // Name

   aColumn.Width := 120,

   aColumn := CollItem(beEditCombo1.Properties.ListColumns, 3), // Adresse

   aColumn.Width := 200,

   ShowModal(oForm),

onerror

   DestroyObject(oForm),

   writeln(Str(GetErrorLine()) + ': ' + GetErrorText(GetErrorObj())),

stopseq,


TbeEditDatePicker

TbeEditDatePicker

Die Komponente dient zur Auswahl von Datum/Zeitangaben auf Formularen.

Hinweis

Es werden nur ungewöhnliche Eigenschaften aufgelistet.

Wochenformat ist mit dem langen Datumsformat sowie dem Format mit Zeitangaben nicht kompatibel.

Individuelles Styling ist in dieser Komponente nicht möglich.

Eigenschaften:

Eigenschaften
ShowLongYear:L | true: Der lange Datumsformat wird verwendet (DD.MM.YYYY) false: Der kurze Datumsformat wird verwendet (DD.MM.YY); Default: false
AllowCalenderWeeksFormat:L | true: Der Kalenderwochenformat wird erlaubt (KW.XX.XX) false: Der Kalenderwochenformat wird verboten; Default: false; Hinweis: ShowLongYear und AllowTime können nicht mit dieser Eigenschaft aktiv werden.
AllowTime:L | true: Zeitangaben an (und Im Kalender wird auch ein Uhr angezeigt) false: Zeitangaben aus; Default: false
Properties.MinDate:D | Beschränkt den Auswahl von Daten in dem Kalender nach dem angegebenen Startdatum.
Properties.MaxDate:D | Beschränkt den Auswahl von Daten in dem Kalender bis den angegebenen Enddatum.
Properties.DateOnError | Im Falle der falschen Eingabe (z.B. 31.02.2020) soll ein Wert in dem Edit geschrieben sein deNoChange: der Wert in dem Editor bleibt gleich deToday: der Wert wird auf das heutige Datum gesetzt deNull: der Editor wird geleert (das Wert wird auf NullDate (-700000) gesetzt)
Value:U | Die Eigenschaft dient zum Lesen/Schreiben des Wertes in diversen Datentypen. z.B. nichts angegeben -> ''; KW.25.19 -> 'KW.25.19'; Heute -> DateTime

Beispiel

// Erstellen Sie einen einfachen Formular mit einem beEditDatePicker auf dem Form.

|

   // @VDB@ Der nachfolgende Teil wird automatisch gepflegt.

   oForm, A_HelpContent, BeEdit1, beEditDatePicker1, DataSourceEx1

   // @VDE@ Der vorangehende Teil wird automatisch gepflegt.

|

//******************************************************************************

function beEditDatePicker1Exit( Sender )

   Meld('Value: ' + ArrToStr({beEditDatePicker1.Value})),

end,

startseq

   // @VZB@ Der nachfolgende Teil wird automatisch gepflegt.

   oForm             := LoadForm("@AESDDA", Application),

   BeEdit1           := FindObject(oForm, "BeEdit1"),

   beEditDatePicker1 := FindObject(oForm, "beEditDatePicker1"),

   // @VZE@ Der vorangehende Teil wird automatisch gepflegt.

   Show(oForm),

onerror

   DestroyObject(oForm),

stopseq,


TBeEmployeeBO

TBeEmployeeBO

Die Klasse TBeEmployeeBO kapselt Eigenschaften und Funktionen der BDE-Mitarbeiter Tabelle DAB262.

Hinweis: nur lesend

Eigenschaften:

Eigenschaften
CbCalcVTM:O | Datenbank für BDE Funktionen/Qualifikationen

Tabellen und Felder
CbPersNo:N | (nur lesend) Personal-Nummer; (entspricht DAB262:PERSNR)
CbFullName:C | (nur lesend) Personal-Name, Vorname; (entspricht DAB262:NAME)
CbPhoneExtension:C | (nur lesend) Telefon-Durchwahl; (entspricht DAB262:TEL_DW)
CbPhoneNumber:C | (nur lesend) Telefon-Nummer(berechnet); (entspricht DAB262:TELEFON)
CbMobileNumber:C | (nur lesend) Handy/Mobil-Nummer; (entspricht DAB262:Mobile)
CbEmail:C | (nur lesend) E-Mail Adresse; (entspricht DAB262:MAIL)
CbComeGoAllowed:L | (nur lesend) Kommen/Gehen buchen erlaubt; (entspricht DAB262:KOMMEN_GEHEN)
CbOrderTimesAllowed:L | (nur lesend) Auftragszeit buchen erlaubt; (entspricht DAB262:AUFT_ZEIT)
CbMultiJobsAllowed:C | (nur lesend) Mehrere Jobs parallel erlaubt; (entspricht DAB262:MEHRFACH)
CbApplyDepartmentBreaks:L | (nur lesend) Abteilungs-Pausen-Automatik; (entspricht DAB262:ABT_PAUSEN)
CbStockReceiptAllowed:L | (nur lesend) WE/Quali buchen erlaubt; (entspricht DAB262:WE_QUALI)
CbProdDepartments:C | (nur lesend) Zulässig für Prod.Abteilungen; (entspricht DAB262:PROD_ABT)
CbPlaces:C | (nur lesend) Zulässig für Buchungs-Plätze; (entspricht DAB262:PLAETZE)
CbAllowPostingOfYield:C | (nur lesend) Menge je Arbeitsgang buchen; (entspricht DAB262:MENG_BUCH)
CbAllowPostingOfScrap | (nur lesend) Ausschuss je Arbeitsgang erl. (DAB262:AUSS_BUCH)
CbAllowPostingOfIntegratedTrouble | (nur lesend) Integrierte Störungserf. erl. (DAB262:STOER_BUCH)
CbPassword:C | (nur lesend) Buchungs-Passwort; (entspricht DAB262:PASSWORT)
CbAccNo:N | (nur lesend) Interne Buchungs-Nr Komm/Gehen; (entspricht DAB262:BUCHUGNSNR)
CbDefaultOperationTimeID:N | (nur lesend) Standard Betriebszeit; (entspricht DAB262:BETRZ_ID)
CbJobList:C | (nur lesend) Aktuelle Jobs vor Pause/Gehen; (entspricht DAB262:JOB_LISTE)
CbHoursSunday:N | (nur lesend) Soll-Stunden Sonntag; (entspricht DAB262:SOLLSTD_1)
CbHoursMonday:N | (nur lesend) Soll-Stunden Montag; (entspricht DAB262:SOLLSTD_2)
CbHoursTuesday:N | (nur lesend) Soll-Stunden Dienstag; (entspricht DAB262:SOLLSTD_3)
CbHoursWednesday:N | (nur lesend) Soll-Stunden Mittwoch; (entspricht DAB262:SOLLSTD_4)
CbHoursThursday:N | (nur lesend) Soll-Stunden Donnerstag; (entspricht DAB262:SOLLSTD_5)
CbHoursFriday:N | (nur lesend) Soll-Stunden Freitag; (entspricht DAB262:SOLLSTD_6)
CbHoursSaturday:N | (nur lesend) Soll-Stunden Samstag; (entspricht DAB262:SOLLSTD_7)
CbMinProdPart:N | (nur lesend) Mindest-Produktiv-Anteil in %; (entspricht DAB262:MINDPROD)
CbBreaks:C | (nur lesend) Pausen-Tabelle; (entspricht DAB262:PAUSEN)
CbGroup:C | (nur lesend) Gruppe; (entspricht DAB262:GRUPPE)
CbMainFunction:C | (nur lesend) Hauptfunktion; (entspricht DAB262:FUNKTION)
CbRoundIntime:N | (nur lesend) Minuten-Glättung Kommen +/-; (entspricht DAB262:KOMM_RUND)
CbRoundOutTime:N | (nur lesend) Minuten-Glättung Gehen +/-; (entspricht DAB262:GEHEN_RUND)
CbCostCenter:N | (nur lesend) Kostenstelle; (entspricht DAB262:KOSTENST)
CbCostRate | (nur lesend) Kostensatz der Person; (entspricht DAB262:EKP)
CbPriceUnit | (nur lesend) Preis-Einheit Pers.-Kostensatz; (entspricht DAB262:PE)
CbCustOrderTimes:L | (nur lesend) Kd.-Auftr.Zeit buchen erlaubt; (entspricht DAB262:KDAUF_ZEIT)
CbDateHire:D | (nur lesend) Betriebs-Eintrittsdatum; (entspricht DAB262:DATUM_EIN)
CbDateDismiss:D | (nur lesend) Betriebs-Austrittsdatum; (entspricht DAB262:DATUM_AUS)
CbActivity:C | (nur lesend) Erlaubte Tätigkeiten; (entspricht DAB262:TAETIGKEIT)
CbOverTimeNull:N | (nur lesend) Überst.-0-Stellung bis Stunden; (entspricht DAB262:UEBER_NULL)
CbOverTimeSaldo:C | (nur lesend) Überst-0-Stellung. Bezug auf gesamt Saldo; (entspricht DAB262:UEBER_SALD)
CbUnderTimeNull:N | (nur lesend) Unterst.-0-Stellung bis Stunden; (entspricht DAB262:UNTER_NULL)
CbUnderTimeSaldo:C | (nur lesend) Unterst-0-St.Bezug auf gesamt Saldo; (entspricht DAB262:UNTER_SALD)
CbAccInHouseNew:N | (nur lesend) Nachbuchung Anwesenheit bis Tage; (entspricht DAB262:ANW_NACHB)
CbAccInHouseEdit:N | (nur lesend) Korrektur Anwesenheit bis Tage; (entspricht DAB262:ANW_KORR)
CbAccOrderNew:N | (nur lesend) Nachbuchung Auftragszeit bis Tag; (entspricht DAB262:ZEIT_NACHB)
CbAccOrderEdit:B | (nur lesend) Korrektur Auftragszeit bis Tage; (entspricht DAB262:ZEIT_KORR)
CbRoundMinHour:N | (nur lesend) Umrechnung Anwesenheit Ist-Minuten->Stunden. (entspricht DAB262:IST_RUND)
CbHourValidation:N | (nur lesend) Eingabe-Validierung -> Stunden; (entspricht DAB262:EING_VALID)
CbVocationTotal:N | (nur lesend) Urlaub Jahresanspruch; (entspricht DAB262:URL_GESAMT)
CbMainLocation:N | (nur lesend) Haupt-Standort; (entspricht DAB262:STO_HAUPT)
CbCalenderAvailable:L | (nur lesend) Verfügbar im Terminkalender; (entspricht DAB262:KALENDER)
CbUser:C | (nur lesend) Zugeordneter Benutzer; (entspricht DAB262:USER)
CbShortName:C | (nur lesend) Kurzname; (entspricht DAB262:KURZNAME)
CbID:N | (nur lesend) Datensatz-ID; (entspricht DAB262:ID)

Funktionen und Methoden
CbCalcFirstName:C | Berechnet den Vornamen aus dem ersten Teil(durch Komma getrennt) von CbFullName
CbCalcSurname:C | Berechnet den Vornamen aus dem zweiten Teil(durch Komma getrennt) von CbFullName
CbMainFunctionAsText: | Ist keine Funktion in der BDE Personen/Mitarbeiter(Dab262) für den Mitarbeiter gesetzt, sucht diese Funktion auf der BDE Mitarbeiter/Qualifikationen(DabVTM) nach dem Schlüssel; Hauptfunktion und liefert die dort hinterlegte Beschreibung als zurück.
CbGoToPersNo(aPersNo:N) | Mit dieser Prozedur ist es möglich, das EmployeeBO über eine Personalnummer zu positionieren.
CbGotoID(aBoID:N) | Positioniert das EmployeeBO über die ID des Datensatzes

Beispiel

// Verwendungsbeispiel folgt mit Einführung des zugehörigen Business-Controllers

Siehe auch:

TBeContactBO


TBeExcelFile

TBeExcelFile

Klasse zur Bearbeitung von Excel-Dateien.

Hinweis: Diese Klasse steht mit dem internen Excel-Konverter (/INTERNXLSX) nicht mehr zur Verfügung.

Eigenschaften:

Allgemeine-Eigenschaften

ColId:Integer Spalte nach Nummerierung ansprechen, wird nur verwendet falls ColByName = False

default = 1

Col:String Spalte nach der normalen Excel-Bezeichnung (A,B,C,D, ...), wird nur verwendet falls ColByName = True

default = 'A'

Row:Integer Zeile auf welche zugegriffen werden soll

default = 1

Sheet:Integer Sheet auf welches sich bezogen werden soll (muss vor dem Laden der Datei gesetzt werden)

default = 1

Value:Variant Wert aus der Zelle, ist veränderbar

Alignment:TAlignment Ausrichtung der Zelle nach dem Speichern

default = taRightJustify

FormatIndex:Integer Formatierung

default = -1

ColByName:Boolean Ansprechen der Spalten nach Name

default = True

Aktive-Eigenschaften (Methoden)

LoadFile:String Öffnet die angegebene Excel Datei

SaveFile:String Speichert die Datei (bei leeren String wird die geöffnetet Datei verwendet)

Hinweis:

Beim Laden der Datei kann immer nur ein Sheet geladen werden. Das gleiche gilt auch beim Speichern der Datei. Falls eine Datei gespeichert wird, die mehrere Sheets enthält ist nach dem Speichern nur noch das aktive Sheet vorhanden.

Beispiel

| oExcelFile |

oExcelFile := CreateObject('TBeExcelFile'),

oExcelFile.Sheet := 2,

oExcelFile.LoadFile := 'C:\test.xls',

oExcelFile.Col := 'C',

oExcelFile.Row := 3,

writeln( oExcelFile.Value ),

oExcelFile.Value := 8,

oExcelFile.SaveFile := 'C:\test2.xls',


TBeFieldAttribCheckCombo

TBeFieldAttribCheckCombo

Erweiterte TBeCheckCombo Klasse für die Verwendung von Merkmalstabellen in Verbindung mit nicht "BE-Tabellen" (z.B. Memory-Tables).

Eigenschaften:

Allgemeine-Eigenschaften

BeAttributeID:N ID der zu verwendenden Merkmalstabelle

CheckedItems:Collection Indizes der aktuell ausgewählten Einträge

CheckedCount:N Anzahl der ausgewählten Einträge

ValuesChecked: Collection Wert (Value) der Einträge im ausgewähltem Zustand

ValuesUnChecked: Collection Wert (Value) der Einträge im abgewähltem Zustand

DisplayText:C Anzeige Text (Text der ausgewählten Einträge mit Trennzeichen)

ShowTextAsHint:L Anzeige Text als Hint anzeigen (ShowHint muss aktiv sein)

Separator:C Trennzeichen für Anzeigetext

ShowUserSelectionInContextMenu:L Per Kontext-Menu den aktuellen User an/abwählen (default=False)
Wird automatisch aktiv wenn eine der beiden be-User MM-Tabellen
(-11 & -13) eingestellt wird.

Aktive-Eigenschaften (Methoden)

CBCheckAllItems Alle vorhandenen Einträge auswählen

CBUnCheckAllItems Alle vorhandenen Einträge abwählen

Verwendung:

- TBeFieldCheckCombo auf eine F12-Maske platzieren und BeAttributeID zuweisen

- DataSource muss zugewiesen und aktiv sein

- DataField muss zugewiesen sein

- Im F12-Designer findet sich die Komponente unter der Palette "BE-Combo"

Beispiel

// Beispiel siehe TBeCheckCombo

Siehe auch:

TBeCheckCombo

TBeAttribCheckCombo


TBeFieldAttribCombo

TBeFieldAttribCombo

Erweiterte TBeCombo Klasse für die Verwendung von Merkmalstabellen in Verbindung mit nicht "BE-Tabellen" (z.B. Memory-Tables).

Eigenschaften:

Allgemeine-Eigenschaften

BeAttributeID:N ID der zu verwendenden Merkmalstabelle

Verwendung:

- DataSource muss zugewiesen und aktiv sein

- DataField muss zugewiesen sein

- Im F12-Designer findet sich die Komponente unter der Palette "BE-Combo"

Beispiel

siehe TBeAttribCombo

Siehe auch:

TBeAttribCombo

TBeAttribCheckCombo


TBeFieldChangeBO

TBeFieldChangeBO

Die Klasse TBeFieldChangeBO kapselt Eigenschaften und Funktionen zur Verwaltung von Feld-Änderungen.

Diese Feld-Änderungen werden in der DabAVG gespeichert.

Eigenschaften

Tabellen und Felder
CbSourceLocation:N | Standort des Datensatzes der Feld-Änderung (entspricht DABAVG:DS_STO)
CbSourceWorkarea:N | WorkArea der Tabelle der Feld-Änderung (entspricht DABAVG:DS_WA)
CbFieldName:C | Feldname (entspricht DABAVG:FELDNAME)
CbFieldType:N | Feldtyp (entspricht DABAVG:FELDTYP); 1 - String; 2 - ShortInt; 3 - Integer; 5 - Boolean; 6 - Float; 9 - Datum; 10 - Zeit; 11 - Datum/Zeit; 16 - Memo
CbChangingMode:N | Modus (entspricht DABAVG:MODUS); 1 - Neuanlage des Datensatzes; 2 - Bearbeitung des Datensatzes
CbFieldValue:U | Feldwert (entspricht DABAVG:WERT_)

Funktionen und Methoden

CbInsertFieldChangeByBO

Feld-Änderung für ein BusinessObjekt anlegen

aBusinessObject:O | BusinessObjekt für welche die Feld-Änderung erzeugt werden soll
aFieldName:C | Feldname
aFieldDataType:N | Feldtyp
aMode:N | Modus

CbInsertFieldChange

Feld-Änderung für einen Datensatz anlegen

aSourceTable:O | Tabelle für welche die Feld-Änderung erzeugt werden soll
aFieldName:C | Feldname
aFieldDataType:N | Feldtyp
aMode:N | Modus

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: TBeFieldChangeBO

//               Feld-Änderungsverfolgung

//##############################################################################

//##############################################################################

| m_oFieldChangeBO, m_oDM |

//******************************************************************************

// Feld-Änderung für ein BO

//******************************************************************************

function FieldChangeByBO()

   | oMemoBO |

   oMemoBO := CreateObject('TBeMemoBO'),

   startseq

      // Neues Memo (Typ 10 = Notiz) beim aktuellen Benutzer anlegen

      oMemoBO.WriteLastUsedUserID := c_usr,

      oMemoBO.WriteLastUsed := True,

      oMemoBO.CbInsertEmptyMemo(10, bcMemoLinkIDUser, val(c_usr), 0),

      oMemoBO.SubjectValue := 'Test',

      oMemoBO.MemoValue := 'Das ist eine Test Notiz',

      oMemoBO.BringFwdDateValue := Date(),

      oMemoBO.CbPost(),

      m_oFieldChangeBO.CbInsertFieldChangeByBO(oMemoBO, 'BETREFF', 16, 1),

      m_oFieldChangeBO.CbFieldValue := oMemoBO.SubjectValue,

      m_oFieldChangeBO.CbPost(),

      m_oFieldChangeBO.CbInsertFieldChangeByBO(oMemoBO, 'WV_DATUM', 9, 1),

      m_oFieldChangeBO.CbFieldValue := oMemoBO.BringFwdDateValue,

      m_oFieldChangeBO.CbPost(),

      oMemoBO.CbEdit(),

      oMemoBO.BringFwdDateValue := Date() - 1,

      oMemoBO.CbPost(),

      m_oFieldChangeBO.CbInsertFieldChangeByBO(oMemoBO, 'WV_DATUM', 9, 1),

      m_oFieldChangeBO.CbFieldValue := oMemoBO.BringFwdDateValue,

      m_oFieldChangeBO.CbPost(),

   always

      DestroyObject(oMemoBO),

   stopseq,

end,

//******************************************************************************

// Feld-Änderung für einen Datensatz

//******************************************************************************

function FieldChangeByTable()

   | oDab010 |

   oDab010 := DbGetTable(m_oDM, waDab010),

   startseq

      DbStartTrans(m_oDM.AdsConnection),

      startseq

         DbEdit(oDab010),

         oDab010:BEZ1 := oDab010:BEZ1 + ' (NEU)',

         DbPost(oDab010),

         m_oFieldChangeBO.CbInsertFieldChange(oDab010, 'BEZ1', 16, 1),

         m_oFieldChangeBO.CbFieldValue := oDab010:BEZ1,

         m_oFieldChangeBO.CbPost(),

         DbCommit(m_oDM.AdsConnection),

      onerror

         DbRollback(m_oDM.AdsConnection),

      stopseq,

   always

      DestroyObject(m_oDM.AdsConnection),

   stopseq,

end,

//******************************************************************************

m_oDM            := CreateObject('TBeDbGet'),

m_oFieldChangeBO := CreateObject('TBeFieldChangeBO'),

startseq

   m_oFieldChangeBO.CbDataModule := m_oDM,

   FieldChangeByBO(),

   FieldChangeByTable(),

always

   DestroyObject(m_oDM),

   DestroyObject(m_oFieldChangeBO),

stopseq,


TBeFieldCheckListBox

TBeFieldCheckListBox

Erweiterte TBeCheckListBox Klasse für die Verwendung von Merkmalstabellen in Verbindung mit nicht "BE-Tabellen" (z.B. Memory-Tables).

Eigenschaften:

Allgemeine-Eigenschaften

BeAttributeID:N ID der zu verwendenden Merkmalstabelle

CheckedItems:Collection Indizes der aktuell ausgewählten Einträge

ValuesChecked:Collection Wert (Value) der Einträge

Verwendung:

- TBeFieldCheckListBox auf eine F12-Maske platzieren und BeAttributeID zuweisen

- DataSource muss zugewiesen und aktiv sein

- DataField muss zugewiesen sein

- Im F12-Designer findet sich die Komponente unter der Palette "BE-Combo"

Beispiel

// Beispiel siehe TBeCheckListBox

Siehe auch:

TBeCheckListBox

TBeAttribCheckListBox


TBeFinancialAccountingTransferBC

TBeFinancialAccountingTransferBC

Die Klasse TBeFinancialAccountingTransferBC kapselt Methoden und Eigenschaften um Fibu-Buchungen zu erstellen.

Eigenschaften:

Eigenschaften

CbBeFinancialAccountingTO:O

Transferobjekt für die Fibuübergabe

Methoden

CbInitializeFinancialAccountingTO

Methode zur Initialisierung eines Fibu-Transferobjektes.

CbNew

Die Methode löst das Event "bei Aufbereitung der FiBu-Übergabe-Information" aus und konsolidiert ggf. das Konto-Array. Danach wird das aBeFinancialAccountingTransferBO in den Einfügemodus versetzt

aBeFinancialAccountingTransferBO:O

Objekt vom Typ TBeFinancialAccountingTransferBO

CbPost

Die Eigentschaften des TBeFinancialAccountingTO werden validiert und es wird das Event "vor dem Speichern durch den BC" ausgelöst. Danach wird das aBeFinancialAccountingTransferBO gespeichert.

aBeFinancialAccountingTransferBO:O

Objekt vom Typ TBeFinancialAccountingTransferBO

Verfügbare Ereignisse

bei Aufbereitung der FiBu-Übergabe-Information

Aufruf erfolgt bei der Übertragung der Daten vom Fibu-Transfer-Objekt in das

Fibu-Bussines-Objekt. Über das Info-Objekt kann auf das Transfer-Objekt

(oInfo.CbFinancialAccountingTO) zugegriffen werden. Über die Eigenschaft

CbFinancialAccountingTO.CbAccountingArrayConsolidationNeeded

kann gesteuer werden, ob das Konto-Array konsolidiert wird. Außerdem kann

mit der Eigenschaft CbFinancialAccountingTO.CbIndividualBookingInformation

eine beliebige Information verwahrt werden, die vor dem Speichern zur

Verfügung steht.

vor dem Speichern

Aufruf erfolgt vor dem Speichern durch den Fibu-Übergabe-Business-Controller.

Über das Info-Objekt kann lesend auf ein Fibu-Transfer-Objekt

(oInfo.CbFinancialAccountingTO) zugegriffen werden. In diesem Event dürfen

keine Eigenschaften des CbFinancialAccountingTO gesetzt werden.

Über die Eigenschaft CbFinancialAccoutingTO.CbIndividualBookingInformation

kann auf die zusätzlichen Informationen die in dem Event

"bei Aufbereitung der FiBu-Übergabe-Information" festgelegt wurden,

zugegriffen werden.

Beispiel

| oDataModule, oBeFinancialAccountingBC, oBeFinancialAccountingBO, oBeFinancialAccountingTO |

oDataModule := CreateObject('TBeDBGet', 'FIBU_DM'),

startseq

   oBeFinancialAccountingBC := CreateObject('TBeFinancialAccountingTransferBC', 'FIBU_BC'),

   startseq

      oBeFinancialAccountingBO := CreateObject('TBeFinancialAccountingTransferBO', 'FIBU_BO'),

      startseq

         // Der BusinessController und das BusinessObject müssen das gleichen

         // Datenmodul haben

         oBeFinancialAccountingBC.CbDataModule := oDataModule,

         oBeFinancialAccountingBO.CbDataModule := oDataModule,

         // Das TransferObjekt initialsieren und zuweisen

         oBeFinancialAccountingBC.CbInitializeFinancialAccountingTO(),

         oBeFinancialAccountingTO := oBeFinancialAccountingBC.CbBeFinancialAccountingTO,

         // Buchungsdaten zuweisen

         oBeFinancialAccountingTO.CbDate              := Date(),

         oBeFinancialAccountingTO.CbVoucherNo         := 123456,

         oBeFinancialAccountingTO.CbInternalVoucherNo := 999999,

         oBeFinancialAccountingTO.CbAccountingText    := 'INDIVIDUELLE CB-BUCHUNG',

         oBeFinancialAccountingTO.CbAccountArray      := ArrToStr({{'E', 4711, 2, 0, 35,   {364}, 2, 'Verkauf Halteträger'},

                                                                   {'W', 4711, 1, 0, 0.99, {364}, 2, ''}}),

         // keine Konsoldierung notwendig, da nur ein Eintrag in dem Array vorhanden ist

         oBeFinancialAccountingTO.CbAccountingArrayConsolidationNeeded := False,

         // Fibu-Buchung durchführen

         oBeFinancialAccountingBC.CbNew(oBeFinancialAccountingBO),  // Event "bei Aufbereitung der FiBu-Übergabe-Information" wird ausgelöst

         oBeFinancialAccountingBC.CbPost(oBeFinancialAccountingBO), // Event "vor dem Speichern" wird ausgelöst

      always

         DestroyObject(oBeFinancialAccountingBO),

      stopseq,

   always

      DestroyObject(oBeFinancialAccountingBC),

   stopseq,

always

   DestroyObject(oDataModule),

stopseq,


TBeFinancialAccountingTransferBO

TBeFinancialAccountingTransferBO

Das Klasse TBeFinancialAccountingTransferBO kapselt den Zugriff auf die Tabelle DabDF - FiBu/Übergabedatei.

Eigenschaften:

Eigenschaften
CbCustomerNo:N | Kundennummer (DabDF:KDNR)
CbCbSupplierNo:N | Lieferantennummer (DabDF:LINR)
CbName1:C | Name1 (DabDF:NAME1)
CbName2:C | Name2 (DabDF:NAME2)
CbName3:C | Name3 (DabDF:NAME3)
CbStreet:C | Straße (DabDF:STRASSE)
CbZipCodeAndCity:C | PLZ/Ort (DabDF:PLZORT)
CbMatchcode:C | Matchcode (DabDF:MATCHCODE)
CbPhoneNo:C | Telefon (DabDF:TELEFON)
CbFaxNo:C | Telefax (DabDF:TELEX)
CbContact:C | Ansprechperson (DabDF:ANSPRECH)
CbAddressCode:N | Anredeschlüssel (DabDF:ANREDESCHL)
CbDate:D | Datum (DabDF:DATUM)
CbVoucherNo:C | Belegnummer (DabDF:NUMMER)
CbInternalVoucherNo:C | Belegnummer intern (DabDF:BELEGNRINT)
CbDiscountDays1:N | Skontotage (DabDF:SKONTOTAGE)
CbDiscountPercentage1:N | % Skonto (DabDF:SKONTOPROZ)
CbDiscountDays2:N | Skontotage 2 (DabDF:SKONTOTAG2)
CbDiscountPercentage:N | % Skonto 2 (DabDF:SKONTOPRO2)
CbNetDays:N | Nettotage (DabDF:NETTOTAGE)
CbExport:L | Ausland? (DabDF:EXPORT)
CbVatIdNo:C | USt.-Id. (DabDF:UST_IDNR)
CbNetValue1:N | Netto-Betrag 1 (DabDF:NETTO1)
CbNetValue2:N | Netto-Betrag 2 (DabDF:NETTO2)
CbNetValue3:N | Netto-Betrag 3 (DabDF:NETTO3)
CbNetValue4:N | Netto-Betrag 4 (DabDF:NETTO4)
CbNetValue5:N | Netto-Betrag 5 (DabDF:NETTO5)
CbNetValue6:N | Netto-Betrag 6 (DabDF:NETTO6)
CbNetValue7:N | Netto-Betrag 7 (DabDF:NETTO7)
CbNetValue8:N | Netto-Betrag 8 (DabDF:NETTO8)
CbNetValue9:N | Netto-Betrag 9 (DabDF:NETTO9)
CbTaxValue1:N | Steuer-Betrag 1 (DabDF:STEUER1)
CbTaxValue2:N | Steuer-Betrag 2 (DabDF:STEUER2)
CbTaxValue3:N | Steuer-Betrag 3 (DabDF:STEUER3)
CbTaxValue4:N | Steuer-Betrag 4 (DabDF:STEUER4)
CbTaxValue5:N | Steuer-Betrag 5 (DabDF:STEUER5)
CbTaxValue6:N | Steuer-Betrag 6 (DabDF:STEUER6)
CbTaxValue7:N | Steuer-Betrag 7 (DabDF:STEUER7)
CbTaxValue8:N | Steuer-Betrag 8 (DabDF:STEUER8)
CbTaxValue9:N | Steuer-Betrag 9 (DabDF:STEUER9)
CbInitialValue:N | Einstandswert (DabDF:EINSTWERT)
CbCostCenter:N | Kostenstelle (DabDF:KOSTENST)
CbAccountingText:C | Buchungstext (DabDF:BUCHTEXT)
CbCurrencyID:N | Währungs-Kennzeichen (DabDF:WAEKZ)
CbForeignCurrencyValue:N | Fremdwährungs-Betrag (DabDF:FW_BETRAG)
CbLanguageId:N | Sprach-Kennzeichen (DabDF:SPRACHE)
CbAccountString:C | (veraltet) Konten-String (DabDF:MEMO)
CbAccountArray:C | Konten-Array (DabDF:KTO_ARR)
CbVatISOCode:C | USt.-Kz. von Land (ISO-Code) (DabDF:)UST_LANDCD
CbVatContext:N | eigener USt.-Kontext (DabDF:UST_CONTXT)
CbProcessType:N | Prozesstyp (DabDF:PROZESSTYP); - 10: Erstellung einer Kunden-Ausgangsrechnung; - 20: Erstellung einer Lieferanten-Ausgangsrechnung; - 30: Stornierung einer Kunden-Ausgangsrechnung; - 40: Stornierung einer Lieferanten-Ausgangsrechnung; - 50: Freigabe einer Rechnungskontrolle im Einkauf; - 900: Individueller Prozess
CbVoucherType:N | Belegtyp (DabDF:BELEGTYP)
CbCanceledId:N | (Nur lesen) Storno-Id (DabDF:STORNO_ID)

Funktionen und Methoden
CbEdit() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbInsert() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbDelete() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbCancel() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbPost() | Diese Methode ist für diese Business Objekt nicht verfügbar.

Beispiel

siehe TBeFinancialAccountingTransferBC


TBeFinancialAccountingTO

TBeFinancialAccountingTO

Die Klasse TBeFinancialAccountingTO dient als Schnittstelle zu jeder beliebigen Finanzubuchhaltung. Sie enthält alle relevanten Buchungsinformationen.

Eigenschaften:

Eigenschaften
CbCustomerNo:N | (nur lesen) Kundennummer
CbCbSupplierNo:N | (nur lesen) Lieferantennummer
CbName1:C | (nur lesen) Name1
CbName2:C | (nur lesen) Name2
CbName3:C | (nur lesen) Name3
CbStreet:C | (nur lesen) Straße
CbZipCodeAndCity:C | (nur lesen) PLZ/Ort
CbMatchcode:C | (nur lesen) Matchcode
CbPhoneNo:C | (nur lesen) Telefon
CbFaxNo:C | (nur lesen) Telefax
CbContact:C | (nur lesen) Ansprechperson
CbAddressCode:N | (nur lesen) Anredeschlüssel
CbDate:D | Datum
CbVoucherNo:C | Belegnummer
CbInternalVoucherNo:C | interne Belegnummer
CbDiscountDays1:N | (nur lesen) Anzahl der Tage für Skonto 1
CbDiscountPercentage1:N | (nur lesen) Skonto 1 in Prozent
CbDiscountDays2:N | (nur lesen) Anzahl der Tage für Skonto 2
CbDiscountPercentage:N | (nur lesen) Skonto 2 in Prozent
CbNetDays:N | (nur lesen) Nettotage
CbExport:L | (nur lesen) Gibt an ob der Kunde/Lieferant ein Auslandskunde/-lieferant ist; - True: Kunde/Lieferant ist im Ausland; - False: Kunde/Lieferant ist nicht im Ausland
CbVatIdNo:C | (nur lesen) Umsatzsteueridentifikationsnummer
CbNetValue1:N | (nur lesen) Kumulierter Nettobetrag für Umsatzsteuerkennzeichen 1
CbNetValue2:N | (nur lesen) Kumulierter Nettobetrag für Umsatzsteuerkennzeichen 2
CbNetValue3:N | (nur lesen) Kumulierter Nettobetrag für Umsatzsteuerkennzeichen 3
CbNetValue4:N | (nur lesen) Kumulierter Nettobetrag für Umsatzsteuerkennzeichen 4
CbNetValue5:N | (nur lesen) Kumulierter Nettobetrag für Umsatzsteuerkennzeichen 5
CbNetValue6:N | (nur lesen) Kumulierter Nettobetrag für Umsatzsteuerkennzeichen 6
CbNetValue7:N | (nur lesen) Kumulierter Nettobetrag für Umsatzsteuerkennzeichen 7
CbNetValue8:N | (nur lesen) Kumulierter Nettobetrag für Umsatzsteuerkennzeichen 8
CbNetValue9:N | (nur lesen) Kumulierter Nettobetrag für Umsatzsteuerkennzeichen 9
CbTaxValue1:N | (nur lesen) Kumulierter Steuerbetrag für Umsatzsteuerkennzeichen 1
CbTaxValue2:N | (nur lesen) Kumulierter Steuerbetrag für Umsatzsteuerkennzeichen 2
CbTaxValue3:N | (nur lesen) Kumulierter Steuerbetrag für Umsatzsteuerkennzeichen 3
CbTaxValue4:N | (nur lesen) Kumulierter Steuerbetrag für Umsatzsteuerkennzeichen 4
CbTaxValue5:N | (nur lesen) Kumulierter Steuerbetrag für Umsatzsteuerkennzeichen 5
CbTaxValue6:N | (nur lesen) Kumulierter Steuerbetrag für Umsatzsteuerkennzeichen 6
CbTaxValue7:N | (nur lesen) Kumulierter Steuerbetrag für Umsatzsteuerkennzeichen 7
CbTaxValue8:N | (nur lesen) Kumulierter Steuerbetrag für Umsatzsteuerkennzeichen 8
CbTaxValue9:N | (nur lesen) Kumulierter Steuerbetrag für Umsatzsteuerkennzeichen 9
CbInitialValue:N | (nur lesen) Einstandswert
CbCostCenter:N | (nur lesen) Kostenstelle
CbAccountingText:C | Buchungstext
CbCurrencyID:N | (nur lesen) Währungskennzeichen
CbForeignCurrencyValue:N | (nur lesen) Fremdwährungsbetrag
CbLanguageId:N | (nur lesen) Sprachkennzeichen
CbAccountString:C | (nur lesen) Konto-String (veraltet. Nur noch aus Kompatibilitätsgründen vorhanden. Nicht mehr verwenden)
CbAccountArray:C | Konto-Array. Enthält genau Informationen zu den einzelnen Konten
CbVatISOCode:C | (nur lesen) Umsatzsteuerkennzeichen des Landes (ISO-Code)
CbVatContext:N | (nur lesen) eigener Umsatzsteuerkontext
CbProcessType:N | (nur lesen) Prozesstyp. Gibt an in welchem Prozess der Fibuübergabe-Datensatz entstanden ist; - 10: Erstellung einer Kunden-Ausgangsrechnung; - 20: Erstellung einer Lieferanten-Ausgangsrechnung; - 30: Stornierung einer Kunden-Ausgangsrechnung; - 40: Stornierung einer Lieferanten-Ausgangsrechnung; - 50: Freigabe einer Rechnungskontrolle im Einkauf; - 900: Individueller Prozess
CbVoucherType:N | (nur lesen) Belegtyp. Typ des Beleges der bei einem bestimmten Prozess entstanden ist.
CbCanceledId:N | (Nur lesen) Datensatz-Id des Datensatzes der storniert wurde
CbDebitorVoucherBookedLikeCreditorVoucher:L | (nur lesen) Die Eigenschaft gibt an ob eine Kundenrechnung kreditorisch gebucht wird
CbAccountingArrayConsolidationNeeded:L | Die Eigenschaft gibt an, ob die das Konto-Array konsolidiert werden soll oder nicht.
CbIndividualBookingInformation:U | Beliebige Zusatzinformation die selbst vergeben werden kann.
CbReadOnly:L | (nur lesen) Gibt an ob sich das Objekt im ReadOnly-Modus befindet. Im ReadOnly-Modus könne die Eigenschaften des Objekts nicht verändert werden.
Methoden
CbConsolidateAccountingArray | Methode mit der das Konto-Array konsolidiert werden kann.

Beispiel

siehe TBeFinancialAccountingTransferBC


TBeIndiPrintData

TBeIndiPrintData - Individual-Belegdruck

Dient zum Druck eines Individual-Belegs, welcher dann im Belegarchiv abgelegt werden kann

HINWEIS: Es handelt sich hier um die "erweiterte" Umsetzung des Belegdruckes, eine "einfache" Möglichkeiten zum Belegdruck (z.B. Einzelbelegdruck) bietet die neu im Codeblock verfügbare Funktion "DocumentPrint()" (siehe entsprechendes Memo)

Eigenschaften:

Allgemein

DocType Archiv-Beleg-ID, 900-999, muss als Druckeinstellung definiert sein !

Tables Array mit Tabellen, welche im Belegdruck bzw. -Layout zur Verfügung stehen

DocNo Beleg-Nr, frei zu vergeben

PersNo Pers.Nr, frei zu vergeben

PrintDate Druck-Datum (default = Buchungsdatum)

PrintDepart Drucklayout für Abteilung n verwenden (default = aktuelle Abteilung)

PrintLang Drucklayout für Sprache n verwenden (default = 0)

PrintReportNo Ab 7.1

Drucklayout von Report Nummer verwenden (default = 0 bzw. Standard Layout) (DabR010:REPORT_NR)

PrintConnect ADS-Connection auf der die Druckendatenverarbeitung läuft

TestPrint Test-Druck (Readonly)

ProcessDataOnly Verarbeitung ohne Druck (default = False)

LayoutAction Ab 7.1

Welche Layout Aktion bei ExecLayout ausgeführt wird (default = traNone = Dialog anzeigen)

traNew = Neues Layout

traCopy = Kopie von Layout PrintReportNo anlegen

traEdit = Layout PrintReportNo bearbeiten

traDelete = Layout PrintReportNo löschen

Events

OnInitFirstPrint Initialisierung erster Beleg im Stapeldruck-Modus

OnInitNextPrint Initialisierung nächster Beleg im Stapeldruck-Modus

OnSetLocks Record-Locks für die Verarbeitung setzen

OnReSetLocks Record-Locks der Verarbeitung aufheben (Gegenstück zu SetLocks)

OnProcDataBefore Belegdruck-Datenverarbeitung VOR der Druckausgabe

OnProcDataAfter Belegdruck-Datenverarbeitung NACH der Druckausgabe

Aktive Eigenschaften

ExecLayout Layout-Designer aufrufen

ExecPrint Einzeldruck starten

ExecPrintAll Stapeldruck startem

Hinweise:

Die Verwendung der Klasse an Stelle der Funktion DocumentPrint() bietet erweiterte Steuerungsmöglichkeit des Belegdruck, hierzu zählen insbesondere

- Stapeldruckfunktion

- Setzen/Prüfen von Satzsperren unmittelbar vor der Verarbeitung (wichtig im Stapeldruck)

- Festlegen von Druck-Abteiltung und -Sprache

- Verarbeitung eines Beleges ohne Druck

Siehe dazu auch

"Individual-Belege mit Archivierung"

"DocumentPrint()"

"DocumentDelete()"

"Event vor Eintrag Beleghistorie"

"DBGetTable(), DBGetLookup(), DBGetMemTable()"

Beispiel

| oDab010, oConnect, oDM, arrArt, nDocNo |

// In diesem Beispiel wird ein *Stapel*Druck ausgeführt, der für jedes Element

// in arrArt ein Scope auf die DAB010 setzt und daraufhin einen entsprechenden

// Beleg druckt

// Events ----------------------------------------------------------------------

// Events zur Initialisierung des (nächsten) Belegdruckes ######################

function InitNextPrint( aSender, aContinue:R )

   // (nur im Stapeldruck!)

   // Für jedes Element in arrArt einen eigenen Beleg drucken,

   // bis alle Belege gedruckt...

   // Wird aContinue auf FALSE gesetzt, wird der Stapeldruck beendet

   Meld('InitNextPrint'),

   nDocNo++,

   oDM.DocNo := 5000 + nDocNo, // Nr. des Beleges setzen (5001, 5002, ...)

   aContinue := nDocNo <= Len(arrArt), // True = weiteren Beleg drucken

   if aContinue then

      DbScope( arrArt[nDocNo], arrArt[nDocNo], oDab010 ),

   endif,

end,

function InitFirstPrint( aSender, aContinue:R )

   // (nur im Stapeldruck!, beim Druck des ersten Beleges)

   Meld('InitFirstPrint'),

   aContinue := True, // True = es gibt einen Beleg zu drucken

   // In diesem Fall ist die Initialisierung für alle Belege gleich ...

   InitNextPrint( aSender, aContinue ),

end,

// Events zum Setzen/Prüfen bzw. Aufheben von Datzsperren ######################

function SetLocks( aSender, aContinue:R )

   // Alle für die Verarbeitung des Beleges benötigten Satzsperren setzen

   // aContinue = FALSE, Sperren konnten nicht (vollständig) gesetzt werden,

   // Es wird in diesem Fall mit dem Druck des nächsten Beleges fortgefahren !!

   Meld('SetLocks'),

end,

function ResetLocks( aSender )

   // Alle für die Verarbeitung des Beleges gesetzten Satzsperren (in SetLocks)

   // wieder aufheben

   Meld('ResetLocks'),

end,

// Events zur Datenverarbeitung des Beleges ####################################

function ProcessDataBefore( aSender )

   // Verarbeitung der Belegdaten (VOR dem Druck)

   // Achtung ! Transaktion auf oConnect und somit oDab010 ist aktiv !

   Meld('ProcessDataBefore'),

end,

function ProcessDataAfter( aSender )

   // Verarbeitung der Belegdaten (NACH dem Druck)

   // Achtung ! Transaktion auf oConnect und somit oDab010 ist aktiv !

   Meld('ProcessDataAfter'),

end,

// Hauptprogramm ---------------------------------------------------------------

arrArt   := {"A","B","C"},

nDocNo   := 0,

oDM      := CreateObject("TBeIndiPrintData", "BeIndiPrintData" ),

// WICHTIG: Folgende Zeile erstellt eine Tabelle welche auf der Connection des Druckmoduls läuft

// und somit in den ProcessData-Events transaktionsgestützt eingesetzt werden kann !!

oDab010  := DbGetTable( oDM, waDAB010 ),

startseq

   // Beleg initialisieren

   oDM.DocType         := 901,

   oDM.DocNo           := 5000, // ist hier eigentlich überflüssig, weil das Setzen in InitNextPrint() erfolgt

   oDM.PersNo          := 4711,

   oDM.PrintDate       := Date(), // wäre hier das Druckdatum für ALLE Belege im Stapel

   oDM.PrintDepart     := 1,

   oDM.PrintLang       := 2,

   oDM.Tables          := {oDab010},

   // Recordlock-Routinen (Events) setzen

   AssignEvent( oDM, "OnSetLocks",   "SetLocks" ),

   AssignEvent( oDM, "OnResetLocks", "ResetLocks" ),

   // Stapel-Druck-Routinen (Events) setzen

   AssignEvent( oDM, "OnInitFirstPrint", "InitFirstPrint" ),

   AssignEvent( oDM, "OnInitNextPrint",  "InitNextPrint" ),

   // Verarbeitungs-Routinen (Events) setzen

   AssignEvent( oDM, "OnProcDataBefore", "ProcessDataBefore" ),

   AssignEvent( oDM, "OnProcDataAfter",  "ProcessDataAfter" ),

   // Layout designen oder Beleg drucken

   //oDM.ExecLayout,   // Layout

   oDM.ExecPrintAll, // Stapel-Druck !

always

   DestroyObject(oDab010),

   DestroyObject(oConnect),

   DestroyObject(oDM),

stopseq,

Siehe auch:

TBeIndiPrintData

TBeRemovalData, TBeCumRemovalData

TBePrintData

TBeCumBillData

TBeConfData


TBeInfoPanel

TBeInfoPanel

Panel Klasse zum Anzeigen von Informationen, Warnungen und Fehlern.

Die Textfarbe wird immer der Hintergrundfarbe entsprechend berechnet.

Eigenschaften:

Alignment:N | Ausrichtung des Infotextes
Anchors:N | Gibt an, woran sich der Seitenabstand des Controls nicht verändert wenn sich z.B. die Größe des Parents verändert
AutoSize:L | (default) true = Größe wird automatisch bestimmt. Selbst wählen der Größe nur möglich, wenn `AutoSize' auf false gesetzt ist.
BorderColor:N | Farbe der Umrandung; Wird automatisch gesetzt.
BorderWidth:N | Breite der Umrandung
Caption:C | Der angezeigte Text.
Color:N | Hintergrundfarbe des Panels; Wird automatisch gesetzt.
ColorMode:N | Auswahlmöglichkeit zwischen Vordefinierten Farbschemata: ipcmWarning = Panel erscheint in einem hellen Orange ipcmError = helles Rot ipcmOk = helles Grün; (default) ipcmInfo = helles Beige
Font:C | Der Schriftgrad / -stil etc. Wird automatisch der Hintergrundfarbe entsprechend gesetzt.
Padding:N | Innenabstand mit folgenden Submembern: left, right, top, bottom;
PanelHover:L | Wenn die Eigenschaft auf `true' gesetzt wurde, ist der Hover-Effekt auch bei nicht zugewiesenem OnClick-Event aktiv. (default) false
ShowHint:L | (default) false = Tooltip wird nicht angezeigt. Zeigt bei true einen durch `Hint' gesetzten Tooltip an, wenn man den Cursor über das Control hält.
Visible:L | (default) true = Panel ist sichtbar. false = Panel ist nicht sichtbar.
WordWrap:L | (default) true = Der Text wird bei Überlänge umgebrochen und in die nächste Zeile geschrieben.

Aktive Eigenschaften (Methoden):

OnClick

Führt das zugewiesene Event bei Mauklick aus.

OnMouseEnter

OnMouseLeave

OnMouseMove

Führt das zugewiesene Event beim Betreten / Verlassen bzw. Bewegen der Maus aus.

Außerdem ändert sich die Farbe des Panels bei Betreten des Panels mit dem Cursor.

OnMouseDown

OnMouseUp

Führt das zugewiesene Event beim Drücken (gedrückt lassen) bzw. Loslassen einer Maustaste aus.

Bei einem Klick ändert sich ebenfalls die Farbe des Panels.

Dieser Effekt tritt nur bei zugewiesenem OnClick-Event auf.

Beispiel

//******************************************************************************

// Beschreibung: Dieses CodeBlock-Programm dient zur

//               Demonstration der Klasse TBeInfoPanel

//******************************************************************************

| oForm, oInfoPanel, oLabel |

//##############################################################################

//##############################################################################

// Events

//##############################################################################

//##############################################################################

//******************************************************************************

// Wenn auf das Panel geklickt wird

//******************************************************************************

function InfoPanelClick(sender)

   oLabel.Caption := 'Das TBeInfoPanel <' + Sender.Caption + '> wurde angeklickt!',

end,

//##############################################################################

//##############################################################################

// Initialisierung

//##############################################################################

//##############################################################################

oForm           := CreateObject('TFormEx'),

oForm.Font.Name := 'Segoe UI',

oLabel          := CreateObject('TLabel',, oForm, oForm),

oForm.OrigCapt               := 'TBeInfoPanel-Demo',

oForm.Height                 := 250,

oForm.Width                  := 450,

oInfoPanel                   := CreateObject('TBeInfoPanel',, oForm, oForm),

oInfoPanel.Caption           := 'ColorMode = ipcmOK',

oInfoPanel.Align             := alTop,

oInfoPanel.Hint              := 'Dies ist ein TBeInfoPanel',

oInfoPanel.ShowHint          := true,

oInfoPanel.VerticalAlignment := true,

oInfoPanel.ColorMode         := ipcmOK,

AssignEvent(oInfoPanel, 'OnClick', 'InfoPanelClick'),

oInfoPanel                   := CreateObject('TBeInfoPanel',, oForm, oForm),

oInfoPanel.Caption           := 'ColorMode = ipcmWarning',

oInfoPanel.Align             := alTop,

oInfoPanel.Hint              := 'Dies ist ein TBeInfoPanel',

oInfoPanel.ShowHint          := true,

oInfoPanel.VerticalAlignment := true,

oInfoPanel.ColorMode         := ipcmWarning,

AssignEvent(oInfoPanel, 'OnClick', 'InfoPanelClick'),

oInfoPanel                   := CreateObject('TBeInfoPanel',, oForm, oForm),

oInfoPanel.Caption           := 'ColorMode = ipcmError. [kein OnClick-Event zugewiesen]',

oInfoPanel.Align             := alTop,

oInfoPanel.Hint              := 'Dies ist ein TBeInfoPanel',

oInfoPanel.ShowHint          := true,

oInfoPanel.VerticalAlignment := true,

oInfoPanel.ColorMode         := ipcmError,

oInfoPanel                   := CreateObject('TBeInfoPanel',, oForm, oForm),

oInfoPanel.Caption           := 'ColorMode = ipcmInfo' + crlf

                                + '[Info-Panels unterstützen AutoSize und WordWrap-Funktionalität]',

oInfoPanel.Align             := alTop,

oInfoPanel.Hint              := 'Dies ist ein TBeInfoPanel.',

oInfoPanel.ShowHint          := true,

oInfoPanel.VerticalAlignment := true,

oInfoPanel.ColorMode         := ipcmInfo,

AssignEvent(oInfoPanel, 'OnClick', 'InfoPanelClick'),

oLabel.Caption         := '',

oLabel.Align           := alBottom,

oLabel.Alignment       := taCenter,

oLabel.AutoSize        := false,

oLabel.Height          := 50,

oLabel.WordWrap        := true,

oLabel.Font.Color      := GetBeDesignColor(dcbOrange, dcgLevel4),

oLabel.Font.Style      := fsBold,

ShowModal(oForm),


TBeInventoryBusinessController

TBeInventoryBusinessController

Die Klasse TBeInventoryBusinessController stellt Funktionen und Methoden für die Inventur in der Lagerverwaltung bereit.

Eigenschaften:

Eigenschaften

CbDataModule:O

Daten-Modul, für alle Funktionen und Methoden die Daten verändern / erzeugen muss auf diesem Daten-Modul eine Transaktion gestartet werden

Funktionen und Methoden

CbTakeOverInventory()

Aktuelle Inventur-Datei verarbeiten und in Bestandsdaten übernehmen

aInventoryDate:D | Buchungs-Datum der Inventur
aShowMessages:L | Fehler als Meldungen anzeigen, ansonsten werden die Fehler als Exception ausgelöst
aShowProgressBar:L | Fortschrittsanzeige während der Verarbeitung anzeigen

Beispiel

| m_oInvBC, m_oDM |

//******************************************************************************

// Aktuelle Inventur-Datei mit Datum "heute" verarbeiten

//******************************************************************************

m_oDM := CreateObject('TBeDbGet'),

startseq

   m_oInvBC := CreateObject('TBeInventoryBusinessController'),  // Kontroller

   startseq

      m_oInvBC.CbDataModule := m_oDM, // Gleiches Datenmodul für alle Objekte

      m_oInvBC.CbTakeOverInventory(today(),

                                   jn("Fehler als Meldungen anzeigen?"),

                                   jn("Fortschrittsanzeige während der Verarbeitung anzeigen?"))

   always,

      DestroyObject(m_oInvBC),

   stopseq,

always

   DestroyObject(m_oDM),

stopseq,


TBeMemoBO

TBeMemoBO

Die Klasse TBeMemoBo kapselt Eigenschaften und Funktionen eines Memos.
Zusätzliche Funktionalitäten sind über die Unterobjekte des TBeMemoBo zugänglich.

Eigenschaften:

Eigenschaften
WriteLastUsed:L | (default) True=Nach Änderung Memo in "Zuletzt bearbeitet" Liste aufnehmen
WriteLastUsedUserID:C | Be-UserNo, muss gesetzt werden wenn WriteLastUsed aktiv ist
MemoID:N | ID des Memos (entspricht DAB065:MEMO_ID) veraltet: Zum positionieren des TBeMemoBo bitte Methode CbGoToID() verwenden
RefreshConversationSort:L | (default) True=Nach Änderung DAB065:BETRF_SORT aktualisieren
RefreshAttachments:L | (default) True=Nach Änderung DAB065:ANHANG aktualisieren
RefreshSearchMarkByHistoryChange:L | (default) True=Nach Änderung and History DAB065:SUCH_KZ aktualisieren

Tabellen und Felder
Dab065:O | Dab065 Tabellenobjekt (nur für Zugriffe auf Individual-Felder)
CRMActionIDValue:N | CRM-Aktions ID (entspricht DAB065:REF_ID)
CRMActionSortValue:C | CRM-Actions Verarbeitungs-Reihenfolge (entspricht DAB065:CRM_SORT)
MailRefIDValue:N | ID des Vorgänger-Memos bei Folge-Memos (entspricht DAB065:REF_ID)
ActivityValue:N | Memo Aktivität (entspricht DAB065:AKTIVITAET)
BringFwdDateValue:D | Memo Wiedervorlage Datum (entspricht DAB065:WVDATUM)
ContactIDValue:N | Memo Zuordnung Kontaktperson (entspricht DAB065:ID)
DateValue:D | Datum des Memos (entspricht DAB065:DATUM)
EditorValue:C | Bearbeiter (entspricht DAB065:BEARB_INT)
EditStateValue:N | Memo Status (entspricht DAB065:STATUS_BEA)
GroupMarkValue:C | Memo Gruppen-Kennzeichen (entspricht DAB065:BEARBEITER)
FaxRecipientValue:C | Memo Fax Empfänger (entspricht DAB065:FAXAN)
HistoryValue:C | Memo Historie (entspricht DAB065:HISTORY)
MailBodyValue:C | Email-Header (entspricht DAB065:EMAIL)
MailRecipientValue:C | Memo E-Mail Empfänger (entspricht DAB065:AN)
MailSenderValue:C | Memo E-Mail Absender (entspricht DAB065:VON)
MemoValue:C | Memo-Text (entspricht DAB065:MEMO)
MemoTypeValue:N | Memo Typ (entspricht DAB065:TYP)
PersNoValue:N | Memo Hauptzuordnung (entspricht DAB065:PERSNR)
PersNoTypeValue:N | Memo Zuordnungs-Typ (entspricht DAB065:PERSNR_KZ)
PriorityValue:N | Memo Priorität (entspricht DAB065:PRIORITAET)
SubjectValue:C | Memo Betreff (entspricht DAB065:BETREFF)
CbSearchFulltext:C | Volltext-Suche (entspricht DAB065:SUCHE) wird beim Schreibzugriff für FTS-Index optimiert
CbPreviewText:C | Memo Vorschau (default = die ersten 255 Zeichen von MEMO als Plaintext)
CbProjectIDValue:N | Memo Projekt-Zuordnung (entspricht DAB065:PRJ_ID)
CbTaskIDValue:N | Memo Projekt-Vorgangs-Zuordnung (entspricht DAB065:VORG_ID)

Funktionen und Methoden

CBInsertEmptyMemo()

Neues Memo erstellen XXXXXXXX

aMemoType:N | Memo-Typ (entspricht DAB065:TYP)
aPersNoType:N | Zuordnungs-Typ(entspricht DAB065:PERSNR_KZ); 1 = Zuordnung Kunde; 2 = Zuordnung Lieferant; 3 = Zuordnung Vertreter; 4 = Zuordnung Benutzer
aPersNo:N | Memo-Hauptzuordnung (entspricht DAB065:PERSNR)
aContactID:N | Kontakt-Zuordnung (entspricht DAB065:ID)

CBInsert()

Diese Methode ist für dieses Business Objekt nicht verfügbar, bitte CBInsertEmptyMemo() verwenden

Verfügbare Ereignisse

Berechnung Suchtext für Volltextsuche

Berechnung der Info-Caption

nach der Neuanlage

vor dem Speichern

vor dem Löschen

nach dem Duplizieren

nach dem Import einer E-Mail

vor dem Setzen der internen Notiz

Beispiel

//******************************************************************************

//******************************************************************************

// Neues Memo (Notiz) anlegen

//******************************************************************************

//******************************************************************************

|oMemoBo|

// Memo Business-Objekt erzeugen

oMemoBo := CreateObject('TBeMemoBo', 'MemoBo'),

startseq,

  // Memo in die Liste der "Zuletzt bearbeitet" aufnehmen

  oMemoBo.WriteLastUsedUserID := c_usr,

  oMemoBo.WriteLastUsed := True,

  // Neues Memo (Typ 10 = Notiz) beim aktuellen Benutzer anlegen

  oMemoBo.CBInsertEmptyMemo(10, bcMemoLinkIDUser, val(c_usr), 0),

  // Betreff setzen

  oMemoBo.SubjectValue := 'Test',

  // Memo-Inhalt setzen

  oMemoBo.MemoValue := 'Das ist eine Test Notiz mit wenig Text und ' + crlf +

                       '2 Bildern im Anhang',

  // 2 Bilder an das Memo anhängen

  oMemoBo.Attach.CBAttachmentAdd('C:\Temp\Bild_001.png', False, False),

  oMemoBo.Attach.CBAttachmentAdd('C:\Temp\Bild_002.png', False, False),

  // Wiedervorlage Datum auf "Ende des aktuellen Monats" setzen

  oMemoBo.MarkAsDone.CBMarkAsDone(EoM(Now())),

  // aktuellen User in "nächste Aktion" Eintragen

  oMemoBo.MarkAction.UserID := c_usr,

  oMemoBo.MarkAction.CBMarkActionAdd(),

  // Memo speichern

  oMemoBo.CBPost(),

  writeln(oMemoBo.CbID),

always,

  DestroyObject(oMemoBo),

stopseq,

Siehe auch:

Business Object Event "Berechnung Suchtext für Volltextsuche"

Business Object Event "Nach dem Import einer E-Mail"

Business Object Event "Nach der Neuanlage"

Business Object Event "Vor dem Speichern"

Business Object Event "Vor dem Löschen"

Business Object Event "Berechnung der Info-Caption"

Business Objekt Event "nach dem Duplizieren"

Business Object Event "vor dem Setzen der internen Notiz"

TBeMemoBOFax

TBeMemoBOMail

TBeMemoBOEMail

TBeMemoBOCRMAction

TBeMemoBOMarkAsRead

TBeMemoBOMarkAsDone

TBeMemoBOMarkAction

TBeMemoBOMarkAsDeleted

TBeMemoBOAttach

TBeMemoBOLinkTo

TBeCbCustomBusinessObject


TBeMemoBOAttach

TBeMemoBOAttach

Die Klasse TBeMemoBOAttach kapselt Eigenschaften und Funktionen für die Datei-Anhänge eines Memos.

Funktionen / Methoden

Attach.CBAttachmentInfoList():A

Informationen zu den vorhandenen Anhängen; Aufbau des Arrays: {{ Index:N, Offset:N, ZipSize:N, FileSize:N, FileName:C, FileType:N, ContentID:C }, { ... }, ... }
aSkipAttachments:L | "Echte"-Anhänge überspringen
aSkipLinks:L | Verknüpfungen überspringen
aSkipEmbedded:L | "Embedded" überspringen

Attach.CBAttachmentAdd():L

Fügt eine Datei als Anhang hinzu
aFileName:C | Quelldatei (inkl. Pfad)
aSaveAsLink:C | Nur als Verknüpfung anhängen
aSaveAsEmbedded:C | Als "embedded" kennzeichnen (nicht für Verknüpfungen)

Attach.CBAttachmentDelete():L

Löscht eine Datei aus dem Anhang

aFileName:C

Name des Anhangs der gelöscht werden soll

Attach.CBAttachmentSave()

Speichert einen Anhang als Datei
aFileName:C | Anhang der gespeichert werden soll
aDestinationFile:C | Ausgabedatei (inkl. Pfad)
aSaveAsFullHTML:L | "ORIGINAL.HTML" inkl. aller eingebundenen Dateien speichern

Attach.HasRealAttachments():L

Memo hat "echte" (keine embedded) Anhänge (entspricht DAB065:ANHANG)

Attach.HasAttachments():L

Abfrage auf vorhandene Anhänge
aSkipAttachments:L | "Echte"-Anhänge überspringen
aSkipLinks:L | Verknüpfungen überspringen
aSkipEmbedded:L | "Embedded" überspringen

Beispiel

//******************************************************************************

//******************************************************************************

// Anhänge

//******************************************************************************

//******************************************************************************

//------------------------------------------------------------------------------

// Informationen zu den Anhängen eines Memos ermitteln

//------------------------------------------------------------------------------

|oMemoBo, aAttachmentInfos|

oMemoBo := CreateObject('TBeMemoBo', 'MemoBo'),

startseq,

  oMemoBo.MemoID := 1234, // MemoBO positionieren

  // Informationen für alle Attachments holen (Echte, Verknüpfungen, Eingebettete)

  aAttachmentInfos := oMemoBo.Attach.CBAttachmentInfoList(False, False, False),

  // Array Aufbau: Index, Offset, ZipSize, FileSize, FileName, FileType, ContentID

  writeln(ArrToStr(aAttachmentInfos)),

always,

  DestroyObject(oMemoBo),

stopseq,

//------------------------------------------------------------------------------

// Datei an Memo anhängen

//------------------------------------------------------------------------------

|oMemoBo, aFileName, i|

oMemoBo := CreateObject('TBeMemoBo', 'MemoBo'),

startseq,

  oMemoBo.MemoID := 1234, // MemoBO positionieren

  oMemoBo.CBEdit(),       // Edit-Modus

  // (gesammte) Datei als normalen Anhang anfügen

  oMemoBo.Attach.CBAttachmentAdd('C:\Temp\Info.txt', False, False),

  oMemoBo.CBPost(),

always,

  DestroyObject(oMemoBo),

stopseq,

//------------------------------------------------------------------------------

// Anhang von Memo löschen

//------------------------------------------------------------------------------

|oMemoBo|

oMemoBo := CreateObject('TBeMemoBo', 'MemoBo'),

startseq,

  oMemoBo.MemoID := 1234, // MemoBO positionieren

  oMemoBo.CBEdit(),       // Edit-Modus

  // Datei löschen

  if oMemoBo.Attach.CBAttachmentDelete('Info.txt') then

     oMemoBo.CBPost(),

  else

     oMemoBo.CBCancel(),

  endif,

always,

  DestroyObject(oMemoBo),

stopseq,

//------------------------------------------------------------------------------

// Alle Anhänge eines Memos exportieren

//------------------------------------------------------------------------------

|oMemoBo, aAttachmentInfos, i, aFileName|

oMemoBo := CreateObject('TBeMemoBo', 'MemoBo'),

startseq,

  oMemoBo.MemoID := 1234, // MemoBO positionieren

  startseq,

    // Liste aller Attachments ermitteln

    aAttachmentInfos := oMemoBo.Attach.CBAttachmentInfoList(False, False, False),

    // Jedes Attachment speichern

    for i:=1 to ALen(aAttachmentInfos) do

      aFileName := aAttachmentInfos[i,5], // Dateiname aus Info-Array

      writeln('Datei ' + str(i) + ' von ' + Str(Alen(aAttachmentInfos)) + ', ' + aFileName),

      // Datei speichern, wenn ORIGINAL.HTML vorhanden sind dann werden diese als volle HTML Dateien

      // gespeichert (inkl. Bilder...)

      oMemoBo.Attach.CBAttachmentSave(aFileName, 'C:\temp\export\'+ExtractFileName(aFileName), True),

    end,

  onerror,

    writeln('Fehler: Datei konnte nicht gespeichert werden' + crlf + GetErrorText()),

  stopseq,

always,

  DestroyObject(oMemoBo),

stopseq,

Siehe auch:

TBeMemoBO


TBeMemoBOCRMAction

TBeMemoBOCRMAction

Die Klasse TBeMemoBOCRMAction kapselt Eigenschaften und Funktionen für die CRM-Aktionen eines Memos.

Eigenschaften

CRMAction.UserID:C

Be-UserNo, muss vor jeder Änderungs-Aktion (CBMarkAs...) gesetzt werden

CRMAction.IsCRMMemo:L

Handelt es sich bei dem Memo um ein CRM-Memo

CRMAction.IsReleased:L

Ist das CRM-Memo als "Verarbeitung Freigabe erteilt" markiert

CRMAction.IsProcessed:L

Ist das CRM-Memo als "verarbeitet" markiert

CRMAction.IsPreviewL

Ist das CRM-Memo eine CRM-Vorschau

CRMAction.IsCreatedFromTemplate:L

Ist das CRM-Memo aus einer Vorlage erstellt worden

Funktionen / Methoden

CRMAction.CanMarkAsReleased:L

Kann das CRM-Memo als "Verarbeitung Freigabe erteilt" markiert werden

CRMAction.CanMarkAsUnreleased:L

Kann das CRM-Memo als "keine Verarbeitung Freigabe erteilt" markiert werden

CRMAction.CanMarkAsManualProcessed:L

Kann das CRM-Memo als "manuell verarbeitet" markiert werden

CRMAction.CBMarkAsReleased()

CRM-Memo als "Verarbeitung Freigabe erteilt" markieren

aAddCRMActionID:L

(default) False = CRM-Aktions ID in History-Eintrag aufnehmen

CRMAction.CBMarkAsUnreleased()

CRM-Memo als "keine Verarbeitung Freigabe erteilt" markieren

aAddCRMActionID:L

(default) False = CRM-Aktions ID in History-Eintrag aufnehmen

CRMAction.CBMarkAsManualProcessed()

CRM-Memo als "manuell verarbeitet" markieren

aAddCRMActionID:L

(default) False = CRM-Aktions ID in History-Eintrag aufnehmen

Beispiel

//******************************************************************************

//******************************************************************************

// CRM-Memo Verarbeitungsstatus setzen

//******************************************************************************

//******************************************************************************

|oMemoBo|

oMemoBo := CreateObject('TBeMemoBo', 'MemoBo'),

startseq,

   oMemoBo.MemoID           := 1234, // MemoBO positionieren

   oMemoBo.WriteLastUsed    := False,

   oMemoBo.CRMAction.UserID := c_usr,

   // Handelt es sich überhaupt um ein CRM-Memo? (aber keine Vorschau)

   // Und es gehört zur CRM-Aktion "987"

   if oMemoBo.CRMAction.IsCRMMemo and

      not oMemoBo.CRMAction.IsPreview and

      (oMemoBo.CRMActionIDValue = 987) then

      // Wenn noch keine "Verarbeitungs-Freigabe" erteilt wurde und

      // es überhaupt als "freigegeben" markiert werden kann

      if not oMemoBo.CRMAction.IsReleased and

         oMemoBo.CRMAction.CanMarkAsReleased() then

         oMemoBo.CBEdit(),

         oMemoBo.CRMAction.CBMarkAsReleased(True), // "Verarbeitungs-Freigabe" erteilen

         oMemoBo.CBPost(),

      endif,

   endif,

always,

   DestroyObject(oMemoBo),

stopseq,

Siehe auch:

TBeMemoBO


TBeMemoBOEMail

TBeMemoBOEMail

Die Klasse TBeMemoBOEMail kapselt Eigenschaften und Funktionen für den E-Mail-Versand eines Memos.

Hinweis:

Die "Interne-Notiz" bei E-Mail Versand kann über den Business-Objekt Event "vor dem Setzen der internen Notiz"
angepasst werden.

Eigenschaften

EMail.LayoutMode:L

(default) False = E-Mail-Layout bearbeiten/einstellen

EMail.IsSent:L

Wurde das Memo bereits als E-Mail verschickt

EMail.IsReceived:L

Ist das Memo eine Empfangene-E-Mail

EMail.ShowProgress:L

Fortschritts-Anzeige bei E-Mail Versand anzeigen

EMail.SendAttachments:L

Memo-Anhänge bei E-Mail Versand mit verschicken

Funktionen / Methoden

EMail.CanEMail:L

Kann das Memo als E-Mail verschickt werden

EMail.CBSendEMail()L:

Memo als Fax versenden

Rückgabe = True bei erfolgreichem E-Mail Versand

aRecipients:C | Liste der E-Mail Empfänger mit ; getrennt. mögliche Empfänger Formate: o to: Name <test@test.de> o to_int: Name <test@test.de> o cc: Name <test@test.de> o cc_int: Name <test@test.de> o bcc: Name <test@test.de> o bcc_int: Name <test@test.de>; &#183 "Name" ist optional; &#183 Wenn dieser Parameter mit leer übergeben wird, dann werden die vorhandenen E-Mail Empfänger aus oMemoBO.MailRecipientValue verwendet
aShowEMailDialog:L | (default) True = Dialog zur Auswahl der E-Mail Empfänger, der Anhänge sowie der Internen-Notiz anzeigen

Beispiel

| oMemoBo, cRecipients |

// Memo E-Mail Versand

oMemoBo := CreateObject('TBeMemoBo'),

startseq,

  oMemoBo.MemoID := 5716,

  oMemoBo.WriteLastUsedUserID := c_usr,

  // Kann das Memo überhaupt per E-Mail verschickt werden

  if oMemoBo.EMail.CanEMail() then

    oMemoBo.EMail.LayoutMode      := False,

    // Memo-Anhänge nicht mitschicken

    oMemoBo.EMail.SendAttachments := False,

    // Keine Progress-Bar beim Verschicken anzeigen

    oMemoBo.EMail.ShowProgress    := False,

    // Zu den Empfängern noch "test@test.de" als Kopie-Empfänger hinzufügen

    cRecipients := oMemoBO.MailRecipientValue + ';cc:Max Muster <test@test.de>',

    // Verarbeitung starten

    oMemoBO.EMail.CBSendEMail(cRecipients, True),

  endif,

always,

  DestroyObject(oMemoBo),

stopseq,

Siehe auch:

TBeMemoBO


TBeMemoBOFax

TBeMemoBOFax

Die Klasse TBeMemoBOFax kapselt Eigenschaften und Funktionen für den Fax-Versand eines Memos.

Eigenschaften

Fax.LayoutMode:L

(default) False = Fax-Layout bearbeiten/einstellen

Fax.DialogValues:O

Vorgabe-Werte für Fax-Versand, siehe TBeMemoBoSendToValues

Fax.IsFaxed:L

Wurde das Memo bereits gefaxt

Funktionen / Methoden

Fax.CanFax:L

Kann das Memo als Fax versandt werden

Fax.CBSendFax()

Memo als Fax versenden

aShowFaxDialog:L | (default) True = Dialog mit Daten für Fax-Empfänger anzeigen
aShowPrintDialog:L | (default) True = Dialog für Layout / Drucker Auswahl anzeigen

Vorgabe-Werte für Fax-Versand (TBeMemoBoSendToValues)

Diese Werte werden auf Basis der Memo-Zuordnung vorbefüllt

Eigenschaften |
Name1Value:C | Name1 des Empfängers
Name2Value:C | Name2 des Empfängers
Name3Value:C | Name3 des Empfängers (für Vertreter immer leer, da nicht verfügbar)
ContactIDValue:N | Kontakt-ID des Empfängers
StreetValue:C | Straße des Empfängers
ZipTownValue:C | PLZ / Ort des Empfängers
FaxNoValue:C | Fax Nummer des Empfängers

Beispiel

|oMemoBo|

// Memo Fax-Versand

oMemoBo := CreateObject('TBeMemoBo'),

startseq,

  oMemoBo.MemoID := 31897,

  oMemoBo.WriteLastUsedUserID := c_usr,

  // Fax-Empfänger Werte vorgeben

  oMemoBO.Fax.DialogValues.Name1Value   := 'Test Name1',

  oMemoBO.Fax.DialogValues.Name2Value   := 'Test Name2',

  oMemoBO.Fax.DialogValues.Name3Value   := 'Test Name3',

  oMemoBO.Fax.DialogValues.StreetValue  := 'Test Straße',

  oMemoBO.Fax.DialogValues.ZipTownValue := 'Test Stadt',

  oMemoBO.Fax.DialogValues.FaxNoValue   := 'Test Empfänger Fax <012345679>',

  // Verarbeitung starten

  // Dialog mit Layout/Drucker Auswahl anzeigen

  // Dialog mit Empfänger Daten anzeigen

  oMemoBO.Fax.CBSendFax(True, True),

always,

  DestroyObject(oMemoBo),

stopseq,

Siehe auch:

TBeMemoBO


TBeMemoBOLinkSuggest

TBeMemoBOLinkSuggest

Die Klasse TBeMemoBOLinkSuggest kapselt Eigenschaften und Funktionen für Verknüpfungs-Vorschläge von

E-Mail Adressen zu Kunden/Lieferanten/Vertreter/Kontaktpersonen.

Eigenschaften |
Source:C | E-Mail Adresse
SourceType:N | <hat noch keine aktive Bedeutung>
LinkTypesOnly:N | Nur gewisse Verknüpfungs-Typen ermitteln; 0 - Alle (Default); 2 - Kunde; 4 - Lieferant; 8 - Vertreter; 16 - Benutzer diese Werte können mit OR kombiniert werden
AddMaster:L | Für gefundene Kontaktpersonen auch den zugehörigen Kunden/Lieferanten/Vertreter hinzufügen; Default = False
OnlyCongruent:L | Nur eindeutige Zuordnungs-Vorschläge ermitteln; Eindeutig heißt, die E-Mail Adresse stimmt direkt überein oder die E-Mail Domain stimmt mit der eines Kunden/Lieferanten/Vertreters überein und diese Domain gibt es nur bei diesem einem Kunden/Lieferanten/Vertreter; Default = False
Funktionen / Methoden |
CBSuggestionList:A | Verknüpfungs-Vorschläge als Array im Format; {{Verknüpfungs-Typ, Verknüpfungs-ID, Kontaktperson-ID, Benutzer-ID, Eindeutig}, {...}}; Verknüpfungs-Typ o 0 - Undefiniert o 1 - Kunde o 2 - Lieferant o 3 - Vertreter o 4 - Benutzer; Verknüpfungs-ID o ID bzw. PERSNR des Verknüpfungs-Typ's; Kontaktperson-ID o ID der Kontaktperson für eine Zuordnung für Typ 2, 3, 4 o 0 falls der Kunde/Lieferant/Vertreter gemeint ist; Benutzer-ID o <hat noch keine aktive Bedeutung>; Eindeutig o Zuordnungs-Vorschlag ist eindeutig

Beispiel

|oSuggest|

oSuggest := CreateObject('TBeMemoBOLinkSuggest'),

startseq

   oSuggest.Source        := 'test@dontenwill.de',

   oSuggest.AddMaster     := False,

   oSuggest.OnlyCongruent := True,  // nur eindeutige Zuordnungen ermitteln d.h. E-Mail Adresse stimmt 100% überein

                                    // oder E-Mail Domain kommt nur bei einem K/L/Z vor (hierbei wird die K/L/Z E-Mail Adresse geprüft)

   writeln(oSuggest.CBSuggestionList()),

always

   DestroyObject(oSuggest),

stopseq,

Siehe auch:

TBeMemoBO


TBeMemoBOLinkTo

TBeMemoBOLinkTo

Die Klasse TBeMemoBOLinkTo kapselt Eigenschaften und Funktionen für die Zuordnung eines Memos.

Eigenschaften

LinkTo.UserID:C

Be-UserNo, muss vor jeder Zuordnung gesetzt werden

LinkTo.WriteMemoHistory:L

(default) True=History-Eintrag bei Änderung schreiben

Funktionen / Methoden

LinkTo.CbInfoCaption():C

Zuordnungs-Beschriftung eines Memos

Anzeige Format: "Präfix: Name (ID)"

aAddTypePrefix:L

Präfix voranstellen (Kunde:; Benutzer: ...)

LinkTo.CbRelink()

Memo Zuordnung ändern
aLinkTo:N | Typ der Zuordnung bcMemoLinkIdCustomer = Zuordnung Kunde bcMemoLinkIdSupplier = Zuordnung Lieferant bcMemoLinkIdAgent = Zuordnung Vertreter bcMemoLinkIdUser = Zuordnung Benutzer
aPersNo:N | ID der Hauptzuordnung
aContactID:N | ID der Kontaktperson

Beispiel

//******************************************************************************

//******************************************************************************

// Memo-Zuordnung ändern

//******************************************************************************

//******************************************************************************

|oMemoBo|

oMemoBo := CreateObject('TBeMemoBo', 'MemoBo'),

startseq,

  oMemoBo.MemoID := 1234, // MemoBO positionieren

  oMemoBo.CbEdit(),       // Edit-Modus

  // Keinen Histroy-Eintrag schreiben

  oMemoBo.LinkTo.WriteMemoHistory := False,

  oMemoBo.LinkTo.UserID           := c_usr,

  // Memo dem Kunden 12345 und dessen Kontaktperson 98765 zuordnen

  oMemoBo.LinkTo.CbRelink(bcMemoLinkIdCustomer, 12345, 98765),

  oMemoBo.CbPost(),

always,

  DestroyObject(oMemoBo),

stopseq,

Siehe auch:

TBeMemoBO


TBeMemoBOMail

TBeMemoBOMail

Die Klasse TBeMemoBOmail kapselt Eigenschaften und Funktionen für den Brief-Druck eines Memos.

Eigenschaften

Mail.LayoutMode:L

(default) False = Fax-Layout bearbeiten/einstellen

Mail.DialogValues:O

Vorgabe-Werte für Fax-Versand, siehe TBeMemoBoSendToValues

Mail.IsPrinted:L

Wurde das Memo bereits gedruckt

Funktionen / Methoden

Mail.CBPrintMail()

Memo als Brief drucken (Memo im Editmodus)

aShowMailDialog:L | (default) True = Dialog mit Daten für Brief-Empfänger anzeigen
aShowPrintDialog:L | (default) True = Dialog für Layout / Drucker Auswahl anzeigen

Vorgabe-Werte für Brief-Druck (TBeMemoBoSendToValues)

Siehe TBeMemoBOFax

Beispiel

siehe TBeMemoBOFax

Siehe auch:

TBeMemoBO


TBeMemoBOMarkAction

TBeMemoBOMarkAction

Die Klasse TBeMemoBOMarkAction kapselt Eigenschaften und Funktionen für "Nächste Aktion" eines Memos.

Eigenschaften

MarkAction.InActionList

Is der eingestellte User in der "nächste Aktion" Liste

MarkAction.UserID

Be-UserNo, muss vor Abfrage / Methodenaufruf eingestellt werden

Funktionen / Methoden

MarkAction.CBMarkActionAdd()

User zu "nächste Aktion" hinzufügen

MarkAction.CBMarkActionRemove()

User aus "nächste Aktion" austragen

Beispiel

siehe TBeMemoBo

Siehe auch:

TBeMemoBO


TBeMemoBOMarkAsDeleted

TBeMemoBOMarkAsDeleted

Die Klasse TBeMemoBOMarkAsDeleted kapselt Eigenschaften und Funktionen um ein Memo als gelöscht zu markieren.

Eigenschaften

MarkAsDeleted.IsDeleted:L

True=Memo ist als gelöscht markiert

MarkAsDeleted.UserID:C

Be-UserNo, muss vor Abfrage / Methodenaufruf eingestellt werden

Funktionen / Methoden

MarkAsDeleted.CbMarkAsDeleted()

Memo als gelöscht markieren bzw. wiederherstellen

(entgültiges Löschen eines Memos über "CBDelete()"

aDelete:L

True = Memo als gelöscht markieren
False = Memo wiederherstellen

Beispiel

//******************************************************************************

//******************************************************************************

// Memo als gelöscht markieren

//******************************************************************************

//******************************************************************************

|oMemoBo|

oMemoBo := CreateObject('TBeMemoBo', 'MemoBo'),

startseq,

   oMemoBo.MemoID               := 1234, // MemoBO positionieren

   oMemoBo.WriteLastUsed        := False,

   oMemoBo.MarkAsDeleted.UserID := c_usr,

   // Nur wenn das Memo noch nicht als gelöscht markiert ist

   if not oMemoBo.MarkAsDeleted.IsDeleted then

      oMemoBo.CbEdit(), // Edit-Modus

      oMemoBo.MarkAsDeleted.CbMarkAsDeleted(True), // Memo gelöscht markieren

      oMemoBo.CbPost(), // Änderung speichern

   endif,

always,

   DestroyObject(oMemoBo),

stopseq,

Siehe auch:

TBeMemoBO


TBeMemoBOMarkAsDone

TBeMemoBOMarkAsDone

Die Klasse TBeMemoBOMarkAsDone kapselt Eigenschaften und Funktionen für Wiedervorlage eines Memos.

Eigenschaften

MarkAsDone:IsDone:L

Memo hat keine Wiedervorlage gesetzt

MarkAsDone:ReminderDate:D

Wiedervorlagedatum des Memos

Funktionen / Methoden

MarkAsDone.CBMarkAsDone()

Wiedervorlage-Datum eines Memos setzen

aDoneDate:D

0 = Wiedervorlage-Datum entfernen

Beispiel

siehe TBeMemoBO

Siehe auch:

TBeMemoBO


TBeMemoBOMarkAsRead

TBeMemoBOMarkAsRead

Die Klasse TBeMemoBOMarkAsRead kapselt Eigenschaften und Funktionen für den Gelesen-Status eines Memos.

Eigenschaften

MarkAsRead.IsRead:L

True=Memo ist für die eingestellte UserID als gelesen markiert

MarkAsRead.UserID:C

Be-UserNo, muss vor Abfrage / Methodenaufruf eingestellt werden

MarkAsRead.WriteMemoHistory:L

(default) True=History-Eintrag bei Änderung schreiben

Funktionen / Methoden

MarkAsRead.CBMarkAsRead()

Memo gelesen markieren

MarkAsRead.CBMarkAsUnread()

Memo ungelesen markieren

Beispiel

//******************************************************************************

//******************************************************************************

// Memo als gelesen markieren

//******************************************************************************

//******************************************************************************

|oMemoBo|

oMemoBo := CreateObject('TBeMemoBo', 'MemoBo'),

startseq,

   oMemoBo.MemoID := 1234, // MemoBO positionieren

   oMemoBo.MarkAsRead.UserID := c_usr,

   oMemoBo.MarkAsRead.WriteMemoHistory := True,

   // Nur wenn das Memo für den User noch nicht als gelesen markiert ist

   if not oMemoBo.MarkAsRead.IsRead then

      oMemoBo.CBEdit(), // Edit-Modus

      oMemoBo.MarkAsRead.CBMarkAsRead(), // Memo gelesen markieren

      oMemoBo.CBPost(), // Änderung speichern

   endif,

always,

   DestroyObject(oMemoBo),

stopseq,

Siehe auch:

TBeMemoBO


TBeMemoBusinessController

TBeMemoBusinessController

Die Klasse TBeMemoBusinessController implementiert Funktionen für die Verwendung des TBeMemoBO.

Eigenschaften:

Funktionen

CbCreatePrepareSQLForMemosParamsObject: TBeCbPrepareSQLForMemosParamsObject

Erzeugt ein TBeCbPrepareSQLForMemosParamsObject für CbPrepareSQLForMemos

Hinweis:

Ggf. muss das SQL-Statement manuell angepasst werden, da unter Umständen in der WHERE-Einschränkung zusätzlich ein Contains() zurückgeliefert werden kann.

Beispiel:

aPreparedSQLParts := oMemoBC.CbPrepareSQLForMemos(oSQLParamsObject),

cSQLStr := aPreparedSQLParts[1] + ' WHERE ' + aPreparedSQLParts[2] + aPreparedSQLParts[4],

CbCalcSQLForMemos(aUserNo:C, aDate:D, aFilter:C, aSearchValue:C, aOrderBy:C, aFields:C, aShowDone:L):C

Erstellt ein SQL-Statement für die Memos anhand der übergebenen Werte

CbPrepareSQLForMemos(aSQLParamsObject:TBeCbPrepareSQLForMemosParamsObject):A;

Erstellt ein SQL-Statement für die MEmos anhand der übergebenen Werte und gibt diese in Form einer Array zurück

CbCalcOptimizedReadRightFilter(aDataSet:TAdsExtendedDataSet):C

Erstellt einen optimierten Lesenecht-Filter

CbCalcGroupText(aMemoBO:TBeMemoBO):C

Erstellt einen Gruppen-Text anhand eines MemoBOs

CbCalcPreviewText(aMemoBO:TBeMemoBO):C

Erstellt einen Preview-Text anhand eines MemoBOs

TBeCbPrepareSQLForMemosParamsObject

Diese Klasse ist für die Verwendung des BeMemoBusinessControllers nötig und besteht ausschließlich aus Eigenschaften.

Eigenschaften:

Eigenschaften
CbUserNo:N | User-Nummer des Memo-Users
CbUserMemo_BossAccess:C | Erlaubt den Zugriff auf Memos anhand der User-Nummer
CbUserMemo_Group:C | Einschränken auf eine bestimmte User-Gruppe
CbDate:D | Memos für das angegebene Datum
CbFilter:C | Selbstdefinierbarer Filterausdruck für die Memos
CbSearchValue:C | Suchausdruck für die Memos
CbFields:C | Anzuzeigende Felder
CbShowDone:L | Erledigte Memos anzeigen
CbOrderBy:C | Sortierung

Beispiel

//##############################################################################

// Programm zum schnellen Test der SQL-Statements

// Bei Rückfragen bitte an LG/HM wenden!

//##############################################################################

| oMemoBC, oMemoBO, oDM, oParams |

//******************************************************************************

// Ausführen des SQL-Statements. Kann Fehler auslösen soweit der Browser

// nicht über alle Felder verfügt.

//******************************************************************************

function Execute(cStatement)

| oQuery |

   oQuery := CreateObject("TBeADSQuery", "DAB065Query"),

   startseq

      oQuery.AliasName := "DAB065Query",

      oQuery.SQL       := cStatement,

      oQuery.Active    := True,

   always

      DestroyObject(oQuery),

   stopseq,

end,

//******************************************************************************

// Test-Statementwird aufbereiten

//******************************************************************************

function ExampleStatement(oParams,

                          nUserNo,

                          cBossAccess,

                          cMemoGroup,

                          dDate,

                          cFilter,

                          cSearchValue,

                          cFields,

                          bShowDone,

                          cOrderBy)

| aPreparedResult, i, cStatement, cWhere |

   oParams.CbUserNo              := nUserNo,

   oParams.CbUserMemo_BossAccess := cBossAccess,

   oParams.CbUserMemo_Group      := cMemoGroup,

   oParams.CbDate                := dDate,

   oParams.CbFilter              := cFilter,

   oParams.CbSearchValue         := cSearchValue,

   oParams.CbFields              := cFields,

   oParams.CbShowDone            := bShowDone,

   oParams.CbOrderBy             := cOrderBy,

   // Statement zusammenbauen und ausführen ************************************

   // Vorbereiten der Statement-Bestandteile

   aPreparedResult := oMemoBC.CbPrepareSQLForMemos(oParams),

   // Zusammenfügen des WHERE-Teils

   cWhere := "",

   for i := 2 to ALen(aPreparedResult) - 1 do

      if not empty(AllTrim(StrTran(aPreparedResult[i], crlf, ""))) then

         cWhere += iif(Empty(cWhere), "", " AND " + crlf),

         cWhere := cWhere + aPreparedResult[i],

      endif,

   next,

   cStatement := aPreparedResult[1] + " WHERE " + cWhere + aPreparedResult[4],

   writeln(cStatement),

   // Ausführen des Statements

   Execute(cStatement),

end,

//##############################################################################

// Hauptprogramm

//##############################################################################

oDM := CreateObject("TBeDBGet"),

startseq

   oMemoBC              := CreateObject("TBeMemoBusinessController", "TEST", oDM, oDM),

   oMemoBC.CbDataModule := oDM,

   oParams := oMemoBC.CbCreatePrepareSQLForMemosParamsObject(),

   //***************************************************************************

   // Beispiel-Statement für die Verwendung von

   // - CreatePrepareSQLForMemosParamsObject

   // - CbPrepareSQLForMemos

   //***************************************************************************

   ExampleStatement(oParams,

                    oParams.CbUserNo,

                    oParams.CbUserMemo_BossAccess,

                    oParams.CbUserMemo_Group,

                    oParams.CbDate,

                    oParams.CbFilter,

                    oParams.CbSearchValue,

                    oParams.CbFields,

                    oParams.CbShowDone,

                    oParams.CbOrderBy),

   oMemoBO := CreateObject("TBeMemoBO"),

   startseq

      writeln('Memo-Gruppen Text: ' + oMemoBC.CbCalcGroupText(oMemoBO)),

      writeln('Memo-Preview Text: ' + oMemoBC.CbCalcPreviewText(oMemoBO)),

   always

      DestroyObject(oMemoBO),

   stopseq

always

   DestroyObject(oDM),

stopseq


TBeMemTable

TBeMemTable

Die Klasse TBeMemTable kapselt Eigenschaften und Funktionen für die Verwenden der BeMemTable.

Die Klasse TBeMemTable steht erst ab Version 6.1 zur Verfügung.

Eigenschaften:

Eigenschaften

Active:L

Aktiviert oder deaktiviert die Tabelle

CbFiltered:L

Aktiviert oder deaktiviert die Filterung der Tabelle

CbFilter:C

Liefert den aktuellen Filter zurück oder setzt ihn

CbFieldCount:N

Liefert die Anzahl der Datenbank-Felder zurück

CbBoF:L

"Begin of File". Gibt an, ob sich die Tabelle auf dem ersten Datensatz befindet

CbEoF:L

"End of File". Gibt an, ob sich die Tabelle auf dem letzten Datensatz befindet

CbBookmark:C

Speichert die Position des aktuellen Datensatzes in einem Bookmark-String und kann die Position wieder auf diesen Datensatz setzen.

CbState:N

Liefert den aktuellen Status der Tabelle zurück. Mögliche Stati sind:

1 = dsBrowse

2 = dsEdit

3 = dsInsert

CbIndexName:C

Liefert den Namen des aktuellen Indexes zurück oder setzt einen neuen Index

CbRecordCount:N

Liefert die Anzahl der aktuell sichtbaren Datensätze zurück

CbRecNo:N

Liefert die Nummer des aktuellen Datensatzes zurück.

CbDataAvailable:L

Die Eigenschaft ist True, wenn Datensätze sichtbar sind

CbNoDataAvailable:L

Die Eigenschaft ist True, wenn keine Datensätze sichtbar sind (z.B. wenn die Tabelle gefiltert ist)

Funktionen

CbField():O

Die Funktion ermittelt ein Datenbank-Feld-Objekt anhand des Feldindexes und liefert es zurück.

Result - Feld-Objekt vom Typ TField

nIndex:N

Index des Feldes

CbFieldByName():O

Die Funktion ermittelt ein Datenbank-Feld-Objekt anhand des Feldnamens und liefert es zurück.

Result - Feld-Objekt vom Type TField

cFieldName:C

Name des Feldes

CbLocate():L

Die Funktion sucht in der Tabelle nach frei definierbaren Werten, über frei definierbare FelderResult - Datensatz gefunden

cKeyFields:C

Feldnamen der Felder die durchsucht werden sollen. Durch Semikolon getrennt:

'Feld1;Feld2'

cKeyValues:C

Suchbegriffe als Array:

{Wert1, Wert2}

nOptions:N

Suchoptionen:

loCaseInsensitive - Schlüsselfelder und Schlüsselwerte werden ohne Berücksichtigung der Groß-/Kleinschreibung verglichen

loPartialKey - Schlüsselwerte müssen nicht vollständig übereinstimmen

CbFindKey():L

Die Funktion sucht einen Datensatz, gemäß dem Suchkriterium aKey.

Result - Datensatz gefunden

aKey:A

Schlüssel / Suchkriterium als Array

{Wert1, Wert2}

CbGetRecAsArray():O

Die Funtkion ermittelt den aktuellen Datensatz als Array. Jedes Feld ist ein Element des Arrays.

Result - Datensatz als Array

CbAddField():O

Die Funktion fügt der Tabelle ein neues Feld an.

Result - Feld vom Typ TField

cFieldName:C | Name des Feldes
nFieldType:N | Datentyp des Feldes; 1 = ftString; 3 = ftInteger; 5 = ftBoolean; 6 = ftFloat; 9 = ftDate; 10 = ftTime; 11 = ftDateTime; 16 = ftMemo
nFieldSize:N | Größe des Feldes. Bei alles Datentypen außer ftString muss die Größe 0 betragen

CbLoadFields():C

Die Funktion initialisiert Felder anhand der übergebenen Workarea. Es können alle Felder in der BeMemTable angelegt werde, oder wahlweise nur die Felder aus cFields oder alle Felder außer den in cIgnoreFields. Die MemTable übernimmt die Felder und die WorkArea der Tabelle mit der übergebenen Workarea. Somit hat man eine genau Kopie der gewünschten Tabelle.

Result - Namen der Felder, die angelegt wurden

nWorkarea:N | Workarea der Tabelle, von der die Felder übernommen werden sollen
cAliasName:C | Alias der Tabelle
cFields:C | Eine durch ',' getrennte Liste mit Feldnamen. Nur die Felder aus der Liste werden in der BeMemTable angelegt. Wenn cFields leer bleibt, dann werden alle Felder übernommen. 'ARTNR,BEZ1,BEZ2'
cIgnoreFields:C | Eine durch ',' getrennte List mit Feldnamen. Nur die Felder die nicht in der Liste enthalten sind, werden in der BeMemTable angelegt. Wenn cIgnoreFields leer bleibt, werden keine Felder ausgeschlossen. 'ERSTELLT,GAENDERT'

CbInsert():L

Die Funktion fügt einen neuen, leeren Datensatz in die BeMemTable ein.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - BeMemTable im InsertMode

CbAppend():L

Die Funktion fügt der BeMemTable einen neuen, leeren Datensatz hinzu.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - BeMemTable im InsertMode

CbEdit():L

Die Funktion versetzt die BeMemTable in den Bearbeitungsmodus.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - BeMemTable im EditMode

CbPost():L

Die Funktion schreibt neu angelegte oder editierte Datensätze in die BeMemTable.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - BeMemTable im BrowseMode

CbCancel():L

Die Funktion bricht den Bearbeitungsmodus der BeMemTable ab und schreibt eventuell neu angelegte Datensätze oder neu zugewiesene Werte nicht in die BeMemTable.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - BeMemTable im BrowseMode

CbDelete():L

Die Funktion löscht den aktuellen Datensatz und setzt den Zeiger auf den nächsten Datensatz.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - BeMemTable im BrowseMode

CbFindNearest():L

Die Funktion sucht in der Datenmenge den Datensatz der die größte Übereinstimmung mit aKey hat und macht diesen zum aktiven Datensatz.

Result - Einen Datensatz gefunden

aKey:A

Schlüssel / Suchkriterium als Array

{Wert1, Wert2}

CbGoTo():L

Die Funktion springt zu dem Datensatz, dessen RecordNumber aRecordNo ist.

Result - Positionierung erfolgreich

nRecordNo:N

RecordNumber des Datensatzes, auf den positioniert werden soll

CbIsNoRecordMove():L

Die Funktion liefert True zurück wenn NoRecordMove für die Tabelle aktiv ist, ansonsten liefert sie False zurück

Result - NoRecordMove aktiv

Methoden

CbFirst()

Die Methode positioniert den Zeiger auf den ersten Datensatz der BeMemTable.

CbLast()

Die Methode positioniert den Zeiger auf den letzten Datensatz der BeMemTable.

CbNext()

Die Methode verschiebt den Zeiger um einen Datensatz nach unten.

CbPrior()

Die Methode verschiebt den Zeiger um einen Datensatz nach oben.

CbMove()

Die Methode verschiebt den Zeiger um die Anzahl der Datensätze aus nRecordCount in die gewünschte Richtung. Wenn nRecordCount negativ ist wird der Zeiger nach oben verschoben, wenn nRecordCount positiv ist, wird der Zeiger nach unten verschoben

nRecordCount:N

Anzahl der Datensätze um die der Zeiger verschoben werden soll.

CbEnableControls()

Die Methode aktiviert die Benachrichtigungen von datensensitiven Steuerelementen, die mit der BeMemTable verbunden sind, falls diese zuvor mit CbDisableControls() deaktiviert wurden.

CbDisableControls()

Die Methode verhindert die Benachrichtigungen von datensensitiven Steuerelementen, die mit der BeMemTable verbunden sind. Es werden beispielsweise die Browser, welche auf die BeMemTable zugreifen nicht mehr automatisch aktualisiert. Dies kann die Geschwindigkeit erheblich erhöhen. Es muss durch ein startseq - always - stopseq sichergestellt werde, das CbEnableControls() ausgeführt wird.

CbSetFilter()

Setzt einen Filter auf die BeMemTable und aktiviert diesen.

cFilter:C

Logischer Filter-Ausdruck.

CbRefresh()

Die Methode aktualisiert die BeMemTable, das heißt, es werden alle Datensätze erneut eingelesen.

CbAddIndex()

Die Methode legt einen neuen Index für die BeMemTable an und aktiviert diesen sofort.

cIndexName:C

Name des Index. Mit dem Indexnamen kann der Index per CbIndexName geändert werden

cFields:C

Ein oder mehrere Felder (durch Semikolon getrennt). Die Felder stellen den Indexausdruck dar.

nIndexOptions:N

Name des Index. Mit dem Indexnamen kann der Index per CbIndexName geändert werden

0 = ixPrimary Der Index ist der Primär-Index der Tabelle

1 = ixUnique Jeder Wert im Index ist eindeutig und es gibt keine Duplikate

2 = ixDescending Der Index sortiert in absteigender Reihenfolge

3 = ixCaseInsensitive Bei der Sortierung der Datensätze wird die Groß-/Kleinschreibung berücksichtigt

4 = ixExpression Der Index basiert auf einem dBASE-Schlüsselausdruck

5 = ixNonMaintained Der Index wird nicht automatisch aktualisiert, wenn Daten geändert werden

CbSetRange()

Die Methode begrenzt den sichtbaren Bereich der BeMemTable auf die Datensätze die zwischen den übergebenen Werten sind. Es muss ein gültiger Index auf der BeMemTable aktiv sein. Die Parameter müssen beide als Array übergeben werde.

aTopValue:U | Werte für die Obere Begrenzung
aEndValue:U | Werte für die Untere Begrenzung

CbSetRangeEx()

Die Methode grenzt den sichtbaren Bereich der BeMemTable auf die Datensätze ein, die dem übergebenem Wert entsprechen. Es muss ein gültiger Index auf der BeMemTable aktiv sein. Der Parameter muss als Array übergeben werden.

aScopeValue:U

Werte für die Begrenzung

CbCanelRange()

Die Methode hebt die Begrenzung des sichtbaren Bereiches der BeMemTable auf.

CbBorrowFromDataset()

Die Funktion initialisiert Felder anhand von oDataset.

oDataset:O

Dataset, von welchem die Felder übernommen werden sollen. Zum Beispiel von einer Tabelle oder einem Query

CbLoadFromDataset()

Die Funktion kopiert alle Datensätze des übergebenen Datasets in die BeMemTable.

oDataset:O | Dataset, von welchem die Datensätze kopiert werden sollen. Zum Beispiel von einer Tabelle oder einem Query
bClear:L | Wenn bClear = True ist, dann werden zuerst alle Datensätze die sich bereits in der BeMemTable befinden gelöscht

CbOrderBy()

Die Methode sortiert die BeMemTable nach den übergebenen Felder.

cSortFields:C

Felder nach denen sortiert wird. Mehrere Felder werden dabei durch ein Semikolon getrennt

CbSetRecAsArray()

Die Methode schreibt die Werte eines Record-Array in die BeMemTable. Die BeMemTable muss sich dabei im Einfüge- oder Editiermodus befinden.

aRecord:U

Record-Array

CbSetRecAsArrayEx()

Die Methode schreibt die Werte eines Record-Array in die BeMemTable. Die BeMemTable muss sich dabei im Einfüge- oder Editiermodus befinden.

aRecord:U | Record-Array
aIgnoreFields:C | Durch ';' getrennter String mit Feldnamen, die nicht aus dem RecordArray übernommen werden sollen

CbCopyRecFromDataset()

Die Funktion übernimmt den aktuellen Datensatzes von oDataset und schreibt ihn in die BeMemTable. Das Dataset muss richtig positioniert sein.

oDataset:O

Dataset, von welchem der Datensatz kopiert werden soll. Zum Beispiel eine Tabelle oder ein Query

CbEmptyTable()

Die Funktion löscht den gesamten Inhalt einer Tabelle

CbSaveToFile()

Die Funktion speichert den aktuellen Zustand der MemTable in die angegebene Datei

aFileName:C

Vollständiger Pfad zu einer Datei. Existiert die Datei nicht, wird sie erstellt.

CbLoadFromFile()

Die Funktion lädt eine zuvor gespeicherte MemTable aus der angegebenen Datei

aFileName:C

Vollständiger Pfad zu einer Datei. Existiert die Datei nicht wird ein Fehler ausgelöst.

CbReplace()

Die Methode ersetzt den Wert des Feldes durch den übergebenen Wert.

cFieldName:c | Name des Feldes, dessen Wert ersetzt werden soll
vNewValue:V | Neuer Wert, der in das Feld geschrieben wird

CbBeginNoRecordMove()

Die Methode aktivert die NoRecordMove-Logik für die Tabelle. Währen NoRecordMove aktiv ist, kann die Tabelle nicht umpositioniert werden.

cNoRecordMoveFormName:c

Name des Formulars, in dem die Tabelle die gesperrt werden soll, verwendet wird.

CbEndNoRecordMove()

Die Methode deaktivert die NoRecordMove-Logik für die Tabelle wieder. Wenn die Methode aufgerufen wird wenn die NoRecordMove-Logik nicht aktiv ist, wird eine Exception ausgelöst

cNoRecordMoveFormName:c

Name des Formulars, in dem die Tabelle die entsperrt werden soll, verwendet wird.

CbSaveIndex()

Den aktuellen Index der Tabelle merken

CbSaveAndSetIndex()

Den aktuellen Index der Tabelle merken und auf den angegebenen Index setzen

cIndexName:C Name des Index der auch gesetzt wird

CbResetIndex()

Auf den Zuletzt gemerkten Index zurücksetzen

Verfügbare Ereignisse

AfterCancel

Nach dem Abbrechen

AfterDelete

Nach dem Löschen

AfterEdit

Nach dem Editieren

AfterInsert

Nach dem Einfügen

AfterPost

Nach dem Posten

AfterScroll

Nach dem Scrollen

BeforeCancel

Vor dem Abbrechen

BeforeClose

Vor dem Schließen der Tabelle

BeforeDelete

Vor dem Löschen

BeforeEdit

Vor dem Editieren

BeforeInsert

Vor dem Einfügen

BeforeOpen

Vor dem Öffnen der Tabelle

BeforePost

Vor dem Posten

BeforeScroll

Vor dem Scrollen

OnCalcFields

Beim Aktualisieren der berechneten Felder

OnFilterRecord

Beim Aktivieren eines Datensatzes in Verbindung mit Filtern

OnNewRecord

Beim Einfügen oder Hinzufügen eines Datensatzen

NoRecordMoveChanged

Nach dem Umschalten der NoRecordMoveLogik

NoRecordMoveChanging

Beim Umschalten der NoRecordMove-Logik

Beispiel

//##############################################################################

//##############################################################################

// Beispiel für TBeMemTable

//##############################################################################

//##############################################################################

| oDM, oBeMemTable, oBeMem010, oDab010, oField, oBookmark |

//******************************************************************************

// Neue Datensätze anlegen

//******************************************************************************

function CreateData(cName, nID, bDiscount),

   oBeMemTable.CbAppend(),

   oBeMemTable:FIRMA     := cName,

   oBeMemTable:FIRMEN_ID := nID,

   oBeMemTable:RABATT    := bDiscount,

   oBeMemTable.CbPost(),

end,

//##############################################################################

// Eine BeMemTable erstellen und mit Datensätzen füllen

//##############################################################################

oDM         := CreateObject('TBeDBGet'),

oBeMemTable := CreateObject('TBeMemTable', 'BeMemTable'),

startseq

   // Felder hinzufügen

   oBeMemTable.CbAddField('FIRMA', ftString, 30),

   oBeMemTable.CbAddField('FIRMEN_ID', ftInteger, 0),

   oBeMemTable.CbAddField('RABATT', ftBoolean, 0),

   oBeMemTable.Active := True,

   oBeMemTable.CbOrderBy('FIRMA'),

   // Neue Datensätze anlegen

   CreateData('Dontenwill AG', 47, False),

   CreateData('Müller GmbH', 99, False),

   CreateData('Dr. Maier Ing. Büro', 33, False),

   // Einen Index anlegen

   oBeMemTable.CbAddIndex('FIRMA_ID', 'FIRMA;FIRMEN_ID', ixPrimary),

   if oBeMemTable.CbFindKey({'Dontenwill AG', 47}) then

      oBeMemTable.CbEdit(),

      oBeMemTable:RABATT := True,

      oBeMemTable.CbPost(),

   endif,

   // Spalten bearbeiten

   oField              := oBeMemTable.CbFieldByName('FIRMA'),

   oField.DisplayLabel := 'Firmenname',

   oField              := oBeMemTable.CbField(1),

   oField.DisplayLabel := 'Firmen ID',

   // Durch die Tabelle skippen

   oBeMemTable.CbLast(),

   oBeMemTable.CbPrior(),

   oBeMemTable.CbMove(-2),

   // Range und Filter setzen

   oBeMemTable.CbAddIndex('ID', 'FIRMEN_ID', ixPrimary),

   oBeMemTable.CbIndexName := 'ID',

   oBeMemTable.CbSetRange({1}, {50}),

   oBeMemTable.CbSetFilter('FIRMEN_ID = 47'),

   oBeMemTable.CbFiltered := True,

   oBeMemTable.CbCancelRange(),

   oBeMemTable.CbInsert(),

   if oBeMemTable.CbState = dsInsert then

      oBeMemTable.CbCancel(),

   endif,

   // Alled Datensätze löschen

   oBeMemTable.CbFirst(),

   while not oBeMemTable.CbEoF do

      oBeMemTable.CbDelete(),

      oBeMemTable.CbNext(),

   end,

always

   DestroyObject(oBeMemTable),

   DestroyObject(oDM),

stopseq,

//##############################################################################

// Eine BeMemTable erstellen und mit Datensätzen aus anderen Tabellen füllen

//##############################################################################

oDM         := CreateObject('TBeDBGet'),

oBeMemTable := CreateObject('TBeMemTable', 'BeMemTable'),

oBeMem010   := CreateObject('TBeMemTable', 'Mem010'),

oDab010     := DBGetTable(oDM, waDab010, 'ARTIKELSTAMM'),

startseq

   // Struktur einer anderne Tabelle laden

   oBeMemTable.CbBorrowFromDataSet(oDab010),

   oBeMemTable.Active := True,

   if oBeMemTable.CbFieldCount > 0 then

      oBeMemTable.CbLoadFromDataset(oDab010, True),

   endif,

   // Bookmark

   oBookmark := oBeMemTable.CbBookmark,

   oBeMemTable.CbDisableControls(),

   startseq

      // Felder aus einer anderen Tabelle laden

      oBeMem010.CbLoadFields(waDab010, 'Artikelstamm', 'ARTNR,BEZ1,BEZ2', ''),

      oBeMem010.Active := True,

      oBeMemTable.CbFirst(),

      while not oBeMemTable.CbEoF do

         oBeMem010.CbAppend(),

         oBeMem010.CbCopyRecFromDataSet(oBeMemTable),

         oBeMem010.CbPost(),

         oBeMemTable.CbNext(),

      end,

   always

      oBeMemTable.CbBookmark := oBookmark,

      oBeMemTable.CbEnableControls(),

   stopseq,

always

   DestroyObject(oBeMemTable),

   DestroyObject(oBeMem010),

   DestroyObject(oDM),

stopseq,


TBeOfferData

TBeOfferData

Klasse zum Druck eines Angebots für einen Kundenauftrag.

Eigenschaften:

TempUserFilter:C Benutzerdefinierter Positions-Filter

Hinweis:

Beim Druck eines Angebots wird das Feld Dab050:ANG auf True gesetzt. Dieses

Kennzeichen verhindert den weiteren Druck mit TBeOfferData und das Erscheinen

in der Druck-Jobliste des Printmanagers.

Setzen die das Kennzeichen vor dem Druck ggf. zurück.

Hierarchie:

TBePrintData -> TBeOfferData

Beispiel

function PrintAngebot( nAuftragsNummer, lPDFPreview )

 | oPrint |

  oPrint := CreateObject("TBeOfferData"),

  startseq

     oPrint.QuietMode  := lPDFPreview,

     oPrint.PrintDocNo := nAuftragsNummer,   // Nummer des zu druckenden Angebots

     if lPDFPreview then

        oPrint.PDFFileName := 'c:\temp\pdfpreview_offer_' + str(nAuftragsNummer) + '.pdf',

        writeln(oPrint.ExecPrintPDFPreview), // Einzeldruckvorschau anstoßen

     else

        // ggf. Dab050:ANG auf false setzen, damit ein bereits gedrucktes Angebot nochmals gedruckt werden kann.

        oPrint.ExecPrint,                    // Einzeldruck anstoßen

     endif,

   always

      DestroyObject(oPrint),

   stopseq,

end,

PrintAngebot( 816211, true ),

Siehe auch:

TBeRemovalData, TBeCumRemovalData

TBePrintData

TBeCumBillData

TBeConfData

TBeCommissData


TBePdfObj

TBePdfObj

Klasse zum Bearbeiten von Pdf-Dokumenten.

Eigenschaften:

keine öffentlichen Eigenschaften

Hierarchie:

TComponent -> TBePdfObj

Siehe auch:

PdfCmd()


TBePlanningChart

TBePlanningChart

Hauptsteuerungs-Klasse für das Planungs-Chart

Eigenschaften:

Allgemeine-Eigenschaften

ChartParameter:O Verweis auf die zugehörigen Parameter (TBePlanningChartParameter)

DataContainer:O Verweis auf den zu verwendenden Daten-Kontainer (TBePlanningDataContainer)

ResContainer:O Verweis auf den zu verwendenden Resourcen-Kontainer (TBePlanningResContainer)

MenuManager:O Verweis auf den zugehören Menu-Manager (TBePlanningMenuManager)

StartTime:D schneller Zugriff auf ChartParameter.StartDate mit automatischer Aktualisierung des Planungs-Charts

EndTime:D schneller Zugriff auf ChartParameter.EndDate mit automatischer Aktualisierung des Planungs-Charts

SelectedDataItem:O Verweis auf den aktuell selektierten Termin-Eintrag (TBePlanningDataItem)

SelectedResItem:O Verweis auf die aktuell selektierte Ressource (TBePlanningResItem)

StretchModeOfActDay:N Art des Komprimierbereiches für den Tag über den sich die Maus gerade befindet
0 = kein Komprimierbereich definiert
1 = Komprimierbereich aktiv
2 = Komprimierbereich vorhanden aber nicht aktiv

Aktive-Eigenschaften (Methoden)

OnSelectedDataChange Event wenn ein anderer Termin-Eintrag selektiert wird

OnSelectedResChange Event wenn eine andere Ressource selektiert wird

OnGetDataItemHint Event bevor ein Hinweis für einen Termin-Eintrag angezeigt wird (ist dieser Event zugewiesen so wird das Codeblock-Event "vor Anzeige Termin-Hint" nicht ausgeführt)

AfterHorzScroll Event nachdem horizontal gescrollt wurde

AfterVertScroll Event nachdem vertikal gescroll wurde

CbRefresh:L Zeichnet das komplette Planungs-Chart neu

CbIntervalType:N Anzeige-Modus des Planungs-Charts
1 (itStunden) = Stunden-Ansicht
2 (itTage) = Tages-Ansicht
4 (itWochen) = Wochen-Ansicht
8 (itMonate) = Monats-Ansicht

CbShowNavigator:L Zeigt den Planungs-Chart Navigator an

CbLockSelectedResources:L Sperrt alle selektierten Ressourcen

CbUnlockSelectedResources:L Entsperrt alle selektierten Ressourcen

CbDeleteSelectedResources:L Entfernt alle selektierten Ressourcen aus der Ansicht

CbSearchAndSelect:A Selektiert eine Einträge-Hierarchie (z.B. alle Arbeitsgänge eines Auftrags) und positioniert die Ansicht ggf. passend, so dass die Selektion sichtbar ist.
Zuweisung als Array CBSearchAndSelect := {cHierarchyID, bShowSelection}

CbBeginUpdate:L verhindert das Neuzeichnen des Charts

CbEndUpdate:L beendet einen Aufruf von CbBeginUpdate()

CbIsUpdate:L prüft ob das Chart sich im Update-Modus befindet

Hinweis:

- nicht direkt Erzeugen! Zugriff erfolgt über die Klasse TBePlanningChartComp

Beispiel

// Beispiel siehe TBePlanningChartComp

Siehe auch:

TBePlanningChartComp

TBePlanningMenuManager

TBePlanningChartParameter

TBePlanningContainer

TBePlanningItem


TBePlanningChartComp

TBePlanningChartComp

Klasse zur Darstellung des Planungs-Charts auf einem Formular, Panel o.ä.

Eigenschaften:

Allgemeine-Eigenschaften

PlanningChart:O Verweis auf das zugehörige Planungs-Chart (TBePlanningChart)

OptionControl:O Zuweisbare-Komponente welche oben links im Planungs-Chart angezeigt wird

WinPosID:C WinPosition-ID unter welche die letzte Ansicht des Planungs-Chart gespeichert wird

WinPosParamID:C WinPosition-ID unter welche die Planungs-Chart Parameter gespeichert werden

WinPosResID:C WinPosition-ID unter welche die zuletzt angezeigten Resourcen gespeichert werden

WinPosDataID:C WinPosition-ID unter welche die zuletzt angezeigten Termin-Einträge gespeichert werden

Aktive-Eigenschaften (Methoden)

CBInitChart:L Initialisiert das Planungs-Chart (Aufruf nachdem alle Einstellungen getroffen wurden)

CBInitFormHook:L Initialisiert alle Maus-Optionen fürs Planungs-Chart wie "Scrollen/Zoomen per Mausrad"
Vorsicht: hierbei werden einige Events des Formulars auf dem sich das Planungs-Chart
befindet überschrieben (OnKeyDown, OnKeyUp, OnMouseWheel, OnDeactivate).
Überschriebende Events werden dennoch ausgeführt.

CBSaveConfig:L speichert die letzte Ansicht des Planungs-Chart Parameter (siehe WinPosID)

CBSaveParamConfig:L speichert die Planungs-Chart Parameter (siehe WinPosParamID)

CBSaveResConfig:L speichert die Planungs-Chart Resourcen (siehe WinPosResID)

CBSaveDataConfig:L speichert die Planungs-Chart Termin-Einträge (siehe WinPosDataID)

CBLoadConfig:L läd die letzte Ansicht des Planungs-Chart Parameter (siehe WinPosID)

CBLoadParamConfig:L läd die Planungs-Chart Parameter (siehe WinPosParamID)

CBLoadResConfig:L läd die Planungs-Chart Resourcen (siehe WinPosResID)

CBLoadDataConfig:L läd die Planungs-Chart Termin-Einträge (siehe WinPosDataID)

Verwendung:

- Erzeugung per Codeblock-Funktion CreateObject

- (optional) setzen der WinPos... Eigenschaften, falls nicht gesetzt werden keine Einstellungen gespeichert

- (optional) setzten des OptionControls

- Aufruf von CBInitChart

- (optional) Aufruf von CBInitFormHook

Beispiel

|oForm, oChartComp, oChart, oMenuMgr, oParam, oData, oRes, oOptionCtrl|

//******************************************************************************

function InitRes()

   |oItem, oItem2|

   oRes.CBClear,

   oItem               := oRes.CBNewItem,

   oItem.ResType       := rtKategoriePerson,

   oItem.ResID         := 100,

   oItem.Caption       := 'Dreher',

   oItem.SelectedColor := clLime,

   oItem2         := oItem.CBNewItem,

   oItem2.ResType := rtPerson,

   oItem2.ResID   := 101,

   oItem2.Caption := 'Dieter',

   oItem2         := oItem.CBNewItem,

   oItem2.ResType := rtPerson,

   oItem2.ResID   := 102,

   oItem2.Caption := 'Hans',

   oItem               := oRes.CBNewItem,

   oItem.ResType       := rtKategorieMaschine,

   oItem.ResID         := 200,

   oItem.Caption       := 'Drehmaschinen',

   oItem.SelectedColor := clLime,

   oItem2         := oItem.CBNewItem,

   oItem2.ResType := rtMaschine,

   oItem2.ResID   := 201,

   oItem2.Caption := 'DM 201',

   oItem               := oItem.CBNewItem,

   oItem.ResType       := rtKategorieMaschine,

   oItem.ResID         := 300,

   oItem.Caption       := 'Drehmaschinen XXL',

   oItem.SelectedColor := clLime,

   oItem2         := oItem.CBNewItem,

   oItem2.ResType := rtMaschine,

   oItem2.ResID   := 301,

   oItem2.Caption := 'DM XXL 301',

end,

//******************************************************************************

function AddData(aResType, aResID, aID, aStart, aDuration, aCaption, aIsSum)

   Result              := oData.CBNewItem,

   Result.ResType      := aResType,

   Result.ResID        := aResID,

   Result.HierarchyID  := StrZero(aID, 10),

   Result.StartTime    := aStart,

   Result.EndTime      := aStart + aDuration,

   Result.Caption      := aCaption,

   Result.Hint         := FormatDateTime('dd.mm.yy hh:nn', Result.StartTime) + ' - ' +

                          FormatDateTime('dd.mm.yy hh:nn', Result.EndTime) + CRLF +

                          aCaption,

   Result.Color        := GetBeDesignColor(dcbGreen, dcgLevel2),

   Result.OffsetTop    := 2,

   Result.OffsetBottom := 2,

   if aIsSum then

      Result.Color      := GetBeDesignColor(dcbOrange, dcgLevel2),

      Result.Selectable := False,

      Result.ShowHint   := False,

   endif,

end,

//******************************************************************************

function InitData()

   |oItem, aNow, i, aDow|

   oData.CBBeginUpdate,

   startseq

      oData.CBClear,

      AddData(rtPerson,   101, 1, Now(), 1, 'Arbeit1',),

      AddData(rtMaschine, 201, 1, Now(), 1, 'Arbeit1',),

      AddData(rtPerson,   101, 2, Now() + 3, 1, 'Arbeit2',),

      AddData(rtMaschine, 201, 2, Now() + 3, 1, 'Arbeit2',),

      AddData(rtPerson,   102, 3, Now() + 2, 1, 'Arbeit3',),

      AddData(rtMaschine, 301, 3, Now() + 2, 2, 'Arbeit3',),

      AddData(rtMaschine, 301, 3, Now() + 4.2, 1, 'Arbeit3',),

      AddData(rtMaschine, 301, 3, Now(), 1, 'Arbeit3',),

      AddData(rtPerson,   101, 4, Now() + 5, 1, 'Arbeit4',),

      AddData(rtPerson,   102, 4, Now() + 5, 1.5, 'Arbeit4',),

      AddData(rtMaschine, 201, 4, Now() + 5, 1.2, 'Arbeit4',),

      aNow := Trunc(Now()),

      for i := 0 to 6 do

         aDow := Dow(aNow + i),

         if (aDow > 1 and aDow < 7) then

            AddData(rtKategoriePerson, 100, 100, aNow + i, 1, '', True),

            AddData(rtKategorieMaschine, 200, 200, aNow + i, 1, '', True),

            AddData(rtKategorieMaschine, 300, 300, aNow + i, 1, '', True),

         endif,

      next,

   always

      oData.CBEndUpdate,

   stopseq,

end,

//******************************************************************************

function InitMenus()

   oMenuMgr.MainMenu_mnuRes.Visible  := False,

   oMenuMgr.MainMenu_mnuView.Visible := False,

   oMenuMgr.DefaultChartPopupMode    := 0,

end,

//******************************************************************************

function DoOnBtnClearClick()

   oData.CBClear,

   oChart.CBRefresh,

end,

//******************************************************************************

function DoOnBtnLoadClick()

   InitData(),

   oChart.CBRefresh,

end,

//******************************************************************************

function InitOptionControl()

   |oButton|

   oOptionCtrl       := CreateObject('TPanel',, oForm),

   oOptionCtrl.Align := alClient,

   oButton                        := CreateObject('TBeBitBtn',, oOptionCtrl, oOptionCtrl),

   oButton.ImageIndex.IndexNormal := 6,

   oButton.Caption                := 'Daten löschen',

   oButton.Width                  := 150,

   oButton.Top                    := 10,

   oButton.Left                   := Round((oOptionCtrl.Width - oButton.Width) / 2, 0),

   AssignEvent(oButton, 'OnClick', 'DoOnBtnClearClick'),

   oButton                        := CreateObject('TBeBitBtn',, oOptionCtrl, oOptionCtrl),

   oButton.ImageIndex.IndexNormal := 12,

   oButton.Caption                := 'Daten laden',

   oButton.Width                  := 150,

   oButton.Top                    := 35,

   oButton.Left                   := Round((oOptionCtrl.Width - oButton.Width) / 2, 0),

   AssignEvent(oButton, 'OnClick', 'DoOnBtnLoadClick'),

end,

//******************************************************************************

oForm       := CreateObject('TFormEx'),

oChartComp  := CreateObject('TBePlanningChartComp',, oForm, oForm),

oData       := CreateObject('TBePlanningDataContainer'),

oRes        := CreateObject('TBePlanningResContainer'),

startseq

   oChart   := oChartComp.PlanningChart,

   oMenuMgr := oChart.MenuManager,

   oParam   := oChart.ChartParameter,

   oData.CBDataItemClass  := 2,

   oChart.DataContainer   := oData,

   oChart.ResContainer    := oRes,

   oParam.ShowNaviOnMouse := False,

   oForm.Width  := 800,

   oForm.Height := 600,

   InitOptionControl(),

   oChartComp.Align         := alClient,

   oChartComp.WinPosID      := 'CBPCHT1',

   oChartComp.WinPosParamID := 'CBPCHP1',

   oChartComp.WinPosResID   := 'CBPCHR1',

   oChartComp.WinPosDataID  := 'CBPCHD1',

   oChartComp.OptionControl := oOptionCtrl,

   oChartComp.CBInitChart,                   // erst nach dem Setzen der WinPos-IDs ausführen

                                            // damit Einstellungen automatisch geladen werden

   oChartComp.CBInitFormHook,

   InitRes(),

   InitData(),

   InitMenus(),

   oChart.CBIntervalType := 2,

   oChart.StartTime      := Now(),

   oChart.EndTime        := oChart.StartTime + 6,

   ShowModal(oForm),

always

   DestroyObject(oChartComp),

   DestroyObject(oForm),

   DestroyObject(oData),

   DestroyObject(oRes),

stopseq,

Siehe auch:

TBePlanningChart

TBePlanningMenuManager

TBePlanningChartParameter

TBePlanningContainer

TBePlanningItem


TBePlanningChartParameter

TBePlanningChartParameter

Klasse welche alle Einstellungen des Planungs-Chart repräsentiert.

Eigenschaften:

Allgemeine-Eigenschaften

StartDate:D Start Datum/Zeit der aktuellen Ansicht

EndDate:D End Datum/Zeit der aktuellen Ansicht

IntervalType:N Ansicht-Modus
0 = Stunden-Ansicht
1 = Tages-Ansicht
2 = Wochen-Ansicht
3 = Monats-Ansicht

PrimColumnColor:N Hauptfarbe einer Spalte (Stunde, Tag, Woche, Monat)

AltColumnColor:N Sekundärfarbe einer Spalte (Stunde, Tag, Woche, Monat)

SaturdayColor:N Farbe für Samstage

SundayColor:N Farbe für Sonntage

HolidayColor:N Farbe für Feiertage

UseStretchAreaColor:L Komprimierbereich mit Farbe "StretchAreaColor" füllen

StretchAreaColor:N Farbe für Komprimierbereiche

SelectedResColor:N Farbe für aktuell selektierte Ressource

DynResColor:N Farbe für dynamisch ein geblendete Ressourcen

SelectedDataColor:N Farbe für aktuell selektierte Termin-Einträge

ResHeight:N Höhe eines Ressourcen-Eintrags

CategHeight:N Höhe einer Kategorie

ResLines:L Linien im Ressourcen-Baum zeichnen (nicht implementiert)

HorzLines:L Horizontale Trennlinen im Planungs-Chart

StretchAreaProc:N Größe des Komprimiertbereich in Prozent

TimeAdjustment:N Zeitanpassung
0 = keine Rundung
1 = auf nächste 5 Minuten ab/aufrunden
2 = auf nächste 10 Minuten ab/aufrunden
3 = auf nächste 15 Minuten ab/aufrunden
4 = auf nächste 30 Minuten ab/aufrunden

AdditivView:N Additive Ansicht aktivieren (nicht implementiert)

DynamicView:N Dynamische Ansicht aktivieren

ShowNaviOnMouse:L Planungs-Chart Navigator bei Maus-Bewegung an den rechten Rand des Charts anzeigen

ShowVertHoliday:L Vertikale Texte für Feiertage anzeigen

ChartIndiMenuID:N Indi. Menü ID fürs Planungs-Chart

ResIndiMenuID:N Indi. Menü ID für den Ressourcen-Baum

Aktive-Eigenschaften (Methoden)

CBShowConfig:L Zeigt den Dialog zur Bearbeitung der Einstellungen an
True = Einstellungen wurden übernommen
False = Bearbeitung wurde abgebrochen

CBLoadDefault:L Stellt die Default-Einstellung wieder her

CBSaveToFile:C Speichert die aktuellen Einstellungen in die zugewiesene Datei

CBLoadFromFile:C Läd die Einstellungen aus der zugewiesenen Datei

Hinweis:

- nicht direkt Erzeugen! Zugriff erfolgt über die Klasse TBePlanningChart

Beispiel

// Beispiel siehe TBePlanningChartComp

Siehe auch:

TBePlanningChartComp

TBePlanningChart

TBePlanningMenuManager

TBePlanningContainer

TBePlanningItem


TBePlanningContainer

TBePlanningContainer

Klasse TBePlanningIndexedContainer ist die Grundklasse zur Verwaltung von Daten fürs Planungs-Chart und

wird nie direkt verwendet sondern immer eine Nachfolger-Klasse (siehe Hierarchie).

Eigenschaften:

Allgemeine-Eigenschaften

DataItems:O Objekt-Liste mit allen enthaltenen Einträgen im Container

IndexType:N Schlüssel anhand die Einträge gesucht/identifiziert werden
1 = Ressourcen-Typ und Ressourcen-ID (Default bei TBePlanningResContainer)
2 = HierarchyID (Default bei TBePlanningDataContainer)
3 = HierarchyID2

AutoRefresh:L Automatische Aktualisierung des Planungs-Charts bei Änderung eines Eintrags (Default = False)

SaveFormat:C Speicherformat für Datenexport, sfBinary oder sfText (Default = sfBinary)

Aktive-Eigenschaften (Methoden)

CBNewItem:O Erzeugt einen neuen Eintrag

CBClear:L Entfernt alle Einträge aus dem Container

CBBeginUpdate:L Schaltet die Aktualisierungs-Sperre ein

CBEndUpdate:L Hebt die Aktualisierungs-Sperre auf

CBIsUpdate:L Ermittelt ob die Aktualisierungs-Sperre aktiv ist

CBSaveToFile:C Speichert alle Einträge und Einstellungen des Containers in die zugewiesene Datei

CBLoadFromFile:C Läd alle Einträge und Einstellungen aus der zugewiesenen Datei

Verwendung:

- Erzeugung per Codeblock-Funktion CreateObject

- Erstellen der Einträge über CBNewItem/CBLoadFromFile

- Zuweisen an eine TBePlanningChart Klasse

Hierarchie:

TBePlanningIndexedContainer -> TBePlanningDataContainer

-> TBePlanningResContainer

TBePlanningDataContainer

Klasse zur Verwaltung von Termin-Einträgen.

Eigenschaften:

Allgemeine-Eigenschaften

HierarchyIDLen:N Länge der HierarchyID welche für Such-Operationen verwendet wird (Default = -1 = komplette Länge)

HierarchyID2Len:N Länge der HierarchyID2 welche für Such-Operationen verwendet wird (Default = -1 = komplette Länge)

CBDataItemClass:N TBePlanningItem-Klasse welche der Container verwendet (Default = 0)
(im Codeblock ist nur TBePlanningDataCBItem zulässig)
2 = TBePlanningDataCBItem

TBePlanningResContainer

Klasse zur Verwaltung von Ressourcen-Einträgen.

Eigenschaften:

Allgemeine-Eigenschaften

Resources:O Objekt-Liste mit den Ressourcen-Einträgen der obersten Ebene

LoadOpt_CreateAlways:L Einträge beim Laden immer erzeugen, auch wenn diese schon vorhanden sind (Default = True)

CBLoadOpt_CreateTypes:N nur relevant wenn LoadOpt_CreateAlways = False
Ressourcen-Typen welche beim Laden automatisch erzeugt werden (Default = Alle)
Folgende Werte können mit OR verknüpft werden
0 = keine
2 = Mitarbeiter-Kategorien
4 = Maschinen-Kategorien
8 = Mitarbeiter
16 = Maschinen
32 = virtuelle Mitarbeiter
64 = virtuelle Maschinen

Beispiel

// Beispiel siehe TBePlanningChartComp

Siehe auch:

TBePlanningChartComp

TBePlanningChart

TBePlanningMenuManager

TBePlanningChartParameter

TBePlanningItem


TBePlanningItem

TBePlanningIndexedItem

Klasse TBePlanningIndexedItem ist die Grundklasse für Einträge in TBePlanningContainer-Klassen und

wird nie direkt verwendet sondern immer eine Nachfolger-Klasse (siehe Hierarchie).

Eigenschaften:

Allgemeine-Eigenschaften

Container:O zugehöriges Container-Objekt TBePlanningContainer

ID:N eindeutige ID

ResType:N Ressourcen-Typ
0 (nicht definiert) = nicht definiert
1 (rtKategoriePerson) = Kategorie für Personen
2 (rtKategorieMaschine) = Kategorie für Maschinen
3 (rtPerson) = Person
4 (rtMaschine) = Maschine
5 (rtVirtuellePerson) = virtuelle Person
6 (rtVirtuelleMaschine) = virtuelle Maschine

ResID:N Ressourcen-ID

Caption:C Bezeichnung

Font:O Font-Objekt zur Festlegung der Schriftart

Color:N normale Hintergrund-Farbe

SelectedColor:N Hintergrund-Farbe wenn der Eintrag selektiert ist

FocusedColor:N Hintergrund-Farbe für das Item welches wirklich selektiert ist bei einer mehrfach Selektion

Visible:L Sichtbarkeit des Eintrags (Default = True)

Aktive-Eigenschaften (Methoden)

CBFree:L Eintrag freigeben

Verwendung:

- nicht direkt Erzeugen! Erstellung erfolgt über eine TBePlanningContainer-Klasse

Hierarchie:

TBePlanningIndexedItem -> TBePlanningDataItem -> TBePlanningDataCBItem

-> TBePlanningPCItem

-> TBePlanningResItem -> TBePlanningResPCItem

TBePlanningDataItem

Klasse TBePlanningDataItem ist die erweiterte Grundklasse für Einträge in TBePlanningDataContainer-Klassen und

wird nie direkt verwendet sondern immer eine Nachfolger-Klasse (siehe Hierarchie).

Eigenschaften:

Allgemeine-Eigenschaften

DataType:N

HierarchyID:C HierarchyID primärer Schlüssel-Wert des Termin-Eintrags

HierarchyID2:C HierarchyID2 sekundärer Schlüssel-Wert des Termin-Eintrags

StartTime:D Start-Zeitpunkt des Termin-Eintrags

EndTime:D End-Zeitpunkt des Termin-Eintrags

ShowHint:L Hinweis-Text anzeigbar (Default = True)

Hint:C Hinweis-Text

Selectable:L Termin-Eintrag selektierbar (Default = True)

OffsetTop:N Abstand in Pixel vom oberen Rand

OffsetBottom:N Abstand in Pixel vom unteren Rand

Level:N Anzeige-Level auf welchem der Eintrag in der Ressource angezeigt wird

BorderColor:N Farbe des Rahmens

SelectedBorderColor:N Farbe des Rahmens wenn der Eintrag selektiert ist

FocusedBorderColor:N Farbe des Rahmens für den wirklich selektierten Eintrag bei einer mehrfach Selektion

DrawPatternColor:N Farbe für das Zeichen-Muster

DrawMarkersCount:N Anzahl der Markers die am linken Rand gezeichnet werden

DrawMarkersAsStr:C String-Array mit den Farb-Angaben für die Markers z.b.

'{' + Str(GetBeDesignColor(dcbOrange, dcgLevel2)) + '}',

clNone = Marker wird nicht gezeichnet

DragAlpha:N Alpha-Wert mit welchem der Eintrag gezeichnet wird wenn er verschoben wird

AlphaValue:N Alpha-Wert mit welchem der Eintrag dargestellt wird

DragLevel: Anzeige-Level auf welchem der Eintrag beim verschieben angezeigt wird

CBIntervalTypes:N Modus in welchen Ansichten der Termin-Eintrag angezeigt werden soll (Default = Alle)
Folgende Werte können mit OR verknüpft werden
1 (itStunden) = Stunden-Ansicht
2 (itTage) = Tages-Ansicht
4 (itWochen) = Wochen-Ansicht
8 (itMonate) = Monats-Ansicht

CBDrawPatterns:N Zeichen-Muster

Folgende Werte können mit OR verknüpft werden

1 (ddpHorzLines) = Horizontale-Linien

2 (ddpSlash) = '/' Linien

4 (ddpBackSlash) = '\' Linien

TBePlanningDataCBItem

Klasse zur Verwendung in individuellen Codeblock-Programmen.

Eigenschaften:

Allgemeine-Eigenschaften

Text:C Frei verwendbare Text-Eigenschaft

TBePlanningDataPCItem

Klasse welche in der Kapazitätanalyse-Oberfläche verwendet wird.

Eigenschaften:

Allgemeine-Eigenschaften

CBItemType:N Eintragstyp, mögliche Werte

- pcitArbg Arbeitsgang

- pcitUtilisation Auslastung

- pcitAbsence Abwesenheit

- pcitResourceLocked Ressourcen-Sperre

Diese Eigenschaften sind nur definiert, wenn der Eintragstyp = Arbeitsgang ist.

CBOrdType:N Auftragstyp, mögliche Werte

- otProdOrder Produktionsauftrag

- otDispoOrder Dispo-Vorschlag

CBOrdID:N Auftrags-ID, nur möglich wenn Eintragstyp = Arbeitsgang. Entspricht Dab035:ID.

CBOrdNo:N Auftrags-Nummer, nur möglich wenn Eintragstyp = Arbeitsgang. Ohne Split-Anteil.

CBOrdSplitNo:N Auftrags-Split-Nummer, nur möglich wenn Eintragstyp = Arbeitsgang.

CBArbgLfdNr:N LfdNr. des Arbeitsgangs, nur möglich wenn Eintragstyp = Arbeitsgang.

TBePlanningResItem

Klasse welche Einträge in TBePlanningResContainer-Klassen repräsentiert.

Eigenschaften:

Allgemeine-Eigenschaften

ChildList:O Objekt-Liste mit allen Unter-Ressourcen

Parent:O TBePlanningResItem-Objekt welchem die Ressource untergeordnet ist

Selected:L Ressource markiert

Locked:L Ressource gesperrt

Expanded:L Kategorie aufgeklappt (nur relevant bei ResType = rtKategorie...)

Height:N Höhe der Ressource

LevelCount:N Anzahl der Zeichen-Levels

DragLevelCount:N Anzahl der Zeichen-Levels während eines Drag-Vorgangs

ImageIndex:N Index des Bildes welches verwendet werden soll (Default = -1 = Standard Bilder)

CBNextSibling:O nächste Ressource auf gleicher Ebene ermitteln

CBPrevSibling:O vorherige Ressource auf gleicher Ebene ermitteln

CBLevelHeights:C String-Array mit den Höhen-Angaben der Zeichen-Levels z.b. '{10,10,18}'

Aktive-Eigenschaften (Methoden)

CBNewItem:O Erzeugt eine neue Unter-Ressource

TBePlanningResPCItem

Klasse welche in der Kapazitätanalyse-Oberfläche verwendet wird.

Beispiel

// Beispiel siehe TBePlanningChartComp

Siehe auch:

TBePlanningChartComp

TBePlanningChart

TBePlanningMenuManager

TBePlanningChartParameter

TBePlanningContainer


TBePlanningMenuManager

TBePlanningMenuManager

Klasse zur Verwaltung der Popup-Menüs und Menü-Leiste des Planungs-Charts.

Eigenschaften:

Allgemeine-Eigenschaften

PopupMenuChart:O Zuweisbares Popup-Menü welches im Planungs-Chart angezeigt wird

PopupMenuResource:O Zuweisbares Popup-Menü welches im Ressourcen-Baum angezeigt wird

DefaultChartPopupMode:N Modus für die Verwendung des des Standard-Popup-Menüs des Planungs-Charts (Default = 1)
0 = kein Standard-Menü
1 = Standard-Menü oberhalb vom PopupMenuChart
2 = Standard-Menü unterhalb vom PopupMenuChart

DefaultResPopupMode:N Entspricht DefaultChartPopupMenu nur für das Popup-Menü im Ressourcen-Baum

UseDefaultMainMenu:L Standard Hauptmenü-Leiste anzeigen (Default = True)

MainMenu_mnuRes:O Menü-Eintrag "Ressourcen"

MainMenu_mnuAdd:O Menü-Eintrag "Hinzufügen" im "Ressourcen" Menü

MainMenu_mnuView:O Menü-Eintrag "Ansicht"

MainMenu_mnuConfig:O Menü-Eintrag "Einstellungen"

Aktive-Eigenschaften (Methoden)

OnUpdateDataActions Event bei Aktualisierung der Termin-Einträge abhängigen Actions
(z.b. neuer Termin-Eintrag selektiert)

OnUpdateResActions Event bei Aktualisierung der Ressourcen abhängigen Actions
(z.b. neue Ressource markiert)

OnUpdateChartActions Event bei Aktualisierung der Planungs-Chart abhängigen Actions
(z.b. Ansicht geändert)

Hinweis:

- nicht direkt Erzeugen! Zugriff erfolgt über die Klasse TBePlanningChart

- zur Erweiterung der Standard Hauptmenü-Leiste können die "MainMenu..." Eigenschaften zur leichten Eingliederung verwendet werden

Beispiel

// Beispiel siehe TBePlanningChartComp

Siehe auch:

TBePlanningChartComp

TBePlanningChart

TBePlanningChartParameter

TBePlanningContainer

TBePlanningItem


TBePostingBO

TBePostingBO

Die Klasse TBePostingBO kapselt Eigenschaften und Funktionen der "Lager-Bewegungen / Buchungen" (Dab020).

In Verbindung mit dem Projekt-Management gilt: Buchungen sind immer einer Vorgangs-Leistung zugeordnet, jede Vorgangs-Leistung kann "n" Buchungen haben.

Hinweis: Das TBePostingBo ist vorerst nur für die Leistungs-Buchungen im Projekt-Management verwendbar.

Eigenschaften:

Tabellen und Felder
CbTaskEffortID:N | (nur lesend) Vorgangsleistungs-Zuordnung (entspricht DAB020:VORGLS_ID)
CbTaskID:N | (nur lesend) Vorgangs-Zuordnung (entspricht DAB020:VORG_ID)
CbProjectID:N | (nur lesend) Projekt-Zuordnung (entspricht DAB020:PRJ_ID)
CbPostingDate:D | Buchungs-Datum (entspricht DAB020:DATUM)
CbPostingQuantity:N | Plan-Menge (entspricht DAB020:MENGE)
CbMemo:M | Memo-Text (entspricht DAB020:MEMO)
CbAcquisitionValue:N | Einstandswert der Buchung (entspricht DAB020:EKP)

Funktionen und Methoden

CbInsert()

Diese Methode ist für diese Business Objekt nicht verfügbar, bitte TBeProjectBusinessController.CbCreateEffortPosting() verwenden

Verfügbare Ereignisse

nach der Neuanlage

vor dem Speichern

Beispiel

// siehe TBeProjectBusinessController

Siehe auch:

Business Object Event "Nach der Neuanlage"

Business Object Event "Vor dem Speichern"

Business Object Event "Berechnung der Info-Caption"

TBeProjectBO

TBeProjectTaskBO

TBeProjectTaskEffortBO

TBeProjectBusinessController

TBeProjectSalesProfitBO


TBePrintData

TBePrintData - abstrakte Basisklasse für den Belegdruck

Abstrakte Belegdruck-Klassen die als Vorfahr für verschiedene Belegdruck-Klassen dient.

Eigenschaften:

UsePrintDlg:L default = True = Druckdialog anzeigen

QuietMode:L default = False = Alle Meldungen und Dialog anzeigen

PrintPersNo:N default = 0, Pers.Nr. für den zu druckenden Beleg (falls dieser Pers.Nr. orientiert arbeitet)

PrintDocNo:U default = leer, Dokument-Nr. für den zu druckenden Beleg (falls dieser Dok.Nr. orientiert arbeitet)

PDFFileName:C default = leer, kompletter Pfad mit Dateiname für PDF Ausgabe (siehe ExecPrintPDFPreview)

ExecLayout Führt den Layoutdialog aus

ExecPrint Führt einen Einzeldruck aus

ExecPrintAll Führt einen Stapaldruck aus

ExecPrintPDFPreview Führt einen Vorschau Druck als PDF-Datei aus

Hinweise:

PrintPersNo wird i.d.R. auf einen Kunden- oder Lieferanten-Nr. gesetzt, falls der Belegtyp dies erfordert (z.B. Sammelbelege)

PrintDocNo wird i.d.R. auf eine Auftrags- oder Bestellnr. gesetzt, falls der Belegtyp dies erfordert (z.B. Einzelbelege)

Beispiel:

Diese Klasse ist nicht autark einsetzbar!


TBeProcess

TBeProcess

Die Klasse TBeProcess dient dazu einen neuen Prozess innerhalb von business express zu starten.

Die Anmelde-Daten (Ab 6.5 /LOGINKEY) werden direkt aus der offenen be-Instanz übergeben.

Eigenschaften
Active:L | Aktiviert den Prozess mit True und Deaktiviert ihn mit False
CommandLine:C | Die auszuführende Befehlszeile. Hier kann im Grunde jeder Befehl ausgeführt werden, der auch in der Windows-Kommandozeile ausführbar ist.
Running:L | Gibt an, ob der Prozess läuft
FreeOnTerminate:L | Gibt an, ob das Objekt zerstört werden soll, sobald der Prozess beendet ist.
CurrentDirectory:C | Verzeichnis, in dem der Prozess gestartet wird
AutomaticallyGenerateLoginkey:L | Automatische Erzeugung des Login-Key auf Basis der ausführenden be-Instanz. (Default = True); Wird diese Einstellung auf False gesetzt, wird beim Starten einer anderen be-Instanz der Login-Dialog angezeigt.
Verfügbare Ereignisse
OnProcessFinished | Dieses Event wird ausgelöst, sobald der Prozess beendet wurde.

Beispiel

//##############################################################################

//##############################################################################

// Hinweis: Mit diesem Programm kann ein beliebiges be-Modul aus der

//          Warenwirtschaft heraus geöffnet werden

//##############################################################################

//##############################################################################

| m_oBeProcess, m_cCurrentDir, m_cParams, m_cExe, m_cBeModule |

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_cCurrentDir := '\\srv\businessexpress\winbe\be32\', // Pfad des be32-Ordners

m_cExe        := 'be_32.exe',                         // be_32-Exe

m_cParams     := ' /P:..',                            // zusätzliche Startparameter

m_cBeModule   := 'PRMAN',                             // Startparameter für das zu startende Modul

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Die Funktion erweitert den String der die zusätzlichen Parameter enthält um

// einen weiterern Parameter.

//******************************************************************************

function AddParam(cParam, cValue)

   m_cParams += ' /' + cParam + IIf(Empty(cValue), '', ':' + cValue),

end,

//##############################################################################

//##############################################################################

// Events

//##############################################################################

//##############################################################################

//******************************************************************************

// Dieses Event wird ausgelöst, sobald der externe Prozess beendet wurde

//******************************************************************************

function DoOnProcessFinished()

   MessageDlg('Prozess beendet', mtInformation, mbOk),

   DestroyObject(m_oBeProcess), // muss als letzte Aktion in dem Event erfolgen

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

SetPersistent(True), // muss gesetzt werden, da sonst kein Zugriff auf Event-Funktion möglich

m_oBeProcess := CreateObject('TBeProcess', '', Application),

startseq

   // Das Event zuweisen, das bei Beendung des Prozesses ausgeführt wird

   AssignEvent(m_oBeProcess, 'OnProcessFinished', 'DoOnProcessFinished'),

   // Hier können nun beliebig viele Parameter angefügt werden

   AddParam(m_cBeModule, ''),

   // Alle nötigen Eigenschaften setzten und den Prozess starten

   m_oBeProcess.CurrentDirectory              := m_cCurrentDir,

   m_oBeProcess.CommandLine                   := m_cCurrentDir + m_cExe + m_cParams,

   m_oBeProcess.FreeOnTerminate               := True,

   m_oBeProcess.AutomaticallyGenerateLoginkey := True,

   m_oBeProcess.Active                        := True,

   if m_oBeProcess.Running then

      MessageDlg('Der Prozess wurde erfolgreich gestartet.', mtInformation, mbOk),

   endif,

onerror

   MessageDlg('Fehler beim Starten des externen Prozesses.' + CrLf + GetErrorText(), mtError, mbOk),

stopseq,


TBeProductionDispositionPlanningBO

TBeProductionDispositionPlanningBO

Die Klasse TBeTProductionDispositionPlanningBO kapselt den Zugriff auf die Tabelle Dab215 - Produktion Dispo-Planung.

Eigenschaften:

Eigenschaften
CbArticleNo:C | Artikelnummer (Dab215:ARTNR)
CbProdDepartment:C | Produktions-Abteilung (Dab215:PROD_ABT)
CbQuantity:N | Bedarf für Fertigung (Dab215:MENGE)
CbSuspDemandProduction:N | Verdachtsbedarf für Fertigung (Dab215:VERD_BED)
CbQuantitySales:N | Bedarf für Verkauf (Dab215:MENGE_VK)
CbSuspDemandSales:N | Verdachtsbedarf für Verkauf (Dab215:VERD_BEDVK)
CbSuggestionQuantity:N | Menge Bestellvorschlag (Dab215:DISPO)
CbCommiss:C | Kommissions-Nummer (Dab215:KOMMISS)
CbTimeLimit:C | Termin (Dab215:TERMIN)
CbTimeLimitIndex:C | (Nur lesen) Termin-Index (Dab215:TERM_INDEX)
CbMemo:C | Zusatz-Text (Dab215:MEMO)
CbLocation:N | Standort (Dab215:STANDORT)
CbAutoInc:N | (Nur lesen) Auto Increment (Dab215:AUTOINC)
CbCapaPriority:N | Priorität Kapazitäts-Analyse (Dab215:KAP_PRIORI)
CbCapaLock:L | Sperre Kapazitäts-Analyse (Dab215:KAP_SPERRE)
CbCapaScheduleMode:N | Terminierungsmodus Kap.Analyse (Dab215:KAP_TRMMOD)
CbCapaExecTimeMaxExceed:N | Maximale Überschreitung der Minimal-Durchlaufszeit (Dab215:KAP_MAXMOV)
CbIsInfoRecord:L | (Nur lesen) Ist Eintrag ein Info-Datensatz

Methoden
CbInsert | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden
CbEdit | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden
CbCancel | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden
CbPost | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden
CbDelete | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden

Verfügbare Ereignisse

Beispiel

// siehe Beispiel des TBeProductionDispositionBC

Siehe auch:

TBePurchaseDispositionBO

TBePurchaseDispositionBusinessController

TBeProductionMaterialAvailabilityBusinessController

TBeProductionPartListBO

TBeProductionOrderBusinessController

TBeProductionOrderBO

TBeProductionDispositionBC


TBeProductionDispositionBC

TBeProductionDispositionBC

Die Klasse TBeProductionDispositionBC kapselt alle Funktionen, die zur Anlage von Einträgen in der Produktions-Dispositions-Planung benötigt werden.

Eigenschaften:

Eigenschaften

CbDataModule:O

Datenmodul auf dem der BusinessController arbeitet

Methoden

CbDispoPlanCreate

Anlegen eines Planungs-Eintrags

aProdDispoPlanBO:O | Objekt vom Typ TBeProductionDispositionPlanningBO
aArticleNo:C | Artikelnummer als String

CbDispoPlanEdit

Bearbeiten eines existierenden Planungs-Eintrags

aProdDispoPlanBO:O

Objekt vom Typ TBeProductionDispositionPlanningBO welches auf den entsprechenden Eintrag positioniert ist

CbDispoPlanPost

Speichern eines sich im Neuanlage-/Bearbeitungsmodus befindlichen Planungs-Eintrags

aProdDispoPlanBO:O | Objekt vom Typ TBeProductionDispositionPlanningBO
aDiscontinuedLockedOrSampleArticlesAllowed:L | Erlaubnis zum Speichern von Auslauf-/Sperr-/Muster-Artikeln erteilen.
aPurchaseArticlesAllowed:L | Erlaubnis zum Speichern von Artikeln die für die Einkaufsabteilung markiert wurden (Z/Z)

CbDispoPlanCancel

Bricht die Neuanlage/Bearbeitung eines Planungs-Eintrags ab.

aProdDispoPlanBO:O

Objekt vom Typ TBeProductionDispositionPlanningBO

CbDispoPlanDelete

Löscht den Planungs-Eintrag der im übergebenen BO positioniert wurde.

aProdDispoPlanBO:O

Objekt vom Typ TBeProductionDispositionPlanningBO

CbDispoPlanRoundSuggestionQuantToOrderUnits

Nach dem Setzen einer Bestellmenge, kann mit dieser Methode auf die gesetzte Bestelleinheit aufgerundet werden. Der Aufruf dieser Methode löst ggf. das Event "bei Rundung Vorschlagsmenge (EK/Prod)" aus.

aProdDispoPlanBO:O

Objekt vom Typ TBeProductionDispositionPlanningBO

CbDispoPlanToDisposition

Überträgt den Planungs-Eintrag in die Disposition. Hierbei wird das BusinessController-Event "bei Übertragung von BO-Daten" ausgelöst. Der Planungs-Eintrag ist anschließend gelöscht.

aProdDispoPlanBO:O

Objekt vom Typ TBeProductionDispositionPlanningBO

CbDispoPlanToProductionOrder

Überträgt den Planungs-Eintrag in die Offenen-Produktionsaufträge. Hierbei wird das BusinessController-Event "beim Übertragen von BO-Daten" ausgelöst. Der Planungs-Eintrag ist anschließend gelöscht.

aProdDispoPlanBO:O

Objekt vom Typ TBeProductionDispositionPlanningBO

CbDispoCreate

Anlegen eines Dispositions-Eintrags

aProdDispoBO:O | Objekt vom Typ TBeProductionDispositionBO
aArticleNo:C | Artikelnummer als String

CbDispoEdit

Bearbeiten eines existierenden Dispositions-Eintrags

aProdDispoBO:O

Objekt vom Typ TBeProductionDispositionBO welches auf den entsprechenden Eintrag positioniert ist

CbDispoPost

Speichern eines sich im Neuanlage-/Bearbeitungsmodus befindlichen Dispositions-Eintrags

aProdDispoBO:O | Objekt vom Typ TBeProductionDispositionBO
aDiscontinuedLockedOrSampleArticlesAllowed:L | Erlaubnis zum Speichern von Auslauf-/Sperr-/Muster-Artikeln erteilen.
aAllowInternalMemo:L | Ggf. auftretende Artikel-Warnmeldungen automatisch akzeptieren
aPurchaseArticlesAllowed:L | Erlaubnis zum Speichern von Artikeln die für die Einkaufsabteilung markiert wurden (Z/Z)
aAllowDoubleArticleNoCommissCombination:L | Festlegen ob bei bereits vorhandener Artikelnummer-Kommissionsnummern-Kombination ein Speichern erlaubt ist.
aTakeOverArticleData:L | Basisdaten des Artikels neu laden (Erfolgt automatisch beim Aufruf von CbDispoCreate)

CbDispoCancel

Bricht die Neuanlage/Bearbeitung eines Dispositions-Eintrags ab.

aProdDispoBO:O

Objekt vom Typ TBeProductionDispositionBO

CbDispoDelete

Löscht den Dispositions-Eintrag der im übergebenen BO positioniert wurde.

aProdDispoBO:O

Objekt vom Typ TBeProductionDispositionBO

CbDispoRelease

Setzt die Freigabe des Dispositions-Eintrags der im übergebenen BO positioniert wurde.

aProdDispoBO:O | Objekt vom Typ TBeProductionDispositionBO
aRelease:L | Freigabe auf True = freigegeben oder False = nicht freigegeben setzen

CbDispoToProductionOrder

Überträgt den Dispositions-Eintrag in die Offenen-Produktionsaufträge. Hierbei wird das BusinessController-Event "beim Übertragen von BO-Daten" ausgelöst. Der Dispositions-Eintrag ist anschließend gelöscht.

aProdDispoBO:O

Objekt vom Typ TBeProductionDispositionBO

Verfügbare Ereignisse

bei Übertragung von BO-Daten

Dieses Event wird von den beiden Funktionen CbDispoPlanToDisposition und CbDispoPlanToProductionOrder ausgelöst. Im Event erhält man das Quell-BusinessObjekt und das Ziel-BusinessObjekt bevor der neue Datensatz gespeichert wurde und noch vor der Löschung des Quell-Datensatzes.

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Beispiel für die Verwendung des

//               TBeProductionDispositionBC zur Anlage von

//               Dispositions-Planungs-Einträgen

//##############################################################################

//##############################################################################

|

   m_oDM, m_oProdDispoBC, m_oProdDispoPlanBO, m_oProdDispoBO,

   m_cArticleNo, m_cArticleNo2, m_nSupplierNo

|

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_cArticleNo  := 'AUTOMAT-1', // Baugruppe

m_cArticleNo2 := 'B-4',       // Baugruppe

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Diese Funktion führt der Reihe nach folgende Operationen durch:

// 1. Anlegen eines neuen Planungseintrags

// 2. Anpassen des angelegten Eintrags

//   2.1 Kommissionsnummer eintragen

//   2.2 Menge verändern und ggf. auf Bestelleinheit aufrunden lassen

//   2.3 Ändern des Artikels

// 3. Übername des Planungseintrags in die Disposition

// 4. Übername eines Planungseintrags in die Produktion

// @Result: null

//******************************************************************************

function DispositionPlanningExample(oDM)

|

   aDiscontinuedLockedOrSampleArticlesAllowed, // Auslauf-/Sperr-/Muster-Artikel erlauben

   aPurchaseArticlesAllowed                    // Artikel die für den Einkauf vorgesehen sind in der Produktion erlauben

|

   // 1. Anlegen eines neuen Planungseintrags ----------------------------------

   DBStartTrans(oDM.ADSConnection),

   startseq

      m_oProdDispoBC.CbDispoPlanCreate(m_oProdDispoPlanBO, m_cArticleNo),

      // Speichern ohne weitere (direkte) Änderung

      aDiscontinuedLockedOrSampleArticlesAllowed := True,

      aPurchaseArticlesAllowed                   := True,

      m_oProdDispoBC.CbDispoPlanPost(m_oProdDispoPlanBO,

                                     aDiscontinuedLockedOrSampleArticlesAllowed,

                                     aPurchaseArticlesAllowed),

      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollback(oDM.ADSConnection),

      endif,

   stopseq,

   // 2. Anpassen des angelegten Eintrags --------------------------------------

   DBStartTrans(oDM.ADSConnection),

   startseq

      m_oProdDispoBC.CbDispoPlanEdit(m_oProdDispoPlanBO),

      // 2.1 Kommissionsnummer eintragen ---------------------------------------

      m_oProdDispoPlanBO.CbCommiss := 'TEST_KOMM',

      // 2.2 Menge verändern und ggf. auf Bestelleinheit aufrunden lassen ------

      m_oProdDispoPlanBO.CbSuggestionQuantity := 15,

      m_oProdDispoBC.CbDispoPlanRoundSuggestionQuantToOrderUnits(m_oProdDispoPlanBO),

      // 2.3 Ändern des Artikels -----------------------------------------------

      m_oProdDispoPlanBO.CbArticleNo := m_cArticleNo2,

      // Speichern

      aDiscontinuedLockedOrSampleArticlesAllowed := True,

      aPurchaseArticlesAllowed                   := True,

      m_oProdDispoBC.CbDispoPlanPost(m_oProdDispoPlanBO,

                                     aDiscontinuedLockedOrSampleArticlesAllowed,

                                     aPurchaseArticlesAllowed),

      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollback(oDM.ADSConnection),

      endif,

   stopseq,

   // 3. Übername des Planungseintrags in die Disposition ----------------------

   // ACHTUNG: Hier darf keine eigene Transaktion gestartet werden

   m_oProdDispoBC.CbDispoPlanToDisposition(m_oProdDispoPlanBO),

   // 4. Übername eines Planungseintrags in die Produktion ---------------------

   // ACHTUNG: Hier darf keine eigene Transaktion gestartet werden

   // Anlage eines weiteren Eintrags

   DBStartTrans(oDM.ADSConnection),

   startseq

      m_oProdDispoBC.CbDispoPlanCreate(m_oProdDispoPlanBO, m_cArticleNo),

      // Speichern ohne weitere (direkte) Änderung

      aDiscontinuedLockedOrSampleArticlesAllowed := True,

      aPurchaseArticlesAllowed                   := True,

      m_oProdDispoBC.CbDispoPlanPost(m_oProdDispoPlanBO,

                                     aDiscontinuedLockedOrSampleArticlesAllowed,

                                     aPurchaseArticlesAllowed),

      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollback(oDM.ADSConnection),

      endif,

   stopseq,

   // Übername direkt in die Produktion

   m_oProdDispoBC.CbDispoPlanToProductionOrder(m_oProdDispoPlanBO),

end,

//******************************************************************************

function DispositionExample(oDM, oProdDispoBC, oProdDispoBO, cArticleNo)

|

   bDiscontinuedLockedOrSampleArticlesAllowed,

   bAllowInternalMemo,

   bPurchaseArticlesAllowed,

   bAllowDoubleArticleNoCommissCombination,

   bTakeOverArticleData

|

   //***************************************************************************

   // Allgemeiner Test

   //***************************************************************************

   oDM.CbTransaction_Begin(),

   startseq

      // Anlegen eines neuen Dispositions-Eintrags

      oProdDispoBC.CbDispoCreate(oProdDispoBO, cArticleNo),

      // Menge setzen

      oProdDispoBO.CbQuantity := 1,

      oProdDispoBO.CbCommiss  := 'MYTESTKOMMISS',

      // Speichern des Eintrags

      bDiscontinuedLockedOrSampleArticlesAllowed        := True,  // Gesperrte-/Auslauf-/Muster-Artikel erlauben

      bAllowInternalMemo                                := True,  // Ggf. gesetztes internes Memo erlauben

      bPurchaseArticlesAllowed                          := True,  // EK-Artikel erlauben

      bAllowDoubleArticleNoCommissCombination           := True,  // Doppelte Dispositionseinträge mit gleicher Artikelnummer und Kommission erlauben

      bTakeOverArticleData                              := False, // Daten des Artikels nochmals neu laden (z.B. Memo, Produktionsabteilung).

                                                                  // Sollte gesetzt werden wenn zwischen Anlage und Post der Arikel verändert wurde.

      oProdDispoBC.CbDispoPost(oProdDispoBO,

                               bDiscontinuedLockedOrSampleArticlesAllowed,

                               bAllowInternalMemo,

                               bPurchaseArticlesAllowed,

                               bAllowDoubleArticleNoCommissCombination,

                               bTakeOverArticleData),

      oDM.CbTransaction_Commit(),

      writeln('Anlage erfolgreich' + CRLF +

              'Artikelnummer:     ' + oProdDispoBO.CbArticleNo + CRLF +

              'Kommissionsnummer: ' + oProdDispoBO.CbCommiss + CRLF +

              'Dispositions-ID:   ' + ToString(oProdDispoBO.CbID) + CRLF + CRLF),

   always

      oDM.CbTransaction_TryRollback(),

   stopseq,

   // Soeben angelegten Datensatz bearbeiten

   oDM.CbTransaction_Begin(),

   startseq

      oProdDispoBC.CbDispoEdit(oProdDispoBO),

      // Menge auf 100 Stk. erhöhen und Produktionsabteilung eintragen

      oProdDispoBO.CbQuantity   := 100,

      oProdDispoBO.CbProdDepart := 'WRK',

      bTakeOverArticleData := True, // Daten des Artikels neu laden

      oProdDispoBC.CbDispoPost(oProdDispoBO, True, True, True, True, bTakeOverArticleData),

      oDM.CbTransaction_Commit(),

      writeln('Änderung erfolgreich' + CRLF +

              'Artikelnummer:        ' + oProdDispoBO.CbArticleNo + CRLF +

              'Menge:                ' + ToString(oProdDispoBO.CbQuantity) + CRLF +

              'Produktionsabteilung: ' + oProdDispoBO.CbProdDepart + CRLF + CRLF),

   always

      oDM.CbTransaction_TryRollback(),

   stopseq,

   // Soeben angelegten Datensatz wieder löschen

   oDM.CbTransaction_Begin(),

   startseq

      oProdDispoBC.CbDispoDelete(oProdDispoBO),

      oDM.CbTransaction_Commit(),

      writeln('Löschung erfolgreich' + CRLF + CRLF),

   always

      oDM.CbTransaction_TryRollback(),

   stopseq,

   //***************************************************************************

   // Test für die Übertragung einer Disposition in die Produktionsaufträge

   //***************************************************************************

   oDM.CbTransaction_Begin(),

   startseq

      // Anlegen eines neuen Dispositions-Eintrags

      oProdDispoBC.CbDispoCreate(oProdDispoBO, cArticleNo),

      // Menge setzen

      oProdDispoBO.CbQuantity := 1,

      oProdDispoBO.CbCommiss  := 'TESTPRODORDER',

      // Speichern des Eintrags

      oProdDispoBC.CbDispoPost(oProdDispoBO, True, True, True, True, False),

      oDM.CbTransaction_Commit(),

   always

      oDM.CbTransaction_TryRollback(),

   stopseq,

   // Soeben angelegten Eintrag freigeben. Dies muss außerhalb einer eigenen

   // Transaktion geschehen

   oProdDispoBC.CbDispoRelease(oProdDispoBO, True),

   writeln('Freigabe erfolgreich' + CRLF +

           'Freigabestatus: '     + ToString(oProdDispoBO.CbIsReleased) + CRLF + CRLF),

   // Uebertragung der Disposition in die Produktionsaufträge muss außerhalb

   // einer eigenen Transaktion geschehen

   //

   // ACHTUNG: Hierbei entsteht beim Ausführen ein echter Produktionsauftrag

   //          welcher nach dem Test wieder manuell gelöscht werden sollte.

   oProdDispoBC.CbDispoToProductionOrder(oProdDispoBo),

   writeln('Auslösen eines Produktionseintrags erfolgreich'),

end,

//******************************************************************************

// Erzeugt die benötigten Objekte und weist ihnen das übergebene Datenmodul zu

// @Result: null

//******************************************************************************

function CreateObjects(oDM, oProdDispoBC:R, oProdDispoPlanBO:R, oProdDispoBO:R)

   // BusinessController und BusinessObjekte erzeugen

   oProdDispoBC     := CreateObject('TBeProductionDispositionBC',         'PRODDISPOBC',     oDM),

   oProdDispoPlanBO := CreateObject('TBeProductionDispositionPlanningBO', 'PRODDISPOPLANBO', oDM),

   oProdDispoBO     := CreateObject('TBeProductionDispositionBO',         'PRODDISPOBO',     oDM),

   // Allen Objekten das gleiche Datenmodul zuweisen, damit sämtliche Änderungen

   // innerhalb der gleichen Transaktion geschehen

   oProdDispoBC.CbDataModule     := oDM,

   oProdDispoPlanBO.CbDataModule := oDM,

   oProdDispoBO.CbDataModule     := oDM,

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   m_oDM := CreateObject('TBeDBGet'),

   startseq

      CreateObjects(m_oDM, m_oProdDispoBC, m_oProdDispoPlanBO, m_oProdDispoBO),

      DispositionPlanningExample(m_oDM),

      DispositionExample(m_oDM, m_oProdDispoBC, m_oProdDispoBO, m_cArticleNo),

   always

      DestroyObject(m_oDM),

   stopseq,

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + crlf +

              GetErrorText() + crlf + crlf +

              DebugArr(GetErrorStack(true)), mtError),

stopseq,

Siehe auch:

TBePurchaseDispositionBO

TBeProductionMaterialAvailabilityBusinessController

TBeProductionPartListBO

TBeProductionOrderBusinessController

TBeProductionDispositionPlanningBO

TBePurchaseDispositionPlanningBO

TBeProductionOrderBO

TBePurchaseDispositionBC


TBeProductionDispositionBO

TBeProductionDispositionBO

Die Klasse TBeProductionDispositionBO kapselt den Zugriff auf die Tabelle Dab320 - Einkauf/Produkt. Dispositionen.

Eigenschaften
CbAutoInc:N | Auto-Increment-Feld (Dab320:AUTOINC)
CbCommiss:C | Kommissionsnummer (Dab320:KOMMISS
CbTimeLimit:C | Termin (Dab320:TERMIN)
CbTimeLimitIndex:C | Termin-Index (Dab320:TERM_INDEX)
CbArticleNo:C | Artikel-Nr (Dab320:ARTNR)
CbQuantity:N | Dispo-Menge (Dab320:MENGE)
CbQuantPurch:N | Dispo-Menge in ME Einkauf (Dab320:MENGE_EK)
CbPkgUnitNo:N | Kennzeichen für Mengen-Einheit (Dab320:VE_NR)
CbPriceUnitPurch:N | Preis-Einheit EK (Dab320:PE)
CbUnitPurchase:N | ME Einkauf (Dab320:ME_EK)
CbUnitConvPrU:N | Faktor ME -> ME_PE (Dab320:ME_UMR_PE)
CbImpersAccount:N | Sachkonto (Dab320:SACHKONTO)
CbCostCenter:N | Kostenstelle (Dab320:KOSTENST)
CbDepart:N | Abteilungs-Nr (Dab320:ABTEILUNG)
CbProdDepart:C | Produktions-Abteilung (Dab320:PROD_ABT)
CbMemo:C | Zusatz-Text (Dab320:MEMO)
CbIsReleased:L | Freigabe-Status: True = Freigegeben

Methoden

CbGoToAutoInc()

Methode zum Positionieren des BO's unter verwendung der AutoInc

aAutoInc:N

AutoInc (Dab320:AUTOINC)

CbInsert

Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden.

CbEdit

Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden.

CbCancel

Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden.

CbPost

Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden.

CbDelete

Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBeProductionDispositionBC verwenden.

Beispiel

// Aktuell nur lesender Zugriff.

// Funktionen des TBeProductionDispositionBC für die Disposition sind noch nicht freigegeben.

Siehe auch:

TBeProductionMaterialAvailabilityBusinessController

TBeProductionPartListBO

TBeProductionOrderBusinessController

TBeProductionDispositionPlanningBO

TBeProductionOrderBO

TBeProductionDispositionBC


TBeProductionMaterialAvailabilityBusinessController

TBeProductionMaterialAvailabilityBusinessController

Die Klasse TBeProductionMaterialAvailabilityBusinessController kapselt Funktionen um die Material-Verfügbarkeit

bei Fertigungsaufträgen in der Produktion berechnen zu können.

Eigenschaften:

Tabellen und Felder
CbDataModule:N | Zu verwendendes Datenmodul. Muss zugewiesen werden.
CbOnlyOrderNo:C | Erlaubt das setzen einer Fertigungs-Auftrags-Nummer. Ist dieser Wert gesetzt, wird eine Berechnung für Material-Verfügbarkeit über Calc() oder CalcAndWriteBack() nur für diesen Auftrag durchgeführt. (Default = leer => Berechnung für alle Fertigungsaufträge)
CbCalcPacked:L | Bei True werden bereits kommissionierte Fertigungsaufträge bei einer Berechnung berücksichtigt. (Default = False).
CbCalcMissing:L | Bestimmt ob trotz Fehlteilen mit der Fertigung begonnen werden darf. (Default = False)

Funktionen und Methoden

CalcAndWriteBack()

Diese Methode berechnet die Material-Verfügbarkeiten in Abhängigkeit der gesetzten Werte für z. B. CbOnlyOrderNo und schreibt die berechneten Werte zurück in die DAB035

Calc()

Diese Methode führt genau wie CalcAndWriteBack() eine Berechnung der Material-Verfügbarkeiten durch jedoch werden die Werte hier nicht in die Datenbank zurückgeschrieben. Stattdessen wird das Ergebnis zurückgegeben.

Das Ergebnis kann hierbei ein String oder ein Array sein.

Wird vor der Berechnung CbOnlyOrderNo auf einen gültigen Fertigungsauftrag gesetzt so liefert die Funktion nur die Verfügbarkeit für diesen Auftrag zurück.

Wird kein Fertigungsauftrag angegeben so liefert die Funktion ein Array mit folgender Struktur:

[ [FA-Nummer + SplitNo, Priorität, Verfügbarkeit], [... , ... , ...] ]

Mögliche Werte für die Verfügbarkeit sind:

'J' | Material ist komplett verfügbar
'E' | Material ist komplett verfügbar, wenn Aufträge mit höherer Prio oder gleicher Prio und früherem Termin nicht. (E steht für Einzeln betrachtet)
'T' | Teilweise produzierbar (u. U. aber nur "möglich")
'N' | Nicht produzierbar

Verfügbare Ereignisse

OnProgress

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Dieses Beispiel zeigt wie der

//               ProductionMaterialAvailabilityBusinessController verwendet

//               werden kann.

//##############################################################################

//##############################################################################

| oProductionMABC, oDM |

oDM := CreateObject('TBeDBGet'),

startseq

   // Erzeugen des BusinessControllers mit oDM als Owner -> Kein Zerstören notwendig

   oProductionMABC := CreateObject('TBeProductionMaterialAvailabilityBusinessController', 'TESTPMABC', oDM),

   oProductionMABC.CbDataModule := oDM, // Zu verwendendes DatenModul zuweisen

                                        // ohne eine Zuweisung werfen die

                                        // Funktionen Calc() und

                                        // CalcAndWriteBack() eine Exception

   // Setzen der gewünschten Einstellungen

   oProductionMABC.CbOnlyOrderNo := '600005', // Auftragsnummer für Einzelberechnung

   oProductionMABC.CbCalcPacked  := True,     // Bereits kommissionierte FA berücksichtigen

   oProductionMABC.CbCalcMissing := True,     // Es darf trotz Fehlteilen begonnen werden

   // Die berechnungen Calc() oder CalcAndWriteBack() erfordern eine aktive Transaktion.

   DBStartTrans(oDM.ADSConnection),

   startseq

      // Berechnung für einzelnen FA ohne das Ergebnis in die DB zu schreiben

      writeln('Berechneter Wert', oProductionMABC.Calc()),

      // Nochmal berechnen und diesmal in die DB schreiben lassen (DAB035)

      oProductionMABC.CalcAndWriteBack(),

      // CbOnlyOrderNo leeren -> Berechnung für alle Fertigungsaufträge

      oProductionMABC.CbOnlyOrderNo := '',

      // Berechnung für mehrere FA ohne DB-Änderungen

      writeln('Berechnete Werte: ' + ArrToStr(oProductionMABC.Calc())),

      // Da dies nur ein Beispiel sein soll werden sämtliche Aktionen auf der

      // Datenbank rückgewickelt

      DBRollback(oDM.ADSConnection),

//      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollback(oDM.ADSConnection),

      endif,

   stopseq,

always

   DestroyObject(oDM),

stopseq,

Siehe auch:

TBeProjectBusinessController

TBeAbsenceBusinessController

TBeInventoryBusinessController

TBeVatBusinessController

TBeContactBusinessController


TBeProductionOrderBO

TBeProductionOrderBO

Die Klasse TBeProductionOrderBO kapselt den Zugriff auf die Dab035 - Einkauf/Produktion Bestellrückstände.

Dieses BO beinhaltet hierbei nur die für die Produktion relevanten Informationen.

Für den Einkauf steht das TBePurchaseOrderBO zur Verfügung.

Achtung:

Dieses BO steht im Codeblock derzeit nur für die Verwendung innerhalb der "bei Übertragung von BO-Daten"-Events zur Verfügung.

In allen anderen Situationen darf das Business Objekt nicht verwendet werden.

Eigenschaften:

Eigenschaften
CbOrderPosNo:C | Auftragspositionsnummer (Dab035:BESTPOSNR)
CbDate:D | Datum der Bestellung (Dab035:DATUM)
CbLastSupplierOverdueLetterDate:D | Datum letzte Lieferanmahnung (Dab035:LMDATUM)
CbArticleNo:C | Artikelnummer (Dab035:ARTNR)
CbSupplierNo:N | Lieferanten-Nummer (Dab035:LIEFNNR)
CbCommiss:C | Kommissions-Nummer (Dab035:KOMMISS)
CbTimeLimit:C | Liefertermin (Dab035:TERMIN)
CbTimeLimitIndex:C | Termin-Index (intern) (Dab035:TERM_INDEX)
CbDebitTimeLimit:C | Soll-/Wunschtermin (Dab035:SOLLTERMIN)
CbReleaseArrears:C | Termin für nächsten Teilabruf (Dab035:TERMIN_AB)
CbTimeLimitsFinished:C | Fertigstellungs-Termin-Split (Dab035:TERMIN_FE)
CbOrdFetchNo:N | Bestell-Abruf-Nummer (Dab035:BANUMMER)
CbOrderSplitCounter:N | Split-Zähler (Produktions-Aufträge) (Dab035:SPLIT_NR)
CbCustomerOrderPosNo:C | Zu Auftargs-Position in Dab055 (Dab035:APNUMMER)
CbCurrencyID:N | Einkaufs-Wähhrung (Dab035:WAEKZ)
CbForeignCurrencyRate:N | Einkaufs-Kurs (Dab035:FW_KURS)
CbPriceUnitPurchase:N | Preis-Einheit EK (Dab035:PE)
CbUnitPurchase:C | ME Einkauf (Dab035:ME_EK)
CbUnitFactorPurchase:N | Faktor ME_EK -> ME (Dab035:ME_UMR)
CbPriceUnitFactorSales:N | Faktor ME -> ME_PE (Dab035:ME_UMR_PE)
CbPurchasePriceForCurrency:N | Einkaufs-Preis (Dab035:SOEK)
CbDiscount1:N | Rabatt % 1 (Dab035:RABATT1)
CbDiscount2:N | Rabatt % 2 (Dab035:RABATT2)
CbDiscount3:N | Rabatt % 3 (Dab035:RABATT3)
CbQuantity:N | Menge (Dab035:MENGE)
CbDebitQuantity:N | Soll-Menge (Dab035:SOLLMENGE)
CbQuantityPurchase:N | Bestellmenge ME_EK (Dab035:MENGE_EK)
CbQuantityStockReceipt:N | Menge im Wareneingang in ME_EK (Dab035:MENGE_WE)
CbPackagingUnit:N | KZ Menge-Einheit (Dab035:VE_NR)
CbImpersonalAccount:N | Sachkonto (Dab035:SACHKONTO)
CbCostCenter:N | Kostenstelle (Dab035:KOSTENST)
CbCustomerOrderNo:N | Kunden-Auftrag (Dab035:ANUMMER)
CbCustomerOrderNoSync:C | Weiterverrechnung Kunden-Auftrag (Dab035:ANUMMER_X)
CbTimeLimitStart:C | Start-Termin Fertigung (Dab035:TERM_START)
CbTimeLimitStartIndex:C | Index-Feld Start-Termin Fertigung (Dab035:TERM_STIND)
CbProductionLock:L | Produktions-Sperre (Dab035:PROD_SPERR)
CbIsFileCardPrinted:L | Arbeits-Karte gedruckt (Dab035:AKA)
CbFileCardLastPartNo:N | Letzte Nr. des Teilauftrags (Dab035:AKA_NRTEIL)
CbIsPartFileCardPrinted:L | Teilauftrag gedruckt (Dab035:AKA_TEIL)
CbIsProductionActive:L | Auftrag in Bearbeitung (Dab035:AKA_AKTIV)
CbMaterialAvailability:C | Material-Verfügbarkeit Fertig. (Dab035:TEILE_V)
CbPriority:N | Priorität in Fertigungsrückständen (Dab035:PRIORI)
CbLocation:N | Standort (Dab035:STANDORT)
CbDepartment:N | Abteilungs-Nr. (Dab035:ABTEILUNG)
CbProdDepartment:C | Produktions-Abteilung (Dab035:PROD_ABT)
CbPossibleProductionQuantity:N | Produzierbare Menge (Materialverfügbarkeit) (Dab035:PROD_MENGE)
CbPrintPicList:L | Materialliste im Druckstapel (Dab035:PICKLI_DRU)
CbPicList:C | Materialliste (Dab035:PICKLISTE)
CbPartListChanged:C | Stamm-Stückliste geändert (Dab035:SL_AEND)
CbSerialNumbers:C | Seriennummern-Liste (Dab035:SNUM_LIST)
CbCapaPriority:N | Priorität Kapazitäts-Analyse (Dab035:KAP_PRIORI)
CbCapaLock:L | Sperre Kapazitäts-Analyse (Dab035:KAP_SPERRE)
CbCapaScheduleMode:N | Terminierungsmodus Kapazitätsanalyse (Dab035:KAP_TRMMOD)
CbCapaExecTimeMaxExceed:N | Maximale Überschreitung der Minimal-DLZ (Dab035:KAP_MAXMOV)
CbCapaDeltaFactor:N | Typ des Zeitabstands (Dab035:KAP_DFAKT)
CbCapaDelta:N | Zeitabstand Vorgänge zu Termin (Dab035:KAP_DELTA)
CbMemo:C | Langtext (Dab035:MEMO)
CbLastChanged:D | Letztes Änderungs-Datum (Dab035:BUCH_DATUM)
CbSubsidiarySend:N | ADK: An Zentrale gesendet (Dab035:FIL_SEND)
CbSubsidiaryPackageNo:N | ADK: Paekt-Nr. der Sendung (Dab035:FIL_PKG)
CbProjectID:N | Bezug auf ein Projekt (Dab035:PRJ_ID)

Methoden
CbInsert | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbEdit | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbCancel | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbPost | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbDelete | Diese Methode ist für dieses Business-Objekt nicht verfügbar

Verfügbare Ereignisse

Siehe auch:

TBeProductionMaterialAvailabilityBusinessController

TBeProductionPartListBO

TBeProductionOrderBusinessController

TBeProductionDispositionPlanningBO


TBeProductionOrderBusinessController

TBeProductionOrderBusinessController

Die Klasse TBeProductionOrderBusinessController stellt Funktionen und Methoden für die Veränderung von Produktionsaufträgen bereit.

Eigenschaften:

Funktionen und Methoden

CbChangeReservedQuant()

Mit dieser Methode ist es möglich die Reservierungsmenge (Dab240:RUECKS_PR) einer kommissionierten Produktionsauftrags-Position zu verändern.

Kommissioniert: Material-Buchung (B_DATUM) eingetragen und noch keine Fertigstellung (F_DATUM)

aProductionPosBo:O

Auf gewünschte Auftragsposition positioniertes BusinessObject der Dab240 (TBeProductionPartListBO).

Das Objekt darf sich nicht in Bearbeitung befinden und muss das selbe Daten-Modul wie der BusinessController verwenden.

aNewQuantity:N

Gewünschte neue Reservierungsmenge für die Auftragsposition.

aNewPriorityQuantity:N

Gewünschte neue Prioritäts-Menge für die Auftragsposition

Beispiel

//******************************************************************************

// ProductionOrderBusinessController verwenden um Reservierungen für

// Auftragspositionen zu verändern

//******************************************************************************

function ChangeReservedQuantity(cOrderPosNo, nNewReservedQuantity)

| oDM, oProdOrdBC, oProdPartListBO, oDab010, oDAB410 |

   oDM := CreateObject('TBeDBGet', 'PRODRESCHGDM'),

   startseq

      oProdOrdBC                   := CreateObject('TBeProductionOrderBusinessController', 'PRODORDERBC', oDM),

      oProdPartListBO              := CreateObject('TBeProductionPartListBO',              'PRODPOSBO',   oDM),

      oProdOrdBC.CbDataModule      := oDM,

      oProdPartListBo.CbDataModule := oDM,

      oDab010 := DBGetTable(oDM, waDab010),

      oDAB410 := DBGetTable(oDM, waDab410),

      oProdPartListBo.CbGoToProdOrderPosNo(cOrderPosNo),

      writeln(oProdPartListBO.CbProdOrderPosNo, oProdPartListBO.CbReserved),

      DbStartTrans(oDM.ADSConnection),

      startseq

         // Browser ggf. noch selbst definieren oder hier einfach entfernen

//         Browse(, oDAB010,                 '@D010BRW'),

//         Browse(, oProdPartListBO.CbTable, '@D240BRW'),

//         Browse(, oDAB410,                 '@D410BRW'),

         oProdOrdBC.CbChangeReservedQuant(oProdPartListBO, nNewReservedQuantity, oProdPartListBO.CbPriorityQuantity ),

//         Browse(, oDAB010,                 '@D010BRW'),

//         Browse(, oProdPartListBO.CbTable, '@D240BRW'),

//         Browse(, oDAB410,                 '@D410BRW'),

         DbCommit(oDM.ADSConnection),

      always

         if DbInTrans(oDM.ADSConnection) then

            DbRollback(oDM.ADSConnection),

         endif,

      stopseq,

   always

      DestroyObject(oDM),

   stopseq,

end,

// Test-Aufrufe

ChangeReservedQuantity('600027  003', 1000.65),

ChangeReservedQuantity('600027  003', 1550),

Siehe auch:

TBeProductionMaterialAvailabilityBusinessController

TBeProductionPartListBO


TBeProductionPartListBO

TBeProductionPartListBO

Die Klasse TBeProductionPartListBO kapselt Eigenschaften und Funktionen von Auftragsstücklisten der Produktion.

Die Klasse ist aktuell nur Read-Only!

Verfügbar ab Version 6.0.62.138

Eigenschaften:

Funktionen und Methoden
CbProdOrderPosNo:C | Bestell/Pos./Lfd.Nr 6+2+3; (entspricht DAB240:B_POS_LFD)
CbMainArticleNo:C | Aritkel-Nr Fertigteil; (entspricht DAB240:ARTNR1)
CbArticleNo:C | Artikel-Nr Standardbauteil; (entspricht DAB240:ARTNR2)
CbReplacement_ArticleNo_1:C | Artikel-Nr Ersatzbauteil; (entspricht DAB240:ARTNR_E)
CbReplacement_ArticleNo_2:C | Artikel-Nr Ersatzbauteil + 1; (entspricht DAB240:ARTNR_E1)
CbReplacement_ArticleNo_3:C | Artikel-Nr Ersatzbauteil + 2; (entspricht DAB240:ARTNR_E2)
CbReplacement_ArticleNo_4:C | Artikel-Nr Ersatzbauteil + 3; (entspricht DAB240:ARTNR_E3)
CbReplacement_Convert_1:N | Umrechnungs-Faktor für Ersatz-Art. +1; (entspricht DAB240:UMR_E1)
CbReplacement_Convert_2:N | Umrechnungs-Faktor für Ersatz-Art. + 2; (entspricht DAB240:UMR_E1)
CbReplacement_Convert_3:N | Umrechnungs-Faktor für Ersatz-Art. + 3; (entspricht DAB240:UMR_E1)
CbPosNo:C | Stücklisten-Positions-Nummer; (entspricht DAB240:POSNR)
CbProdDepartment:C | Produkt.Abteilung (abweichend); (entspricht DAB240:PROD_ABT)
CbOperationPartID:N | Zuordnung zu Arbeitsgang; (entspricht DAB240:ARBG_TEIL)
CbOperationMasterID:N | Vorhergehender Arbeitsgang; (entspricht DAB240:ARBG_ID)
CbOperationDelta:N | Zeitabstand zum vorhergehenden Arbeitsgang. (entspricht DAB240:ARBG_DELTA)
CbOperationDeltaFactor:N | Einheit Zeitabstand; (entspricht DAB240:ARBG_DFAKT)
CbOperationRelation:C | Beziehung zum vorhergehenden Arbeitsgang; (entspricht DAB240:ARBG_REL)
CbMinimumQuantity:N | Mindestmenge; (entspricht DAB240:MIND_MENGE)
CbParallelizationQuantity:N | Parallelisierungsmenge; (entspricht DAB240:PARA_MENGE)
CbSetupOrProductionTime:C | Rüstzeit/Stückzeit; (entspricht DAB240:R_S)
CbTool:L | Werkzeug-Position; (entspricht DAB240:WERKZEUG)
CbTimeRecord_Factor:N | Multiplikator Arbeitsgang-Menge; (entspricht DAB240:BDE_FAKTOR)
CbToolCount:N | Anzahl Werkzeuge; (entspricht DAB240:ANZ_WERKZG)
CbToolQuantity:N | Fertigungsmenge je Werkzeug; (entspricht DAB240:MEN_WERKZG)
CbArticleType:C | Artikel-Typ; (entspricht DAB240:ARTTYP)
CbDebit:N | Soll-Menge / Verbrauch; (entspricht DAB240:SOLL)
CbFixDebit:N | Soll-Menge / Fest; (entspricht DAB240:FIX_SOLL)
CbRejects:N | Soll-Ausschuss in %; (entspricht DAB240:AUSSCHUSS)
CbCurrent:N | Ist-Menge / Verbrauch; (entspricht DAB240:IST)
CbCurrRejects:N | Ist-Menge Ausschuss; (entspricht DAB240:IST_AUSSCH)
CbCurrentBuild:N | Ist-Menge ausgebucht (LAGERP); (entspricht DAB240:IST_AUSGEB)
CbYieldQuantity:N | Gefertigte Menge des Arbeitsganges; (entspricht DAB240:MENGE)
CbScrapQuantity:N | Gerfertigter Arbeitsgang-Ausschuss; (entspricht DAB240:MENGE_AUSS)
CbCostValueSum:N | Einstandswert der Buchung; (entspricht DAB240:EK_WERT)
CbCostValueSumPostedToStock:N | Einstandswert ausgebucht; (entspricht DAB240:EK_WERT_AG)
CbDimensionQuantity:N | Stückzahl (bei Dimensionen); (entspricht DAB240:DIM_MENGE)
CbDimension_Length:N | Dimension - Länge; (entspricht DAB240:DIM_1)
CbDimension_Width:N | Dimension - Breite; (entspricht DAB240:DIM_2)
CbDimension_Height:N | Dimension - Höhe; (entspricht DAB240:DIM_3)
CbBackQuantity:N | Reservierte Menge; (entspricht DAB240:RUECKS_PR)
CbPriorityQuantity:N | Fest gebundene Menge; (entspricht DAB240:PRIOR_PR)
CbOrderAssignQuant:N | Auftrags-spezifische Zugangsmenge; (entspricht DAB240:M2_MENGE)
CbReserved:N | Umbuchung in Produktionslager; (entspricht DAB240:RESERV)
CbPurchPrice:N | Einkaufs-Preis; (entspricht DAB240:EKP)
CbPriceUnit:N | Preis-Einheit; (entspricht DAB240:PE)
CbSurcharge:N | Zuschlag je Mengen-Einheit; (entspricht DAB240:ZUSCHLAG)
CbReplacement_PurchPrice:N | Einkaufs-Preis Ersatzbauteil; (entspricht DAB240:EKP_E)
CbReplacement_PriceUnit:N | Preis-Einheit Ersatzbauteil; (entspricht DAB240:PE_E)
CbReplacement_Surcharge:N | Zuschlag je Mengen-Einheit Ersatzbauteil; (entspricht DAB240:ZUSCHLAG_E)
CbStore:N | Lager-Nummer; (entspricht DAB240:LAGER)
CbStorePlaces:C | Lager-Orte / Mengen; (entspricht DAB240:LAG_ORT)
CbLastChanged:D | Buchdatum; (entspricht DAB240:BUCH_DATUM)
CbInvoiceDate:D | Datum Material-Reservierung; (entspricht DAB240:R_DATUM)
CbAccountDate:D | Datum Material-Umbuchung -> P; (entspricht DAB240:B_DATUM)
CbProductionStartDate:D | Datum Produktionsbeginn; (entspricht DAB240:S_DATUM)
CbProductionFinishDate:D | Datum Fertigstellung; (entspricht DAB240:P_DATUM)
CbDispoNo:C | Dispositions-Nummer der Material-Buchung; (entspricht DAB240:DISPONR)
CbSupplierNo:N | Zulieferer-Nummer; (entspricht DAB240:LINR)
CbForeignPurchPrice:N | Einkaufs-Preis; (entspricht DAB240:EKPFW)
CbPriceUnitPurch:N | Einkaufs-Preiseinheit; (entspricht DAB240:PE_EK)
CbCurrencyID:N | Einkaufs-Währung; (entspricht DAB240:WAEKZ)
CbMemo:C | Arbeitstext; (entspricht DAB240:MEMO)
CbLocation:N | Standort; (entspricht DAB240:STANDORT)
CbPartListID:N | Stücklisten-ID; (entspricht DAB240:ID)

Funktionen und Methoden

CbGoToProdOrderPosNo(aProdOrderPosNo:C)

Positioniert auf eine Nummer die sich aus Bestell-, Positions- und Lieferanten-Nummer zur eindeutigen Indentifizierung zusammensetzt

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Kleines Testprogramm für die Funktionalität

//               des BeProductionPartListBusinessObject

// Hinweis:      Aktuell nur Read-Only!

//##############################################################################

//##############################################################################

|

   oDab240, oProductionPartListBO, m_cFirstArtNr, m_cSecondArtNr,

   m_cFirstB_Pos_LfdNo, m_cSecondB_Pos_LfdNo

|

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_cFirstArtNr        := 'TESTART1',

m_cSecondArtNr       := 'TESTART2',

m_cFirstB_Pos_LfdNo  := '123666 321',

m_cSecondB_Pos_LfdNo := '123666 322',

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Erstellen

//******************************************************************************

function WriteProductionPosition()

   BeginSuspend(oDab240),

   startseq

      DBAppend(oDab240),

      oDab240:ARTNR1    := m_cFirstArtNr,

      oDab240:B_POS_LFD := m_cFirstB_Pos_LfdNo,

      DBPost(oDab240),

      DBAppend(oDab240),

      oDab240:ARTNR1    := m_cSecondArtNr,

      oDab240:B_POS_LFD := m_cSecondB_Pos_LfdNo,

      DBPost(oDab240),

   always

      EndSuspend(oDab240),

   stopseq,

end,

//******************************************************************************

// Löschen

//******************************************************************************

function DeleteProductionPosition()

   BeginSuspend(oDab240),

   startseq

      DBGoTo(m_cFirstB_Pos_LfdNo, oDab240),

      DBDelete(oDab240),

      DBGoTo(m_cSecondB_Pos_LfdNo, oDab240),

      DBDelete(oDab240),

   always

      EndSuspend(oDab240),

   stopseq,

end,

//******************************************************************************

// Objekte erstellen

//******************************************************************************

function GetObjects()

   oDab240               := DBOpen(waDab240),

   oProductionPartListBO := CreateObject("TBeProductionPartListBO"),

end,

//******************************************************************************

// Objekte freigeben

//******************************************************************************

function DestroyObjects()

   DeleteProductionPosition(),

   DestroyObject(oDab240),

   DestroyObject(oProductionPartListBO),

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   GetObjects(),

   startseq

      // Zwei Einträge erstellen und Überprüfen ...

      WriteProductionPosition(),

      oProductionPartListBO.CbGoToProdOrderPosNo(m_cFirstB_Pos_LfdNo),

      if (oProductionPartListBO.CbMainArticleNo = m_cFirstArtNr) and

         (oProductionPartListBO.CbMainArticleNo <> m_cSecondArtNr) then

         WriteLn("Testartikel 1 mit der Artikel-Nummer" + CRLF +

                 oProductionPartListBO.CbMainArticleNo + CRLF +

                 "gefunden!"),

      endif,

      oProductionPartListBO.CbGoToProdOrderPosNo(m_cSecondB_Pos_LfdNo),

      if (oProductionPartListBO.CbMainArticleNo <> m_cFirstArtNr) and

         (oProductionPartListBO.CbMainArticleNo = m_cSecondArtNr) then

         WriteLn("Testartikel 2 mit der Artikel-Nummer" + CRLF +

                 oProductionPartListBO.CbMainArticleNo + CRLF +

                 "gefunden!"),

      endif,

   always

      // Einträge wieder löschen

      DestroyObjects(),

   stopseq,

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + crlf +

              GetErrorText() + crlf + crlf +

              DebugArr(GetErrorStack(true)), mtError),

stopseq,

Siehe auch:

TBeCbCustomBusinessObject

TBeProductionPartListBO - BusinessObject für Auftragsstücklisten Produktion


TBeProjectBO

TBeProjectBo

Die Klasse TBeProjectBo kapselt Eigenschaften und Funktionen eines Projekts.

Eigenschaften:

Eigenschaften

CbRelationShips:O

Objekt zur Verwaltung der Verknüpfungen des Projekts (TCbBeBORelationShips)

Tabellen und Felder
CbDescription:C | Projekt-Bezeichnung (entspricht DABPRJ:BEZ)
CbComment:C | Beschreibung (entspricht DABPRJ:BESCHREIB)
CbType:N | Projekt-Typ (entspricht DABPRJ:TYP)
CbStatus:N | Status (entspricht DABPRJ:STATUS)
CbPriority:N | Priorität (entspricht DABPRJ:PRIORITAET)
CbAuthority:C | Verantwortlicher Benutzer (entspricht DABPRJ:VERANTWORT)
CbCustomerNo:N | Kundenzuordnung des Projekts (entspricht DABPRJ:KDNR)
CbStartDate:D | Start-Datum des Projekts (entspricht DABPRJ:BEGINN)
CbEndDate:D | End-Datum des Projekts (entspricht DABPRJ:ENDE)
CbSearchFulltext:C | Volltext-Suche (entspricht DABPRJ:SUCHE) wird beim Schreibzugriff für FTS-Index optimiert

Tabellen und Felder
CbDescription:C | Projekt-Bezeichnung (entspricht DABPRJ:BEZ)
CbComment:C | Beschreibung (entspricht DABPRJ:BESCHREIB)
CbType:N | Projekt-Typ (entspricht DABPRJ:TYP)
CbStatus:N | Status (entspricht DABPRJ:STATUS)
CbPriority:N | Priorität (entspricht DABPRJ:PRIORITAET)
CbAuthority:C | Verantwortlicher Benutzer (entspricht DABPRJ:VERANTWORT)
CbCustomerNo:N | Kundenzuordnung des Projekts (entspricht DABPRJ:KDNR)
CbStartDate:D | Start-Datum des Projekts (entspricht DABPRJ:BEGINN)
CbEndDate:D | End-Datum des Projekts (entspricht DABPRJ:ENDE)
CbIndicatorTotal:N | Status-Ampel "Gesamt" (entspricht DABPRJ:SA_GESAMT)
CbIndicatorTime:N | Status-Ampel "Zeit/Termin" (entspricht DABPRJ:SA_ZEIT)
CbIndicatorExpense:N | Status-Ampel "Aufwand/Kosten" (entspricht DABPRJ:SA_AUFWAND)
CbIndicatorResult:N | Status-Ampel "Ergebnis/Leistung" (entspricht DABPRJ:SA_ERGBNIS)
CbSearchFulltext:C | Volltext-Suche (entspricht DABPRJ:SUCHE) wird beim Schreibzugriff für FTS-Index optimiert

Funktionen und Methoden
CbEdit() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbInsert() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbDelete() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbCancel() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbPost() | Diese Methode ist für diese Business Objekt nicht verfügbar.

Verfügbare Ereignisse

Berchnung Suchtext für Volltextsuche

Berechnung der Info-Caption

nach der Neuanlage

vor dem Speichern

vor dem Löschen

bei Kopie

Beispiel

//******************************************************************************

//******************************************************************************

// Neues Projekt anlegen

//******************************************************************************

//******************************************************************************

|oProjectBO|

oProjectBO := CreateObject('TBeProjectBO'),

startseq

  oProjectBO.CBInsert(),

  oProjectBO.CbDescription := 'Test-Projekt von ' + DateTimeToStr(Now()),

  oProjectBO.CbComment     := 'Das ist ein kleines Test-Projekt',

  oProjectBO.CbStartDate   := Date() + 14,

  oProjectBO.CbEndDate     := oProjectBO.CbStartDate + 7,

  oProjectBO.CBPost(),

  writeln(oProjectBO.CbID),

always

  DestroyObject(oProjectBO),

stopseq,

Siehe auch:

Business Object Event "Berechnung Suchtext für Volltextsuche"

Business Object Event "Nach der Neuanlage"

Business Object Event "Vor dem Speichern"

Business Object Event "Vor dem Löschen"

Business Object Event "Berechnung der Info-Caption"

TBeProjectTaskBO

TBeProjectTaskEffortBO

TBePostingBO

TBeProjectBusinessController

TBeCbCustomBusinessObject

Business Object Event "bei Kopie"

TBeBoProjectDuplicateInfo

TBeProjectSalesProfitBO


TBeProjectBusinessController

TBeProjectBusinessController

Die Klasse TBeProjectBusinessController stellt Funktionen und Methoden für die Projekt-Verwaltung bereit.

Jeder Vorgang ist einem Projekt zugeordnet, jedes Projekt kann "n" Vorgänge haben.

Konstanten:

cPMResHourPrec = 4 Nachkomma-Stellen für Stunden Genauigkeit

cPMResMinutePrec = 2 Nachkomma-Stellen für Minuten Genauigkeit

Eigenschaften:

Eigenschaften

CbDataModule:O

Daten-Modul des Controllers.

Für alle Funktionen und Methoden die Daten verändern / erzeugen, muss auf diesem Daten-Modul eine Transaktion gestartet werden

Funktionen und Methoden

CbInsertTaskAfterCurrent():N

Fügt einen neuen Vorgang in den Vorgangs-Baum ein.

Der neue Vorgang wird nach dem aktuell positionierten TBeProjectTaskBO und auf der selben Ebene wie dieser eingefügt.

Rückgabe ist die ID des angelegten Vorgangs

aProjectBo:O | Projekt Business Objekt (auf Projekt positioniert)
aTaskBo:O | Vorgangs Business Objekt, das auf den Vorgang positioniert ist nachdem eingefügt werden soll. Das Business Objekt ist nach der Ausführung auf dem neuen Vorgang positioniert

CbInsertTaskAtEnd:N

Fügt einen neuen Vorgang auf oberster Ebene am Ende des Vorgangs-Baums ein.

Rückgabe ist die ID des angelegten Vorgangs

aProjectBo:O | Projekt Business Objekt (auf Projekt positioniert)
aTaskBo:O | Vorgangs Business Objekt. Das Business Objekt ist nach der Ausführung auf dem neuen Vorgang positioniert

CbDeleteTaskAndChildren:N

Löscht einen Vorgang und alle ihm untergeordneten Vorgänge aus dem Vorgangs-Baum. Wenn einer der Vorgänge aus der Baum-Liste nicht gelöscht werden kann, wird nichts gelöscht.

Rückgabe ist die Anzahl der gelöschten Vorgänge, falls einer der Vorgänge nicht gelöscht werden kann, ist die Rückgabe -2

aTaskBo:O

Vorgangs Business Objekt welches gelöscht werden soll

CbIndentTask:N

Rückt einen Vorgang und alle ihm untergeordneten Vorgänge um eine Ebene ein/tiefer. Dabei wird der Vorgang dem ihm übergeordneten Vorgang untergeordnet. Ist das Einrücken eines Vorgangs nicht möglich, ist die Rückgabe die Nummer einer Sprachkonstante mit Fehlertext. Wurden alle Vorgänge eingerückt, ist die Rückgabe -1

aTaskBo:O

Vorgangs Business Objekt welches eingerückt werden soll

CbOutdentTask:N

Rückt einen Vorgang und alle ihm untergeordneten Vorgänge um eine Ebene aus/höher. Falls das Ausrücken eines Vorgangs nicht möglich ist, ist die Rückgabe die Nummer einer Sprachkonstante mit Fehlertext. Wurden alle Vorgänge eingerückt, ist die Rückgabe -1

aTaskBo:O

Vorgangs Business Objekt welches ausgerückt werden soll

CbMoveTaskAndChildrenUp:N

Verschiebt einen Vorgang und alle ihm untergeordneten Vorgänge um eine Position auf gleicher Ebene nach oben. Ist das Verschieben des Vorgangs nicht möglich, ist die Rückgabe die Nummer einer Sprachkonstante mit Fehlertext. Wurden alle Vorgänge verschoben, ist die Rückgabe -1

aTaskBo:O

Vorgangs Business Objekt, welches verschoben werden soll

CbMoveTaskAndChildrenDown:N

Verschiebt einen Vorgang und alle ihm untergeordneten Vorgänge um eine Position auf gleicher Ebene nach unten. Ist das Verschieben des Vorgangs nicht möglich, ist die Rückgabe die Nummer einer Sprachkonstante mit Fehlertext. Wurden alle Vorgänge verschoben, ist die Rückgabe -1

aTaskBo:O

Vorgangs Business Objekt, welches verschoben werden soll

CbTaskTree:N

Liefert ein Array für einen Vorgang und alle ihm untergeordneten Vorgänge mit folgendem Aufbau: {{ID, SORT, VORG_SAM, EBENE}, ...}

aTaskBo:O

Vorgangs Business Objekt, für das die Liste ermittelt werden soll

CbCreateEffortPosting:N

Erstellt eine neue Vorgangs-Leistungs-Buchung. Rückgabe ist die ID der angelegten Vorgangs-Leistungs-Buchung

aProjectBo:O

Projekt Business Objekt (auf Projekt positioniert)

aTaskBo:O

Vorgangs Business Objekt (auf Vorgang positioniert)

aTaskEffortBo:O

Vorgangs-Leistungs Business Objekt, positioniert auf die Vorgangs-Leistung, für die die Buchung erstellt wird.

Das Business Objekt ist nach der Ausführung auf der neuen Buchung positioniert

aPostingDate:D

Datum der Buchung

aMinutes:N

Ist-Menge (in Minuten) der Buchung

aComment:C

Buchungs-Kommentar

CreateNewProjectFromTemplate:N

Kopiert ein vorhandenes Projekt inkl. aller Projekt-Vorgänge und Vorgangs-Leistungen.

Rückgabe ist die ID des erstellten Projekts

aSourceProjectID:N

ID des Projekts, das als Vorlage für die Kopie dienen soll

aTargetProjectBO:O

Ziel Projekt Business Objekt (ist nach dem Prozess auf dem neuen Projekt positioniert)

aCreationSettings:N

Welche Teile des Projekts sollen kopiert werden. Werte müssen mit OR verknüpft werden z.B. pftDefault OR pftTasks OR pftTaskEfforts kopiert das gesamte Projekt inkl. aller Vorgänge und Vorgangs-Leistungen

pftDefault | Projekt kopieren
pftTasks | Vorgänge kopieren
pftTaskEfforts | Leistungen kopieren (nur ivm. pftTasks möglich)

CbCreateSalesProfit:L

Erstellt einen neuen Projekt-Erlös (Business Objekt bleibt im Bearbeitungs-Modus)

aSalesProfitBO:O | Projekt-Erlöse Business Objekt
aProjectID:N | ID des Projekts

CbEditSalesProfit:L

Versetzt einen bestehenden Projekt-Erlös in den Bearbeitungs-Modus

aSalesProfitBO:O

Projekt-Erlöse Business Objekt, das bearbeitet werden soll

CbDeleteSalesProfit:L

Löscht einen Projekt-Erlös

aSalesProfitBO:O | Projekt-Erlöse Business Objekt (Positioniert auf den zu löschenden Erlös)
aProjectBO:O | Ziel Projekt Business Objekt

CbPostSalesProfit:L

Speichert einen Projekt-Erlös

aSalesProfitBO:O | Projekt-Erlöse Business Objekt
aProjectBO:O | Ziel Projekt Business Objekt

CbCancelSalesProfit:L

Änderung am Projekt-Erlös verwerfen

aSalesProfitBO:O

Projekt-Erlöse Business Objekt

CbAutoCalcSalesProfit:L

Berechnet automatisch alle Erlöse für ein Projekt.

Dabei werden die Werte in nicht manuell erzeugten Zeilen aktualisiert und ggf. neue Zeilen angelegt

aProjectBO:O | Ziel Projekt Business Objekt
aSalesProfitBO:O | Projekt-Erlöse Business Objekt

Aufbau der Projektverwaltung

Beispiel

| m_oPrjBC, m_oDM, m_oPrjBO, m_oTskBO, m_oEffBO, m_oPstBO, m_oProfitBO,

  nProjectID:N, nTaskID:N, nEffortID, nPostingID, m_oDab262, i |

//******************************************************************************

// Erzeugt ein neues Projekt, 5 Vorgänge (1 Vorgang pro Werktag)

// Rückt die Vorgänge zu einer Kaskade ein

// Legt für den letzten Vorgang eine Vorgang-Leisung an und führt eine

// Buchung auf diese Vorgangs-Leistung durch

//******************************************************************************

// Projekt

//    Vorgang 1

//       Vorgang 2

//          ...

//******************************************************************************

m_oDM := CreateObject('TBeDbGet'),

startseq

   m_oDab262 := BeOpen(waDAB262),

   if eof(m_oDab262) then

      SetError('Beispiel funktioniert nicht mit leerem Personalstamm'),

   endif,

   DbStartTrans(m_oDM.AdsConnection),

   startseq

      m_oPrjBC    := CreateObject('TBeProjectBusinessController'),  // Kontroller

      m_oPrjBO    := CreateObject('TBeProjectBo'),                  // Projekt

      m_oTskBO    := CreateObject('TBeProjectTaskBo'),              // Vorgang

      m_oEffBO    := CreateObject('TBeProjectTaskEffortBO'),        // Vorgangs-Leistung

      m_oPstBO    := CreateObject('TBePostingBO'),                  // Leistungs-Buchung

      m_oProfitBO := CreateObject('TBeProjectSalesProfitBO'),       // Projekt-Erlöse

      startseq

         // Gleiches Datenmodul für alle Business-Objekte

         m_oPrjBC.CbDataModule    := m_oDM,

         m_oPrjBO.CbDataModule    := m_oDM,

         m_oTskBO.CbDataModule    := m_oDM,

         m_oEffBo.CbDataModule    := m_oDM,

         m_oPstBo.CbDataModule    := m_oDM,

         m_oProfitBO.CbDataModule := m_oDM,

         //*********************************************************************

         // Neues Projekt anlegen

         //*********************************************************************

         m_oPrjBO.CbInsert(),

         m_oPrjBO.CbDescription := 'Test Projekt ' + Kw(Now()),

         m_oPrjBO.CbType        := 300, // Projekt Typ "Organisation intern"

         m_oPrjBO.CbStartDate   := FrKw(Kw(Now())) - 4, // Beginn = Montag der akt. Woche

         m_oPrjBO.CbEndDate     := FrKw(Kw(Now())),     // Ende   = Freitag der akt. Woche

         m_oPrjBO.CbPost(),

         nProjectID := m_oPrjBO.CbID,

         writeln('Projekt Nr.'  + Str(nProjectID) + ' angelegt ( ' +

                 DtoC(m_oPrjBO.CbStartDate) + ' bis '  +

                 DtoC(m_oPrjBO.CbEndDate) + ')' ),

         //*********************************************************************

         // 5 Vorgänge die jeweils 1 Tag dauern dem Projekt hinzufügen

         //*********************************************************************

         m_oTskBO.CbGoToId(-1),

         for i:=0 to 4 do

            nTaskID := m_oPrjBC.CbInsertTaskAfterCurrent(m_oPrjBO, m_oTskBO),

            m_oTskBO.CbEdit(),

            m_oTskBO.CbDescription := 'Vorgang Nr. ' + str(m_oTskBo.CbId + 1),

            m_oTskBO.CbStart       := m_oPrjBO.CbStartDate + i,

            m_oTskBO.CbEnd         := m_oTskBO.CbStart + 1,

            m_oTskBo.CbPost(),

            // Vorgang um eine Ebene einrücken  (Kaskade)

            if i > 0 then

               m_oPrjBC.CbIndentTask(m_oTskBO),

            endif,

            writeln(Padl('', i) +  '   Vorgang Nr.'  + Str(nTaskID) + ' angelegt (' +

                    DtoC(m_oTskBO.CbStart) + ')'),

         next,

         //*********************************************************************

         // Neue Vorgangs-Leistung anlegen (für den letzten Vorgang)

         //*********************************************************************

         nEffortID := m_oEffBO.CbInsertTaskEffort(nTaskID),

         m_oEffBO.CbEdit(),

         m_oEffBO.CbDescription  := 'Projektplan prüfen',

         m_oEffBO.CbResourceType := 'M', // Mitarbeiter

         m_oEffBO.CbResourceID   := m_oDab262:PERSNR, // Mitarbeiter aus Personalstamm

         m_oEffBO.CbPost(),

         writeln(' '),

         writeln('Leistung Nr. ' + Str(nEffortID) + ' für Vorgang Nr.'  +

                 Str(nTaskID) + ' angelegt'),

         //*********************************************************************

         // Leistungs-Buchung durchführen (1h)

         //*********************************************************************

         nPostingID := m_oPrjBC.CbCreateEffortPosting(m_oPrjBO, m_oTskBO,

                                                      m_oEffBO, now(),

                                                      1 * 60, 'Projekt erstellt und geprüft'),

         writeln('Buchung für Leistung Nr.' + Str(nEffortID) + ' durchgeführt'),

         //*********************************************************************

         // Das Projekt inkl. aller Vorgänge und Leistungen nochmals kopieren

         //*********************************************************************

         DestroyObject(m_oTskBO), // diese BO's dürfen für den Kopie-Vorgang nicht

         DestroyObject(m_oEffBo), // mehr existieren da diese autoamtisch

         m_oTskBO := nil,         // in der Funktion erzeugt werden

         m_oEffBO := nil,

         m_oPrjBC.CbCreateNewProjectFromTemplate(nProjectID, m_oPrjBO, pftDefault or pftTasks or pftTaskEfforts),

         writeln('Projekt mit allen Vorgängen und Leistungen kopiert'),

         //*********************************************************************

         // Projekt-Erlöse anlegen

         //*********************************************************************

         m_oPrjBC.CbCreateSalesProfit(m_oProfitBO, nProjectID),

         m_oProfitBO.CbKind               := 10,

         m_oProfitBO.CbProfitType         := 10,

         m_oProfitBO.CbTargetProfit       := 1500,

         m_oProfitBO.CbTargetProfitManual := True,

         m_oPrjBC.CbPostSalesProfit(m_oProfitBO, m_oPrjBO),

         writeln('Manueller Projekt-Erlös für Projekt Nr.' + Str(nProjectID) + ' angelegt'),

      always,

         DestroyObject(m_oPrjBC),

         DestroyObject(m_oPrjBO),

         if not empty(m_oTskBO) then

            DestroyObject(m_oTskBO),

         endif,

         if not empty(m_oEffBO) then

            DestroyObject(m_oEffBO),

         endif,

         DestroyObject(m_oPstBO),

         DestroyObject(m_oProfitBO),

      stopseq,

      DbCommit(m_oDM.AdsConnection),

   always

      if DbInTrans(m_oDM.AdsConnection) then

         DbRollback(m_oDM.AdsConnection),

         DbResetDm(m_oDM),

      endif,

   stopseq,

always

   BeClose(m_oDab262),

   DestroyObject(m_oDM),

stopseq,

Siehe auch:

TBeProjectBO

TBeProjectTaskBO

TBeProjectTaskEffortBO

TBePostingBO

TBeProjectSalesProfitBO


TBeProjectSalesProfitBO

TBeProjectSalesProfitBO

Die Klasse TBeProjectSalesProfitBO kapselt Eigenschaften und Funktionen eines Projekt-Erlöses.

Eigenschaften:

Tabellen und Felder
CbProjectID:N | Projekt-ID des zugehörigen Projekts (entspricht DABPRJ:ID)
CbProfitType:N | Erlös-Art (entspricht DABPRE:ERL_ART) siehe Merkmals-Tabelle
CbKind:N | Zeilen-Typ (entspricht DABPRE:ZEILEN_TYP) siehe Merkmals-Tabelle
CbOrderID:N | Auftrags-ID des verbundenen Auftrags (entspricht DAB050:ID)
CbOrderNo:N | Auftrags-Nummer des verbundenen Auftrags (entspricht DAB050:ANUMMER)
CbTargetProfit:N | Plan-Erlös (entspricht DABPRE:PLAN_ERL)
CbTargetProfitManual:L | manuelle Pflege von Plan-Erlös (entspricht DABPRE:PLAN_ERL_M)
CbActualProfit:N | Ist-Erlös (entspricht DABPRE:IST_ERL)
CbActualProfitManual:L | manuelle Pflege von Ist-Erlös (entspricht DABPRE:IST_ERL_M)
CbAnticipatedPayment:N | Abschlagssumme von Ist-Erlös (entspricht DABPRE:IST_A)
CbAnticipatedPaymentManual:L | manuelle Pflege von Abschlagssumme (entspricht DABPRE:IST_A_M)

Verfügbare Ereignisse

nach der Neuanlage

vor dem Speichern

vor dem Löschen

Beispiel

//siehe TBeProjectBusinessController

Siehe auch:

Business Object Event "Nach der Neuanlage"

Business Object Event "Vor dem Speichern"

Business Object Event "Vor dem Löschen"

TBeProjectBO

TBeProjectTaskBO

TBeProjectTaskEffortBO

TBePostingBO

TBeProjectBusinessController

TBeCbCustomBusinessObject

Business Object Event "bei Kopie"

TBeBoProjectDuplicateInfo


TBeProjectTaskBO

TBeProjectTaskBO

Die Klasse TBeProjectTaskBO kapselt Eigenschaften und Funktionen eines Projekt-Vorgangs.

Jeder Vorgang ist einem Projekt zugeordnet, jedes Projekt kann "n" Vorgänge haben.

Eigenschaften:

Tabellen und Felder

CbProjectID:N

Projekt-Zuordnung (entspricht DABPRV:PRJ_ID)

CbSort:N

(nur lesend) Sortierschlüssel (berechnet) (entspricht DABPRV:SORT)

CbLevel:N

(nur lesend) Einrückungs-Ebene des Vorgangs (berechnet) (entspricht DABPRV:EBENE)

CbType:N

Vorgangstyp (entspricht DABPRV:TYP)

(default) bcPRV_Type_Task (=10) | Standard-Typ(=Vorgang)
bcPRV_Type_GroupTask (=20) | (=Gruppen-Vorgang)
bcPRV_Type_Milestone (=30) | (=Meilenstein)

CbGroupTaskID:N

(nur lesend) Übergeordneter Sammelvorgang (entspricht DABPRV:VORG_SAM)

CbDescription:C

Vorgangs-Bezeichnung (entspricht DABPRJ:BEZ)

CbStart:D

Start des Vorgangs (Datum & Zeit) (entspricht DABPRV:BEGINN)

CbEnd:D

Ende des Vorgangs (Datum & Zeit) (entspricht DABPRV:ENDE)

CbState:N

Status des Vorgangs (entspricht DABPRV:STATUS)

CbDone:L

Vorgang ist "erledigt" (entspricht DABPRV:ERLEDIGT)

CbPostingCount:N

(nur lesend) Anzahl Leistungsbuchungen (berechnet) (entspricht DABPRV:PLB_ANZ)

CbSearchFulltext:C

Volltext-Suche (entspricht DABPRV:SUCHE) wird beim Schreibzugriff für FTS-Index optimiert

Funktionen und Methoden

CbInsert()

Diese Methode ist für diese Business Objekt nicht verfügbar, bitte TBeProjectBusinessController CbInsertTaskAtEnd() oder
TBeProjectBusinessController. CbInsertTaskAfterCurrent() verwenden

CbDelete()

Diese Methode ist für diese Business Objekt nicht verfügbar, bitte TBeProjectBusinessController.CbDeleteTaskAndChildren() verwenden

Verfügbare Ereignisse

Berechnung Suchtext für Volltextsuche

Berechnung der Info-Caption

nach der Neuanlage

vor dem Speichern

vor dem Löschen

bei Kopie

Beispiel

// siehe TBeProjectBusinessController

Siehe auch:

Business Object Event "Berechnung Suchtext für Volltextsuche"

Business Object Event "Nach der Neuanlage"

Business Object Event "Vor dem Speichern"

Business Object Event "Vor dem Löschen"

Business Object Event "Berechnung der Info-Caption"

TBeProjectBO

TBeProjectTaskEffortBO

TBePostingBO

TBeProjectBusinessController

Business Object Event "bei Kopie"

TBeBoProjectTaskDuplicateInfo

TBeProjectSalesProfitBO


TBeProjectTaskEffortBO

TBeProjectTaskEffortBO

Die Klasse TBeProjectTaskEffortBO kapselt Eigenschaften und Funktionen eines Vorgangs-Leistung.

Die Vorgangs-Leistungen sind immer einem Vorgang zugeordnet, jeder Vorgang kann "n" Vorgangs-Leistungen haben.

Eigenschaften:

Tabellen und Felder

CbTaskID:N

(nur lesend) Vorgangs-Zuordnung (entspricht DABPVL:VORG_ID)

CbProjectID:N

(nur lesend) Projekt-Zuordnung (entspricht DABPVL:PRJ_ID)

CbPositonNo:C

Positions-Nr. (entspricht DABPVL:POSNR)

CbEffortType:N

Leistungsart (entspricht DABPVL:LEIST_ART)

(default) bcPVL_EffortType_Resource (=10)

Standard-Leistungs-Art
(=Ressourcen)

CbBillingType:N

Abrechungsart (entspricht DABPVL:RECH_ART)

CbResourceType:C

Ressourcentyp (entspricht DABPVL:RESTYP)

(default) M

Standard-Ressourcentyp (Merkmalstabelle 101004)

CbResourceID:N

Ressourcen-Zuordnung (entspricht DABPVL:RES_ID)

CbResourceUsageRate:N

Auslastung der Ressource durch diese Leistung (entspricht DABPVL:RES_AUSL)

CbArticleNo:C

Artikel-Nr. Zuordnung (entspricht DABPVL:ARTNR)

CbDescription:C

Bezeichnung der Vorgangsleistung (entspricht DABPVL:BEZ)

CbMemo:M

Memo-Text (entspricht DABPVL:MEMO)

CbQuantityPlanned:N

Plan-Menge (entspricht DABPVL:MENGE_PLAN)

CbQuantityActual:N

(nur lesend) Ist-Menge (entspricht DABPVL:MENGE_IST)

CbAcquisitionPrice:N

Einstandspreis (entspricht DABPVL:EKP)

CbAcquisitionValuePlanned:N

(nur lesend) berechneter Einstandswert der PLAN-Leistung (entspricht DABPVL:EK_WRTPLAN)

CbAcquisitionValueActual:N

(nur lesend) kumulierter Einstandswert der IST-Leistung (entspricht DABPVL:EK_WRTIST)

CbSalesPrice:N

Verkaufspreis (entspricht DABPVL:VKP)

CbSalesValuePlanned:N

(nur lesend) berechneter Verkaufswert der PLAN-Leistung (entspricht DABPVL:VK_WRTPLAN)

CbPostingCount:N

(nur lesend) Anzahl Leistungsbuchungen (berechnet) (entspricht DABPVL:PLB_ANZ)

CbSearchFulltext:C

(nur lesend) Volltext-Suche (entspricht DABPRV:SUCHE) wird beim Schreibzugriff für FTS-Index optimiert

Funktionen und Methoden

CbInsertTaskEffort()

aTaskID:N

Vorgangs ID zu welcher die neue Vorgangs-Leistung angelegt werden soll

CbInsert()

Diese Methode ist für diese Business Objekt nicht verfügbar, bitte CbInsertTaskEffort() verwenden

CbRecalcEffortValues()

Einstandswert der PLAN-Leistung neu berechnen
(EK_WRTPLAN = MENGE_PLAN * EKP / PE)

Verfügbare Ereignisse

Berchnung Suchtext für Volltextsuche

Berechnung der Info-Caption

nach der Neuanlage

vor dem Speichern

vor dem Löschen

bei Kopie

Beispiel

// siehe TBeProjectBusinessController

Siehe auch:

Business Object Event "Berechnung Suchtext für Volltextsuche"

Business Object Event "Nach der Neuanlage"

Business Object Event "Vor dem Speichern"

Business Object Event "Vor dem Löschen"

Business Object Event "Berechnung der Info-Caption"

TBeProjectBO

TBeProjectTaskBO

TBePostingBO

TBeProjectBusinessController

Business Object Event "bei Kopie"

TBeBoProjectTaskEffortDuplicateInfo

TBeProjectSalesProfitBO


TBePurchaseDispositionBO

TBePurchaseDispositionBO

Dieses Business-Objekt kapselt Eigenschaften einer Einkauf-Disposition.

Eigenschaften

Eigenschaften
CbAutoInc:N | (nur lesend) Alte automatisch vergebene Identifikationsnummer (entspricht DAB320:AUTOINC)
CbSuppNo:N | (nur lesend) Lieferanten-Nummer (entspricht DAB320:LIEFNR)
CbSupplierNo:N | (nur lesend) Lieferanten-Nummer (entspricht DAB320:LIEFNR)
CbCommiss:C | Kommissions-Nummer (entspricht DAB320:KOMMISS)
CbTimeLimit:C | Termin (entspricht DAB320:TERMIN)
CbTimeLimit_Ind:C | (nur lesend) Termin-Index (entspricht DAB320:TERM_INDEX)
CbTimeLimitIndex:C | (nur lesend) Termin-Index (entspricht DAB320:TERM_INDEX)
CbArtNo:C | (nur lesend) Artikel-Nummer (entspricht DAB320:ARTNR)
CbArticleNo:C | (nur lesend) Artikel-Nummer (entspricht DAB320:ARTNR)
CbQuantity:N | Menge in Lagereinheit(entspricht DAB320:MENGE) (Achtung: hier werden keine Staffelpreise berücksichtigt. Wenn dies gewünscht ist nutzen Sie bitte die Funktion CbChangeQuantityAndRecalc des TBePurchaseDispositionBusinessControllers)
CbQuantPurch:N | Menge in Einkaufseinheit(entspricht DAB320:MENGE_EK)
CbQuantityPurchase:N | Menge in Einkaufseinheit(entspricht DAB320:MENGE_EK)
CbPkgUnitNo:N | Kennzeichen für Mengen-Einheit (entspricht DAB320:VE_NR)
CbCurrID:N | Währungs-Kennzeichen (entspricht DAB320:WAEKZ)
CbCurrencyID:N | Währungs-Kennzeichen (entspricht DAB320:WAEKZ)
CbPriceUnitPurch:N | Preis-Einheit Einkauf(entspricht DAB320:PE)
CbUnitPurchase:C | Mengenheit Einkauf (entspricht DAB320:ME_EK)
CbUnitConv:N | Faktor ME_EK -> ME (entspricht DAB320:ME_UMR)
CbUnitConvPrU:N | Faktor ME -> ME_PE (entspricht DAB320:ME_UMR_PE)
CbPriceForCurr:N | Einkaufs-Preis (in Einkaufs-Währung)(entspricht DAB320:SOEK)
CbPurchasePrice:N | Einkaufs-Preis (in Einkaufs-Währung)(entspricht DAB320:SOEK)
CbDiscount1:N | Rabatt % 1 (entspricht DAB320:RABATT1)
CbDiscount2:N | Rabatt % 2 (entspricht DAB320:RABATT2)
CbDiscount3:N | Rabatt % 3 (entspricht DAB320:RABATT3)
CbExtraText1:C | Zusatz-Text 1 (entspricht DAB320:Z_TEXT1)
CbExtraMode1:C | Zusatz-Kosten-Typ 1 (entspricht DAB320:Z_MODE1)
CbExtraCost1:N | Zusatz-Kosten 1 (entspricht DAB320:Z_KOST1)
CbExtraText2:C | Zusatz-Text 2 (entspricht DAB320:Z_TEXT2)
CbExtraMode2:C | Zusatz-Kosten-Typ 2 (entspricht DAB320:Z_MODE2)
CbExtraCost2:N | Zusatz-Kosten 2 (entspricht DAB320:Z_KOST2)
CbExtraText3:C | Zusatz-Text 3 (entspricht DAB320:Z_TEXT3)
CbExtraMode3:C | Zusatz-Kosten-Typ 3 (entspricht DAB320:Z_MODE3)
CbExtraCost3:N | Zusatz-Kosten 3 (entspricht DAB320:Z_KOST3)
CbDutyPerc:N | Beschaffungs-/Zollkosten in % (entspricht DAB320:ZOLLPROZ)
CbDutyAbs:N | Beschaffungs-/Zollkosten Betrag (entspricht DAB320:ZOLLBETR)
CbImpersAccount:N | Sachkonto (entspricht DAB320:SACHKONTO)
CbCostCenter:N | Kostenstelle (entspricht DAB320:KOSTENST)
CbCustOrdNo:N | Kunden-Auftrags-Nummer (entspricht DAB320:ANUMMER)
CbCustOrdSync:C | Weiterverrechnung Kunden-Auftrags-Nummer (entspricht DAB320:ANUMMER_X)
CbDepart:N | Abteilung (entspricht DAB320:ABTEILUNG)
CbProdDepart:C | Produktions-Abteilung (entspricht DAB320:PROD_ABT)
CbMemo:C | zusätzlicher Text (entspricht DAB320:MEMO)
CbLocation:N | Standort (entspricht DAB320:STANDORT)
CbIsReleased:L | Freigabestatus (entspricht DAB320:FREIGABE)
CbIsHeaderEntry:L | Eintrag ist ein Kopfsatz

Methoden
CbInsert | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden
CbEdit | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden
CbCancel | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden
CbPost | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden
CbDelete | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden

Verfügbare Ereignisse

Beispiel

// siehe Beispiel von TBePurchaseDispositionBC

Siehe auch:

Business Object Event "Nach der Neuanlage"

Business Object Event "Vor dem Speichern"

Business Object Event "Vor dem Löschen"

TBeCbCustomBusinessObject

TBePurchaseDispositionBusinessController

TBePurchaseDispositionPlanningBO

TBePurchaseDispositionBC


TBePurchaseDispositionBusinessController

TBePurchaseDispositionBusinessController

Dieser Business-Controller stellt Funktionen und Methoden zur Bearbeitung von

Einkauf-Dispositionen bereit.

Achtung: Dieser BusinessController ist veraltet. Bitte verwenden Sie stattdessen den TBePurchaseDispositionBC

Eigenschaften

Eigenschaften

CbDataModule:O

Daten-Modul, für alle Funktionen und Methoden.

Zum ändern / erzeugen von Daten muss auf diesem Daten-Modul eine Transaktion gestartet werden

Funktionen und Methoden

CbCreateDisposition:L

Erstelle eine neue Einkauf-Disposition und verbleibt im Bearbeitungs-Modus

Rückgabe: True - falls Neuanlage erfolgreich

aBO:O | Einkauf Disposition Business-Objekt (TBePurchaseDispositionBO)
aArtNo:C | Artikel für welchen die Disposition angelegt werden soll
aQuantPurch:N | Menge in Einkaufs-Einheit
aSupplierNo:N | Lieferant für welchen die Disposition angelegt werden soll; 0 bedeutet das kein direkter Lieferant vorhanden ist

CbEditDisposition:L

Versetzt eine bestehende Einkauf-Disposition in den Bearbeitungs-Modus

aBO:O

Einkauf Disposition Business-Objekt (TBePurchaseDispositionBO) (auf Disposition positioniert)

CbDeleteDisposition:L

Löscht eine bestehende Einkauf-Diposition

Rückgabe: True - falls Löschung erfolgreich

aBO:O

Einkauf Disposition Business-Objekt (TBePurchaseDispositionBO) (auf Disposition positioniert)

CbPostDisposition:L

Speichert eine im Bearbeitungs-Modus befindende Einkauf-Disposition

Rückgabe: True - falls Speicherung erfolgreich

aBO:O

Einkauf Disposition Business-Objekt (TBePurchaseDispositionBO) (auf Disposition positioniert)

CbCancelDisposition:L

Abbruch des Bearbeitungs-Modus

Rückgabe: True - falls Abbruch erfolgreich

aBO:O

Einkauf Disposition Business-Objekt (TBePurchaseDispositionBO) (auf Disposition positioniert)

CbChangeQuantityAndRecalc:L

Ändert die Menge der Disposition und lädt ggf. die Staffelpreise neu

aBO:O | Einkauf Disposition Business-Objekt (TBePurchaseDispositionBO) (auf Disposition positioniert)
aQuantity:N | Neue Menge

Beispiel

|oDispoBO, oDispoController, oDBGet, nID1, nID2,

 cArtNo:C:='TEST', nSuppNo:N:=1000|

oDBGet           := CreateObject('TBeDBGet'),

oDispoController := CreateObject('TBePurchaseDispositionBusinessController'),

oDispoBO         := CreateObject('TBePurchaseDispositionBO'),

startseq

   oDispoController.CbDataModule := oDBGet,

   oDispoBO.CbDataModule         := oDBGet,

   DbStartTrans(oDBGet.AdsConnection),

   startseq

      // neue Disposition anlegen

      if oDispoController.CbCreateDisposition(oDispoBO, cArtNo, 2, nSuppNo) then

         oDispoBO.CbQuantity := 8, // -> berechnet die Menge_EK neu falls eine Umrechnung vorhanden ist

         oDispoBO.CbCommiss  := 'TEST1',

         oDispoController.CbPostDisposition(oDispoBO),

         nID1 := oDispoBO.CbID,

         writeln('Einkauf-Disposition angelegt ID: ' + Str(oDispoBO.CbID)),

      endif,

      // neue Disposition anlegen

      if oDispoController.CbCreateDisposition(oDispoBO, cArtNo, 3, nSuppNo) then

         oDispoBO.CbCommiss  := 'TEST2',

         oDispoController.CbPostDisposition(oDispoBO),

         nID2 := oDispoBO.CbID,

         writeln('Einkauf-Disposition angelegt ID: ' + Str(oDispoBO.CbID)),

      endif,

      // erste Disposition ändern

      oDispoBO.CbGotoID(nID1),

      if oDispoController.CbEditDisposition(oDispoBO) then

         oDispoBO.CbCommiss    := 'Neu',

         oDispoBO.CbQuantPurch := oDispoBO.CbQuantPurch + 3, // Menge aus zweiter Diposition addieren

         oDispoController.CbPostDisposition(oDispoBO),

         writeln('Einkauf-Disposition geändert ID: ' + Str(oDispoBO.CbID)),

      endif,

      // zweite Disposition wieder löschen

      oDispoBO.CbGotoID(nID2),

      oDispoController.CbDeleteDisposition(oDispoBO),

      writeln('Einkauf-Disposition gelöscht ID: ' + Str(nID2)),

      DbCommit(oDBGet.AdsConnection),

   always

      if DbInTrans(oDBGet.AdsConnection) then

         DbRollback(oDBGet.AdsConnection),

      endif,

   stopseq,

always

   DestroyObject(oDispoBO),

   DestroyObject(oDispoController),

   DestroyObject(oDBGet),

stopseq,

Siehe auch:

TBePurchaseDispositionBO


TBePurchaseDispositionPlanningBO

TBePurchaseDispositionPlanningBO

Die Klasse TBePurchaseDispositionPlanningBO kapselt den Zugriff auf die Tabelle Dab315 - Einkauf Dispo-Planung.

Eigenschaften:

Eigenschaften
CbLocation:N | Standort (Dab315:STANDORT)
CbDepartment:N | Einkaufs-Abteilung (Dab315:ABTEILUNG)
CbIsReleasedString:C | Freigabe erteilt (Dab315:FREIGABE als String )
CbIsReleased:L | Freigabe erteilt (Dab315:FREIGABE als Boolean)
CbArticleNo:C | (Nur lesen) Artikelnummer (Dab315:ARTNR)
CbSupplierNo:N | (Nur lesen) Lieferantennummer (Dab315:LIEFNR)
CbQuantity:N | Bedarf (Dab315:Quantity)
CbSuspDemandPurchase:N | (Nur lesen) Verdachts-Bedarf (Dab315:VERD_BED)
CbQuantitySales:N | (Nur lesen) Bedarf für Verkauf (Dab315:MENGE_VK)
CbSuspDemandSales:N | (Nur lesen) Verdachtsbedarf für Verkauf (Dab315:VERD_BEDVK)
CbOrderSuggestionQuantity:N | Bestellvorschlag (Dab315:DISPO)
CbCommiss:C | Kommissionsnummer (Dab315:KOMMISS)
CbTimeLimit:C | Termin (Dab315:TERMIN)
CbTimeLimitIndex:C | (Nur lesen) Termin-Index (Dab315:TERM_INDEX)
CbCurrencyID:N | Währungs-Kennzeichen (Dab315:WAEKZ)
CbPriceUnitPurch:N | (Nur lesen) Preis-Einheit Einkauf (Dab315:PE)
CbUnitPurchase:C | (Nur lesen) Menngen-Einheit Einkauf (Dab315:ME_EK)
CbUnitConv:N | (Nur lesen) Faktor ME_EK -> ME (Dab315:ME_UMR)
CbUnitConvPrU:N | (Nur lesen) Faktor ME -> ME_PE (Dab315:ME_UMR_PE)
CbPurchasePrice:N | Einkaufs-Preis (Dab315:EKP)
CbDiscount1:N | Rabatt-% Stufe 1 (Dab315:RABATT1)
CbDiscount2:N | Rabatt-% Stufe 2 (Dab315:RABATT2)
CbDiscount3:N | Rabatt-% Stufe 3 (Dab315:RABATT3)
CbExtraText1:C | Zusatz-Text 1 (Dab315:Z_TEXT1)
CbExtraText2:C | Zusatz-Text 2 (Dab315:Z_TEXT2)
CbExtraText3:C | Zusatz-Text 3 (Dab315:Z_TEXT3)
CbExtraMode1:C | Zusatz-Kosten-Typ 1 (Dab315:Z_MODE1)
CbExtraMode2:C | Zusatz-Kosten-Typ 2 (Dab315:Z_MODE2)
CbExtraMode3:C | Zusatz-Kosten-Typ 3 (Dab315:Z_MODE3)
CbExtraCost1:N | Zusatz-Kosten (Dab315:Z_KOST1)
CbExtraCost2:N | Zusatz-Kosten (Dab315:Z_KOST2)
CbExtraCost3:N | Zusatz-Kosten (Dab315:Z_KOST3)
CbMemo:C | Langtext (Dab315:MEMO)
CbAutoInc:N | (Nur lesen) Auto Increment (Dab315:AUTOINC)
CbIsInfoRecord:L | (Nur lesen) Datensatz ist ein Info-Datensatz

Methoden
CbInsert | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden
CbEdit | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden
CbCancel | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden
CbPost | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden
CbDelete | Diese Methode ist für dieses Business-Objekt nicht verfügbar, TBePurchaseDispositionBC verwenden

Verfügbare Ereignisse

Beispiel

// Siehe Beispiel des TBePurchaseDispositionBC

Siehe auch:

TBePurchaseDispositionBO

TBeProductionDispositionPlanningBO

TBePurchaseDispositionBC


TBePurchaseDispositionBC

TBePurchaseDispositionBC

Die Klasse TBePurchaseDispositionBC kapselt alle Funktionalitäten die zum Anlegen von Einträgen in der

Bestell-Dispositions-Planung und Bestell-Disposition benötigt werden.

Eigenschaften:

Eigenschaften

CbDataModule:O

Datenmodul auf dem der BusinessController arbeitet.

Funktionen

CbDispoPlanCreate:L

Funktion zum Anlegen eines neuen Dispositions-Planungs-Eintrags.

aPurchaseDispoPlanBO:O | Objekt vom Typ TBePurchaseDispositionPlanningBO
aArticleNo:C | Artikelnummer
aSupplierNo:N | Lieferantennummer

CbDispoPlanEdit:L

Bearbeiten eines existierenden im übergebenen BO positionierten Planungs-Eintrags.

aPurchaseDispoPlanBO:O

Objekt vom Typ TBePurchaseDispositionPlanningBO

CbDispoPlanPost:L

Speichern eines in Neuanlage-/Bearbeitungsmodus befindlichen Planungs-Eintrags.

aPurchaseDispoPlanBO:O | Objekt vom Typ TBePurchaseDispositionPlanningBO
aDiscontinuedLockedOrSampleArticlesAllowed:L | Erlaubnis Auslauf-/Sperr-/Muster-Artikel zu speichern
aAllowInternalMemo | Internes-Memo bestätigen/ablehnen

CbDispoPlanCancel:L

Neuanlage/Bearbeitung eines Planungs-Eintrags abbrechen.

aPurchaseDispoPlanBO:O

Objekt vom Typ TBePurchaseDispositionPlanningBO

CbDispoPlanDelete:L

Entfernt den im übergebenen BO positionierten Planungs-Eintrag.

aPurchaseDispoPlanBO:O

Objekt vom Typ TBePurchaseDispositionPlanningBO

CbDispoPlanRelease:L

Positionierten Planungs-Eintrag freigeben oder dessen Freigabe aufheben.

aPurchaseDispoPlanBO:O | Objekt vom Typ TBePurchaseDispositionPlanningBO
aRelease:L | Freigabe erteilen/aufheben
aDiscontinuedLockedOrSampleArticlesAllowed:L | Erlaubnis Auslauf-/Sperr-/Muster-Artikel freizugeben

CbDispoPlanToDisposition:L

Überträgt den positionierten Planungs-Eintrag in die Bestell-Disposition. Dies löst das BusinessController-Event "bei Übertragung von BO-Daten" aus. Der Planungs-Eintrag ist anschließend gelöscht.

aPurchaseDispoPlanBO:O | Objekt vom Typ TBePurchaseDispositionPlanningBO
aDiscontinuedLockedOrSampleArticlesAllowed:L | Erlaubnis Auslauf-/Sperr-/Muster-Artikel in die Bestell-Disposition zu übertragen

CbDispoCreate:L

Funktion zum Anlegen eines neuen Dispositions-Eintrags.

aPurchaseDispoBO:O | Objekt vom Typ TBePurchaseDispositionBO
aArtNo:C | Artikelnummer
aQuantPurch:N | Bestellmenge
aSupplierNo:N | Lieferantennummer

CbDispoEdit:L

Bearbeiten eines existierenden im übergebenen BO positionierten Dispositions-Eintrags.

aPurchaseDispoBO:O

Objekt vom Typ TBePurchaseDispositionBO

CbDispoDelete:L

Entfernt den im übergebenen BO positionierten Dispositions-Eintrag.

aPurchaseDispoBO:O

Objekt vom Typ TBePurchaseDispositionBO

CbDispoPost:L

Speichern eines in Neuanlage-/Bearbeitungsmodus befindlichen Dispositions-Eintrags.

aPurchaseDispoBO:O

Objekt vom Typ TBePurchaseDispositionBO

CbDispoCancel:L

Neuanlage/Bearbeitung eines Dispositions-Eintrags abbrechen.

aPurchaseDispoBO:O

Objekt vom Typ TBePurchaseDispositionBO

CbDispoRelease:L

Positionierten Dispositions-Eintrag freigeben oder dessen Freigabe aufheben.

aPurchaseDispoBO:O | Objekt vom Typ TBePurchaseDispositionBO
aRelease:L | Freigabe erteilen/aufheben

CbDispoChangeQuantity:L

Änderung der Menge eines existierenden im übergebenen BO positionierten Dispositions-Eintrags. Hierbei werden Staffel-Preise usw. berücksichtigt und ggf. übernommen.

aPurchaseDispoBO:O | Objekt vom Typ TBePurchaseDispositionBO
aQuantity:N | Bestellmenge

CbDispoChangeQuantityPurchase:L

Änderung der Einkaufs-Menge eines existierenden im übergebenen BO positionierten Dispositions-Eintrags. Hierbei werden Staffel-Preise usw. berücksichtigt und ggf. übernommen.

aPurchaseDispoBO:O | Objekt vom Typ TBePurchaseDispositionBO
aQuantity:N | Bestellmenge

CbDispoToPurchaseOrder:N

Überträgt den positionierten Dispositions-Eintrag in die Bestell-Rückstände. Dies löst das BusinessController-Event "bei Übertragung von BO-Daten" aus. Der Dispositions-Eintrag ist anschließend gelöscht. Die Funktion liefert Nummer der Ziel-Bestellung zurück.

aPurchaseDispoBO:O | Objekt vom Typ TBePurchaseDispositionBO
aOrderNo:N | Bestellnummer. Kann mit 0 übergeben werden, um eine neue Bestellung zu erzeugen oder vorbelegt werden, um eine Position an einen existierenden Bestell-Rückstand anzufügen.
aIgnoreMinOrderValue:L | Ignorieren der Mindest-Bestellmenge
aIgnoreExemptionLimit:L | Ignorieren der Mindest-Freigrenze

Methoden

CbDispoPlanChangeArticleNo

Methode zum Anpassen des Artikels.

aPurchaseDispoPlanBO:O | Objekt vom Typ TBePurchaseDispositionPlanningBO
aArticleNo:C | Neue Artikelnummer
aCalculateOwnSupplier:L | Günstigsten Artikel-Zulieferer ermitteln

CbDispoPlanChangeSupplierNo

Methode zum Anpassen des Lieferanten. Bei gültigem nicht gesperrtem Lieferanten werden dessen Preise-/Staffeln Rabatte etc. übernommen.

aPurchaseDispoPlanBO:O | Objekt vom Typ TBePurchaseDispositionPlanningBO
aSupplierNo:N | Neue Lieferantennummer

CbDispoPlanResetOrderSuggestionQuantity

Methode zum Anpassen der Bestellmenge. Diese Methode muss ausgeführt werden, nachdem die CbOrderSuggestionQuantity gesetzt wurde.

aPurchaseDispoPlanBO:O | Objekt vom Typ TBePurchaseDispositionPlanningBO
aRoundToOrderUnit:L | Vorschlagsmenge ggf. auf Bestelleinheit aufrunden. Dies löst ggf. das Event "bei Rundung Vorschlagsmenge (EK/Prod)" aus

Verfügbare Ereignisse

bei Übertragung von BO-Daten

Dieses Event wird von den beiden Funktionen CbDispoPlanToDisposition und CbDispoToPurchaseOrder ausgelöst. Im Event erhält man das Quell-BusinessObjekt und das Ziel-BusinessObjekt bevor der neue Datensatz gespeichert wurde und noch vor der Löschung des Quell-Datensatzes.

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Beispiel für die Verwendung des

//               TBePurchaseDispositionBC zur Anlage von

//               Dispositions-Planungs- und Dispositions-Einträgen sowie die

//               Übername in die Bestell-Rückstände

//##############################################################################

//##############################################################################

|

   m_oDM, m_oPurchDispoBC, m_oPurchDispoPlanBO, m_oPurchDispoBO,

   m_cArticleNo, m_cArticleNo2,

   m_nSupplierNo_IsArticleSupplier, m_nSupplierNo_NoArticleSupplier

|

//##############################################################################

//##############################################################################

// Konstanten

//##############################################################################

//##############################################################################

m_cArticleNo                    := 'TASTATUR',

m_cArticleNo2                   := 'MAUS',

m_nSupplierNo_IsArticleSupplier := 70000000, // Ist Artikel-Zulieferer

m_nSupplierNo_NoArticleSupplier := 80000000, // Ist kein Artikel-Zulieferer

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// Diese Funktion führt der Reihe nach folgende Operationen durch:

// 1. Anlegen eines neuen Planungseintrags

// 2. Anpassen des angelegten Eintrags

//   2.1 Kommissionsnummer eintragen

//   2.2 Menge verändern und Preis neu berechnen lassen

//   2.3 Ändern des Artikels

// 3. Freigeben des Planungseintrags

// 4. Übername des Planungseintrags in die Disposition

// @Result: null

//******************************************************************************

function DispositionPlanningExample(oDM)

|

   bDiscontinuedLockedOrSampelArticlesAllowed, // Auslauf-/Sperr-/Muster-Artikel erlauben

   bSuggestionQuantityCalcRequired,            // Bestellvorschlagsmenge soll berechnet werden

   bRoundToOrderUnit,                          // Ggf. auf Bestelleinheit aufrunden

   bRefreshSupplierPricerates,                 // Zulieferer-Preise/-Konditionen übernehmen

   bAllowInternalMemo,                         // Internes Memo mit OK akzeptieren

   bRelease                                    // Freigabe erteilen/aufheben

|

   // 1. Anlegen eines neuen Planungseintrags **********************************

   DBStartTrans(oDM.ADSConnection),

   startseq

      // Erstellen des Planungseintrags

      m_oPurchDispoBC.CbDispoPlanCreate(m_oPurchDispoPlanBO,

                                        m_cArticleNo,

                                        m_nSupplierNo_IsArticleSupplier),

      // Speichern ohne weitere (direkte) Änderung

      bDiscontinuedLockedOrSampelArticlesAllowed := True,

      bAllowInternalMemo                         := True,

      m_oPurchDispoBC.CbDispoPlanPost(m_oPurchDispoPlanBO,

                                      bDiscontinuedLockedOrSampelArticlesAllowed,

                                      bAllowInternalMemo),

      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollBack(oDM.ADSConnection),

         DBCancelAll(oDM),

      endif,

   stopseq,

   // 2. Anpassen des angelegten Eintrags **************************************

   DBStartTrans(oDM.ADSConnection),

   startseq

      m_oPurchDispoBC.CbDispoPlanEdit(m_oPurchDispoPlanBO),

      // 2.1 Kommissionsnummer eintragen ***************************************

      m_oPurchDispoPlanBO.CbCommiss := 'TEST_KOMM',

      // 2.2 Menge verändern und Preis neu berechnen lassen ********************

      bRoundToOrderUnit          := False, // Wir möchten nicht automatisch auf die Bestelleinheit aufrunden

      bRefreshSupplierPricerates := True, // Die Zuliefererpreise sollen verwendet werden

      // Menge auf 15 Stück ändern. Danach muss die Preiskalkulation einmal durchgeführt werden

      m_oPurchDispoPlanBO.CbOrderSuggestionQuantity := 21,

      m_oPurchDispoBC.CbDispoPlanResetOrderSuggestionQuantity(m_oPurchDispoPlanBO,

                                                              bRoundToOrderUnit,

                                                              bRefreshSupplierPricerates),

      // Speichern der Änderungen

      bDiscontinuedLockedOrSampelArticlesAllowed := True,

      bAllowInternalMemo                         := True,  // Ggf. vorhandenes internes Memo wird mit OK bestätigt

      m_oPurchDispoBC.CbDispoPlanPost(m_oPurchDispoPlanBO,

                                      bDiscontinuedLockedOrSampelArticlesAllowed,

                                      bAllowInternalMemo),

      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollBack(oDM.ADSConnection),

         DBCancelAll(oDM),

      endif,

   stopseq,

   // 2.3 Ändern des Artikels **************************************************

   DBStartTrans(oDM.ADSConnection),

   startseq

      m_oPurchDispoBC.CbDispoPlanEdit(m_oPurchDispoPlanBO),

      m_oPurchDispoBC.CbDispoPlanChangeArticleNo(m_oPurchDispoPlanBO,

                                                 m_cArticleNo2,

                                                 True), // Hierbei auch den passenden Zulieferer ermitteln lassen

      // Gewünschte Menge anpassen, da diese auf den Defaultwert geändert wurde

      m_oPurchDispoPlanBO.CbOrderSuggestionQuantity := 20,

      // Wir möchten genau 20 Stück bestellen aber die Preise laden lassen

      bRoundToOrderUnit          := False,

      bRefreshSupplierPricerates := True,

      m_oPurchDispoBC.CbDispoPlanResetOrderSuggestionQuantity(m_oPurchDispoPlanBO,

                                                              bRoundToOrderUnit,

                                                              bRefreshSupplierPricerates),

      // Speichern der Änderungen

      bDiscontinuedLockedOrSampelArticlesAllowed := True,

      bAllowInternalMemo                         := True, // Ggf. vorhandenes internes Memo wird mit OK bestätigt

      m_oPurchDispoBC.CbDispoPlanPost(m_oPurchDispoPlanBO,

                                      bDiscontinuedLockedOrSampelArticlesAllowed,

                                      bAllowInternalMemo),

      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollBack(oDM.ADSConnection),

         DBCancelAll(oDM),

      endif,

   stopseq,

   // 3. Freigeben des Planungseintrags ****************************************

   // ACHTUNG: Hier darf keine eigene Transaktion gestartet werden

   bRelease                                   := True, // Wir möchten freigeben

   bDiscontinuedLockedOrSampelArticlesAllowed := True,

   m_oPurchDispoBC.CbDispoPlanRelease(m_oPurchDispoPlanBO,

                                      bRelease,

                                      bDiscontinuedLockedOrSampelArticlesAllowed),

   // 4. Übername des Planungseintrags in die Disposition **********************

   // ACHTUNG: Hier darf keine eigene Transaktion gestartet werden

   bDiscontinuedLockedOrSampelArticlesAllowed := True, // Auch Sperr-/Auslauf-/Muster-Artikel übernehmen

   m_oPurchDispoBC.CbDispoPlanToDisposition(m_oPurchDispoPlanBO,

                                            bDiscontinuedLockedOrSampelArticlesAllowed),

end,

//******************************************************************************

// Diese Funktion führt der Reihe nach folgende Operationen durch:

// 1. Anlegen eines neuen Dispositionseintrags

// 2. Anpassen des angelegten Eintrags

//   2.1 Kommissionsnummer eintragen

//   2.2 Menge verändern und Preis neu berechnen lassen

// 3. Freigeben des Planungseintrags

// 4. Übername des Planungseintrags in die Bestell-Rückstände

// @Result: null

//******************************************************************************

function DispositionExample(oDM)

| bIgnoreMinOrderValue, bIgnoreExemptionLimit, nNewOrderNo |

   // 1. Anlegen eines neuen Dispositionseintrags ------------------------------

   DBStartTrans(oDM.ADSConnection),

   startseq

      m_oPurchDispoBC.CbDispoCreate(m_oPurchDispoBO,

                                    m_cArticleNo,

                                    10,

                                    m_nSupplierNo_IsArticleSupplier),

      m_oPurchDispoBC.CbDispoPost(m_oPurchDispoBO),

      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollBack(oDM.ADSConnection),

         DBCancelAll(oDM),

      endif,

   stopseq,

   // 2. Anpassen des angelegten Eintrags --------------------------------------

   DBStartTrans(oDM.ADSConnection),

   startseq

      m_oPurchDispoBC.CbDispoEdit(m_oPurchDispoBO),

      // 2.1 Kommissionsnummer eintragen ---------------------------------------

      m_oPurchDispoBO.CbCommiss := 'TEST_KOMM',

      // 2.2 Menge verändern und Preis neu berechnen lassen --------------------

      m_oPurchDispoBC.CbDispoChangeQuantity(m_oPurchDispoBO, 20),

      m_oPurchDispoBC.CbDispoPost(m_oPurchDispoBO),

      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollBack(oDM.ADSConnection),

         DBCancelAll(oDM),

      endif,

   stopseq,

   // 3. Freigeben des Planungseintrags ----------------------------------------

   m_oPurchDispoBC.CbDispoRelease(m_oPurchDispoBO, False),

   writeln('Freigabe erteilt?', m_oPurchDispoBO.CbIsReleased),

   m_oPurchDispoBC.CbDispoRelease(m_oPurchDispoBO, True),

   writeln('Freigabe erteilt?', m_oPurchDispoBO.CbIsReleased),

   // 4. Übername des Planungseintrags in die Bestell-Rückstände ---------------

   // ACHTUNG: Hier darf keine eigene Transaktion gestartet werden

   bIgnoreMinOrderValue  := True, // Mindest-Bestellmenge ignorieren

   bIgnoreExemptionLimit := True, // Unterschreitung der Mindest-Freigrenze ignorieren

   // Übernehmen und neue Auftragsnummer merken

   nNewOrderNo := m_oPurchDispoBC.CbDispoToPurchaseOrder(m_oPurchDispoBO,

                                                         0,

                                                         bIgnoreMinOrderValue,

                                                         bIgnoreExemptionLimit),

   writeln('Auftragsnummer des neuen Bestell-Rückstands', nNewOrderNo),

   // 5. Weitere Postition anlegen und an vorgegebenen Bestell-Rückstand anfügen

   DBStartTrans(oDM.ADSConnection),

   startseq

      m_oPurchDispoBC.CbDispoCreate(m_oPurchDispoBO,

                                    m_cArticleNo2,

                                    10,

                                    m_nSupplierNo_IsArticleSupplier),

      m_oPurchDispoBO.CbCommiss := 'TST_KOMMADD',

      m_oPurchDispoBC.CbDispoPost(m_oPurchDispoBO),

      DBCommit(oDM.ADSConnection),

   always

      if DBInTrans(oDM.ADSConnection) then

         DBRollBack(oDM.ADSConnection),

         DBCancelAll(oDM),

      endif,

   stopseq,

   // ACHTUNG: Hier darf keine eigene Transaktion gestartet werden

   bIgnoreMinOrderValue  := True, // Mindest-Bestellmenge ignorieren

   bIgnoreExemptionLimit := True, // Unterschreitung der Mindest-Freigrenze ignorieren

   // Übernehmen und neue Auftragsnummer merken

   m_oPurchDispoBC.CbDispoToPurchaseOrder(m_oPurchDispoBO,

                                          nNewOrderNo,

                                          bIgnoreMinOrderValue,

                                          bIgnoreExemptionLimit),

   writeln('Weitere Position an Auftrag: ' + Str(nNewOrderNo) + ' angefügt'),

end,

//******************************************************************************

// Erzeugt die benötigten Objekte und weist ihnen das übergebene Datenmodul zu

// @Result: null

//******************************************************************************

function CreateObjects(oDM)

   // BusinessController und BusinessObjekte erzeugen

   m_oPurchDispoBC     := CreateObject('TBePurchaseDispositionBC',         'PURCHDISPOBC',     oDM),

   m_oPurchDispoPlanBO := CreateObject('TBePurchaseDispositionPlanningBO', 'PURCHDISPOPLANBO', oDM),

   m_oPurchDispoBO     := CreateObject('TBePurchaseDispositionBO',         'PURCHDISPOBO',     oDM),

   // Allen Objekten das gleiche Datenmodul zuweisen, damit sämtliche Änderungen

   // innerhalb der gleichen Transaktion geschehen

   m_oPurchDispoBC.CbDataModule     := oDM,

   m_oPurchDispoPlanBO.CbDataModule := oDM,

   m_oPurchDispoBO.CbDataModule     := oDM,

end,

//##############################################################################

//##############################################################################

// Hauptprogramm

//##############################################################################

//##############################################################################

startseq

   m_oDM := CreateObject('TBeDBGet'),

   startseq

      CreateObjects(m_oDM),

      DispositionPlanningExample(m_oDM),

      DispositionExample(m_oDM),

   always

      DestroyObject(m_oDM),

   stopseq,

onerror

   MessageDlg('Fehler im Programm ' + ProgName() + crlf +

              GetErrorText() + crlf + crlf +

              DebugArr(GetErrorStack(true)), mtError),

stopseq,

Siehe auch:

TBePurchaseDispositionBO

TBeProductionDispositionPlanningBO

TBePurchaseDispositionPlanningBO

TBeProductionDispositionBC


TBePurchaseOrderBO

TBePurchaseOrderBO

Die Klasse TBePurchaseOrderBO kapselt den Zugriff auf die Dab035 - Einkauf/Produktion Bestellrückstände.

Dieses BO beinhaltet hierbei nur die für den Einkauf relevanten Informationen.

Für die Produktion steht das TBeProductionOrderBO zur Verfügung.

Achtung:

Dieses BO steht im Codeblock derzeit nur für die Verwendung innerhalb der "bei Übertragung von BO-Daten"-Events zur Verfügung.

In allen anderen Situationen darf das Business Objekt nicht verwendet werden.

Eigenschaften:

Eigenschaften
CbOrderPosNo | Bestell-Nr. (Dab035:BESTPOSNR)
CbDate | Datum der Bestellung (Dab035:DATUM)
CbLastSupplierOverdueLetterDate | Datum letzte Lieferanmahnung (Dab035:LMDATUM)
CbArticleNo | Artikel-Nr. (Dab035:ARTNR)
CbSupplierNo | Lieferanten-Nr. (Dab035:LIEFNR)
CbCommiss | Kommissions-Nr. (Dab035:KOMMISS)
CbTimeLimit | Liefertermin (Dab035:TERMIN)
CbTimeLimitIndex | Termin-Index(intern) (Dab035:TERM_INDEX)
CbDebitTimeLimit | Soll-/Wunschtermin (Dab035:SOLLTERMIN)
CbReleaseArrears | Termin für nächsten Teilabruf (Dab035:TERMIN_AB)
CbOrdFetchNo | Bestell-Abruf-Nummer (Dab035:BANUMMER)
CbCustomerOrderPosNo | Zu Auftrags-Pos in Dab055 (Dab035:APNUMMER)
CbCurrencyID | Einkaufs-Währung (Dab035:WAEKZ)
CbForeignCurrencyRate | Einkaufs-Kurs (Dab035:FW_KURS)
CbPriceUnitPurchase | Preis-Einheit EK (Dab035:PE)
CbUnitPurchase | ME Einkauf (Dab035:ME_EK)
CbUnitFactorPurchase | Faktor ME_EK => ME (Dab035:ME_UMR)
CbPriceUnitFactorSales | Faktor ME => ME_PE (Dab035:ME_UMR_PE)
CbPurchasePriceForCurrency | Einkaufs-Preis (Dab035:SOEK)
CbDiscount1 | Einkaufs-Rabatt % 1 (Dab035:RABATT1)
CbDiscount2 | Einkaufs-Rabatt % 2 (Dab035:RABATT2)
CbDiscount3 | Einkaufs-Rabatt % 3 (Dab035:RABATT3)
CbOrderQuantity | Bestellmenge (Dab035:MENGE)
CbDebitQuantity | Soll-/Wunschmenge (Dab035:SOLLMENGE)
CbQuantityPurchase | Bestellmenge ME EK (Dab035:MENGE_EK)
CbQuantityStockReceipt | Menge im Wareneingang in ME_EK (Dab035:MENGE_WE)
CbPackagingUnit | KZ Menge-Einheit (Dab035:VE_NR)
CbAdditionalText1 | Zusatz-Text 1 (Dab035:Z_TEXT1)
CbAdditionalCostMode1 | Zusatz-Kosten-Typ 1 (Dab035:Z_MODE1)
CbAdditionalCost1 | Zusatz-Kosten 1 (Dab035:Z_KOST1)
CbAdditionalText2 | Zusatz-Text 2 (Dab035:Z_TEXT2)
CbAdditionalCostMode2 | Zusatz-Kosten-Typ 2 (Dab035:Z_MODE2)
CbAdditionalCost2 | Zusatz-Kosten 2 (Dab035:Z_KOST2)
CbAdditionalText3 | Zusatz-Text 3 (Dab035:Z_TEXT3)
CbAdditionalCostMode3 | Zusatz-Kosten-Typ 3 (Dab035:Z_MODE3)
CbAdditionalCost3 | Zusatz-Kosten 3 (Dab035:Z_KOST3)
CbDutyCostInPercent | Beschaffungs-/Zollkosten in % (Dab035:ZOLLPROZ)
CbDutyCostAbsolute | Beschaffungs-/Zollkosten Betrag (Dab035:ZOLLBETR)
CbImpersonalAccount | Sachkonto (Dab035:SACHKONTO)
CbCostCenter | Kostenstelle (Dab035:KOSTENST)
CbSupplierDeliveryConfirmationNo | AB des Lieferanten (Dab035:LIEF_AB)
CbCustomerOrderNo | Kunden-Auftrag (Dab035:ANUMMER)
CbCustomerOrderNoSync | Weiterverrechnung Kundenauftrag (Dab035:ANUMMER_X)
CbTransactionType | Intrastat-Schl. Geschäftsart (Dab035:GESCHART)
CbArrivalProcedure | Intrastat-Schl. Eing. Verfahren (Dab035:VERFAHR)
CbTransportWay | Intrastat-Schl. Verkehrszweig (Dab035:VERKEHR)
CbPortNumber | Intrastat.Schl. Hafen/Flughafen (Dab035:HAFENNR)
CbLocation | Standort (Dab035:STANDORT)
CbDepartment | Abteilungs-Nr. (Dab035:ABTEILUNG)
CbSerialNumbers | Seriennr.-Liste (Dab035:SNUM_LIST)
CbMemo | Langtext (Dab035:MEMO)
CbLastChanged | Letztes Änderungs-Datum (Dab035:BUCH_DATUM)
CbSubsidiarySend | ADK: An Zentrale gesendet (Dab035:FIL_SEND)
CbSubsidiaryPackageNo | ADK: Paket-Nr. der Sendung (Dab035:FIL_PKG)
CbProjectID | Bezug auf ein Projekt (Dab035:PRJ_ID)

Methoden
CbInsert | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbEdit | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbCancel | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbPost | Diese Methode ist für dieses Business-Objekt nicht verfügbar
CbDelete | Diese Methode ist für dieses Business-Objekt nicht verfügbar

Verfügbare Ereignisse

Siehe auch:

TBePurchaseDispositionBO

TBePurchaseDispositionBusinessController

TBeProductionOrderBusinessController

TBePurchaseDispositionPlanningBO

TBeProductionOrderBO


TBePurchaseOrderBusinessController

TBePurchaseOrderBusinessControllerroller

Die Klasse TBePurchaseOrderBusinessController stellt Funktionen und Methoden für die Veränderung von Bestellungen bereit.

Achtung:

Dieser Business Controller steht im Codeblock derzeit nur für die Verwendung innerhalb der "bei Übertragung von BO-Daten"-Events zur Verfügung.

In allen anderen Situationen darf der Business Controller nicht verwendet werden.

Siehe auch:

TBePurchaseDispositionBO

TBePurchaseDispositionBusinessController

TBeProductionOrderBusinessController

TBePurchaseDispositionPlanningBO

TBeProductionOrderBO

TBePurchaseDispositionBC


TBeRemovalData, TBeCumRemovalData

TBeRemovalData, TBeCumRemovalData

Klassen zum Druck von Einzel- bzw. Sammel-Entnahmescheinen.

Eigenschaften:

TLType:N default = 0 = Kopftermin prüfen, 1 = Positionstermin prüfen

MaxTimeLimit:C default = leer, Maximaler zu druckender Termin (KW-Termine erlaubt)

weitere Eigenschaften siehe Vorfahren-Klassen!

Hierarchie:

TBePrintData -> TBeOfferData -> TBe[Cum]DelivData -> TBe[Cum]RemovalData

Hinweise:

Das Objekt ist abgeleitet von TBePrintData und TBeOfferData und führt lediglich die o.g. Eigenschaften neu ein, um den Zeitraum der zu berücksichtigenden Aufträge einzuschränken.

Beispiel

function PrintEntnahme()

   |oPrint|

   oPrint := CreateObject("TBeRemovalData"),

   startseq

      oPrint.QuietMode    := true,

      oPrint.TLType       := 0,                // Kopftermine

      oPrint.MaxTimeLimit := "KW."+KW(DATE()), // alle bis Ende Woche (optional)

      oPrint.PrintDocNo      := 123456,           // nur Auftragsnr. (optional)

      oPrint.ExecPrint,                        // Nächsten, einzelnen drucken

   always

      DestroyObject(oPrint),

   stopseq,

end,

Siehe auch:

TBeDelivData, TBeCumDelivData

TBePrintData

TBeCumBillData


TBeResourceBO

TBeResourceBO

Die Klasse TBeResourceBo kapselt Eigenschaften und Funktionen des Ressourcenstamm(Dab330).

Eigenschaften:

Tabellen und Felder
Dab330:O | Dab330 Tabellenobjekt (nur für Zugriffe auf Individual-Felder)
CbID:I | Ressourcen ID (entspricht Dab330:ID)
CbCreated:D | Erstellt am / um (entspricht Dab330:ERSTELLT)
CbCreatedBy:C | Erstellt durch (entspricht Dab330:PLATZ)
CbChanged:D | Zuletzt geändert am / um (entspricht Dab330:GEAENDERT)
CbChangedBy:C | Zuletzt geändert durch (entspricht Dab330:GEAEND_USR)
CbDescription:C | Bezeichnung (entspricht Dab330:BEZ)
CbGroupValue:C | Gruppe (entspricht Dab330:GRUPPE)
CbFunctionValue:C | Hauptfunktion (entspricht Dab330:FUNKTION)
CbDateHire:D | Verfügbar ab (entspricht Dab330:DATUM_EIN)
CbDateDismiss:D | Verfügbar bis (entspricht Dab330:DATUM_AUS)
CbAvailableInCalendar:L | Verfügbar im Terminkalender (entspricht Dab330:KALENDER)
CbPhoneExtension:C | Telefon-Durchwahl (entspricht Dab330:TEL_DW)
CbPhoneNumber:C | Telefon (entspricht Dab330:TELEFON)
CbMobileNumber:C | Handy (entspricht Dab330:MOBILNR)
CbEmail:C | E-Mail-Adresse (entspricht Dab330:EMAIL)
CbShortDescription:C | Kurzname (entspricht Dab330:KURZBEZ)
CbMemo:C | Kommentar (entspricht Dab330:MEMO)
CbLocked:L | Gesperrt (entspricht Dab330:SPERRE)
CbDefaultWorkTimeShift:N | Betriebszeit (entspricht Dab330:BETRZ_ID)
CbDebitHours_Sunday:N | Sollstunden Sonntag (entspricht Dab330:SOLLSTD_1)
CbDebitHours_Monday:N | Sollstunden Montag (entspricht Dab330:SOLLSTD_2)
CbDebitHours_Tuesday:N | Sollstunden Dienstag (entspricht Dab330:SOLLSTD_3)
CbDebitHours_Wednesday:N | Sollstunden Mittwoch (entspricht Dab330:SOLLSTD_4)
CbDebitHours_Thursday:N | Sollstunden Donnerstag (entspricht Dab330:SOLLSTD_5)
CbDebitHours_Friday:N | Sollstunden Freitag (entspricht Dab330:SOLLSTD_6)
CbDebitHours_Saturday:N | Sollstunden Samstag (entspricht Dab330:SOLLSTD_7)
CbCostRate:N | Kostensatz der Ressource (entspricht Dab330:EKP)
CbPriceUnit:N | Preis-Einheit Ress.-Kostensatz (entspricht Dab330:PE)
CbPersonSetupCostRate:N | Kostensatz Rüsten an Ressource (entspricht Dab330:EKP_PERS_R)
CbPersonSetupPriceUnit:N | Preis-Einheit Rüsten an Ress. (entspricht Dab330:PE_PERS_R)
CbPersonProductionCostRate:N | Kostensatz Fertigen an Ress. (entspricht Dab330:EKP_PERS_S)
CbPersonProductionPriceUnit:N | Preis-Einh. Fertigen an Ress. (entspricht Dab330:PE_PERS_S)

Funktionen und Methoden
CbMainFunctionAsText():C | Haupt-Funktion als Text ermitteln
CbEdit() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbInsert() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbDelete() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbCancel() | Diese Methode ist für diese Business Objekt nicht verfügbar.
CbPost() | Diese Methode ist für diese Business Objekt nicht verfügbar.

Verfügbare Ereignisse

Berechnung Suchtext für Volltextsuche

nach der Neuanlage

vor dem Speichern

vor dem Löschen

Beispiel

// Für Codebeispiel siehe TBeResourceBC (noch nicht erstellt!)


TBeRichEditEx

Die Klasse TBeRichEditEx kapselt Funktionen für das Markieren und Austauschen/Einfügen von Text in einem RichEdit.

Eigenschaften

AllowSelection:L

(default) True = Text kann selektiert werden

CBHighLightStrings:C

Strings die farblich hervorgehoben werden sollen

ScrollBars:N

(default) ssBoth = Scrollbalken sowohl vertikal als auch horizontal

ssHorizontal = horizontaler Scrollbalken

ssVertical = vertikaler Scrollbalken

ssNone = kein Scrollbalken

SelAll:L

True = Selektiert den ganzen Text

False = Hebt Selektion auf

SelLength:N

Länge der Selektion

SelStart:N

Anfangsposition der Selektion

SelText:C

Aktuell selektierter Text

Text

Rtf-Text, wenn die Eigenschaft 'TextOnly' auf False gesetzt ist

Reiner Text, ohne Formatierung, wenn 'TextOnly' auf True gesetzt ist

TextOnly:L

Text wird frei von jeglicher Formatierung dargestellt

ToolbarVisible:L

(default) False = Toolbar zum Formatieren des Textes wird nicht angezeigt

Funktionen / Methoden

CBFormatSelectedText

Selektierten Text formatieren

aProperties:U

Ein Array mit 7 Elementen

1. Element: Schriftart

2. Element: Schriftgröße

3. Element: Schriftstil: Fett

4. Element: Schriftstil: Kursiv

5. Element: Schriftstil: Unterstrichen

6. Element: Vordergrundfarbe

7. Element: Hintergrundfarbe

CBGetCurrentWord():C

Gibt das Wort an der aktuellen Cursorposition innerhalb eines RichEdits zurück.

CBSelectCurrentWord():C

Selektiert das Wort bei der aktuellen Cursorposition in einem RichEdit.

CBInsertTextAtWord():L

Fügt einen übergebenen Text an der aktuellen Cursorposition in einem RichEdit ein.

aText:C

Einzufügender Text

Beispiel

| oDAB065:DB:= 'waDAB065' |

//******************************************************************************

// Zur Verwendung auf der Memo-Maske

// Ermittelt das aktuelle Wort im Text und ersetzt dieses durch einen Textbaustein

//******************************************************************************

// @Param: aSender = Instanz des Controls das die Funktion aufruft

//                   (z.B. CodeblockButton -> SELF)

//         aTable =  Tabellen-Objekt (z.B. DAB065),

//         aFieldName = Memo-Feld-Name (z.B. 'MEMO')

//         bReplaceCurrentWord = das aktuelle Wort durch den Textbaustein erstezen

//                               sonst wird der Textbaustein dirket an der Cursor-

//                               Position eingefügt

// @Result: null

//******************************************************************************

function InsertTextblockAtCurrentWord(oOwner, oTable, cFieldName, bReplaceCurrentWord)

| oRichMemo, oInsertField, cCurrentWord, cTextBlock |

   startseq,

      // Feld ermitteln

      oInsertField := DBField(cFieldName, oTable),

      // Zugehöriges RichView ermitteln

      oRichMemo    := FindFieldComponent(GetOwner(oOwner), oInsertField, 'TComponent'),

      if not empty(oRichMemo) then

         // Aktuelles Wort am Cursor ermitteln

         cCurrentWord := oRichMemo.CBGetCurrentWord() ,

         if not empty(cCurrentWord) then

            // Textbaustein für Wort ermitteln (DAB350)

            cTextBlock := Lookup(waDAB350, 'DAB351', {{"AUTOTEXT_" + Upper(cCurrentWord)}}, "MEMO", ""),

            // Textbaustein gefunden

            if not empty(RTFToText(cTextBlock)) then

               // ggf Wort selektiern

               if bReplaceCurrentWord then

                  oRichMemo.CBSelectCurrentWord(),

               endif,

               // Aktuelles Wort durch Textbaustein ersetzen

               oRichMemo.CBInsertTextAtWord(cTextBlock),

            else

               StatusError('Kein Textbaustein für "' + cCurrentWord + '" gefunden!'),

            endif,

         endif,

      endif,

   onerror,

      // Fehler ignorieren

      writeln(GetErrorText()),

      MessageDlg('Fehler' + crlf + crlf + GetErrorText() , mtError ),

   stopseq,

end,

InsertTextblockAtCurrentWord(Self, oDab065, 'MEMO', True)


TBeRightsTable

TBeRightsTable

Funktionen und Methoden
CheckRight_Insert() | Prüfen des Neu-Rechts für den aktuellen Datensatz auf der Tabelle
CheckRight_Read() | Prüfen des Lesen-Rechts für den aktuellen Datensatz auf der Tabelle
CheckRight_Edit() | Prüfen des Ändern-Rechts für den aktuellen Datensatz auf der Tabelle
CheckRight_Delete() | Prüfen des Löschen-Rechts für den aktuellen Datensatz auf der Tabelle
CheckRight_Validate() | Prüfen des Validierungs-Rechts für den aktuellen Datensatz auf der Tabelle

Beispiel

| oTestTable |

oTestTable := BeOpen(waKDN705), // Die verwendete Tabelle muss entsprechende Rechte eingetragen haben

startseq

   // CheckUserRights ist standardmäßig nicht aktiviert daher ist hier das Ergebnis der Abfragen immer True

   oTestTable.CheckUserRights := False,

   writeln('--- CheckUserRights = False ---'),

   writeln('Neu-Recht',          oTestTable.CheckRight_Insert()),

   writeln('Lesen-Recht',        oTestTable.CheckRight_Read()),

   writeln('Ändern-Recht',       oTestTable.CheckRight_Edit()),

   writeln('Löschen-Recht',      oTestTable.CheckRight_Delete()),

   writeln('Validierungs-Recht', oTestTable.CheckRight_Validate()),

   oTestTable.CheckUserRights := True, // Ab jetzt werden die Rechte der Tabelle geprüft

   writeln('--- CheckUserRights = True ---'),

   writeln('Neu-Recht',          oTestTable.CheckRight_Insert()),

   writeln('Lesen-Recht',        oTestTable.CheckRight_Read()),

   writeln('Ändern-Recht',       oTestTable.CheckRight_Edit()),

   writeln('Löschen-Recht',      oTestTable.CheckRight_Delete()),

   writeln('Validierungs-Recht', oTestTable.CheckRight_Validate()),

always

   BeClose(oTestTable),

stopseq,


TbeSchedulerEventBO

TbeSchedulerEventBO

Die Klasse TbeSchedulerEventBO kapselt den Zugriff auf die Tabelle DabTRM - Terminkalender.

Eigenschaften
CbMeetingID:N | Besprechungs-ID des Termins
CbResWA:N | WorkArea des Teilnehmers (Dab262 Person oder Dab330 Ressource)
CbResID:N | ID des Teilnehmers
CbSubject:C | Bezeichnung des Termins
CbInfoText:C | Informations-Text
CbStartDate:D | Startzeitpunkt
CbEndDate:D | Endezeitpunkt
CbTimeZone:N | Zeitzone
CbActStart:N | Startdatum in UTC
CbActEnd:N | Endedatum in UTC
CbCity:C | Ort
CbRecurrenceType:N | aktuell nicht verwendet
CbRecurrenceParent:N | aktuell nicht verwendet
CbRecurrenceNo:N | aktuell nicht verwendet
CbRecurrenceInfo:C | aktuell nicht verwendet
CbAllDay:L | Ganztägiger Termin
CbReminder:L | Erinnerung aktiv
CbReminderDate:D | Datum der Erinnerung
CbReminderMin:N | Erinnerung X Minuten vor dem Termin
CbStatus:N | Status des Termins; 0 - frei; 1 - vorbehaltlich; 2 - belegt; 3 - abwesend
CbRole:C | Rolle des Teilnehmers; O = Organisator; T = Teilnehmer
CbAttendance:C | Anwesenheit; E = erforderlich; O = optional
CbKind:N | Termin-Art; 0 - Termin; 1 - Feiertag; 2 - Krankheit; 3 - Urlaub; 4 - Fortbildung; 5 - Berufsschule; 6 - Kurzarbeit; 7 - Sonderurlaub; 8 - Betriebsunfall; 9 - Zeitausgleich; 10 - Dienstreise; 11 - Betriebsruhe
CbMeetingType:N | Termin-Typ; 10 - Beratung; 20 - Vertrieb; 30 - Präsentation; 40 - Persönlich; 90 - Sonstiges
CbResponse:N | Status der Rückmeldung; 10 - nicht geantwortet; 20 - zugesagt; 30 - mit Vorbehalt; 40 - abgesagt
CbReadRightInfo:C | Infoansicht für User; '/' getrennte Liste von User-Nummern
CbReadRightInfoManual:L | Berechtigung für Infoansicht wurde manuell geändert
CbReadRightFull:C | Vollansicht für User; '/' getrennte Liste von User-Nummern
CbReadRightFullManual:L | Berechtigung für Vollansicht wurde manuell geändert
CbPrivateEvent:L | Termin ist Privat

Beispiel

// siehe TBeSchedulerEventBusinessController

Siehe auch:

TBeSchedulerEventBusinessController

TBeSchedulerEventParticipantList

TBeSchedulerEventIDList

TBeSchedulerEventIDItem

TBeSchedulerEventParticipantItem


TBeSchedulerEventBusinessController

TBeSchedulerEventBusinessController

Die Klasse TBeSchedulerEventBusinessController kapselt Funktionen zur Ermittlung von Terminen und deren Rechte.

Funktionen

CbCalcParticipantList:O

Liefert eine Liste (TBeSchedulerEventParticipantList) aller Teilnehmer eines Termins zurück.

aEventBO:O

Positioniertes Termin BusinessObject (TbeSchedulerEventBO)

CbCalcUpcomingEventIDListForCurrentUser:O

Liefert eine Liste (TBeSchedulerEventIDList) mit allen anstehenden Terminen des aktuellen Benutzers zurück.

aMaxCount:N

Maximale Anzahl der zukünftigen Termine

CbCalcUpcomingEventIDListByPersonnelID:O

Liefert eine Liste (TBeSchedulerEventIDList) mit allen anstehenden Terminen für ein Personal zurück.

aPersonnellID:N | Personal-ID (Dab262:ID)
aMaxCount:N | Maximale Anzahl der zukünftigen Termine

CbCalcUpcomingEventIDListByPersonnelIDAndStartDate:O

Liefert eine Liste (TBeSchedulerEventIDList) mit allen anstehenden Terminen für ein Personal ab einem festen Zeitpunkt zurück. Damit lassen sich auch veraltete Termine abfragen.

aPersonnellID:N | Personal-ID (Dab262:ID)
aMaxCount:N | Maximale Anzahl der zukünftigen Termine
aStartDate:D | Datum des "Jetzt" Zeitpunktes, ab welchem die anstehenden Termine berechnet werden

CbCalcReadRight:N

Berechnet die Leseberechtigung für einen Termin.

0 (serNone) - Keine Berechtigung

1 (serInfo) - Nur eingeschränkte Anzeige-Berechtigungen

2 (serFull) - Volle Berechtigungen

3 (serAbsence) - Nur Berechtigung zur Anzeige der Abwesenheit

aEventBO:O

Positioniertes Termin BusinessObject (TbeSchedulerEventBO)

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: TbeSchedulerEventBusinessController

//               BusinessController zur Ermittlung von Termin Informationen

//##############################################################################

//##############################################################################

| m_oSchedulerEventBO, m_oSchedulerEventBC |

function GetParticipantsForEvent(nEventID)

  |oList, i, oParticipant|

  m_oSchedulerEventBO.CbGotoID(nEventID),

  oList := m_oSchedulerEventBC.CbCalcParticipantList(m_oSchedulerEventBO),

  startseq

     writeln('Teilnehmer für Termin ' + Str(nEventID)),

     for i := 0 to oList.CbCount - 1 do

        oParticipant := oList.CbItem(i),

        writeln(oParticipant.CbDescription),

     next,

  always

     DestroyObject(oList),

  stopseq,

end,

function GetReadRightForEvent(nEventID)

  Result := '',

  m_oSchedulerEventBO.CbGotoID(nEventID),

  case m_oSchedulerEventBC.CbCalcReadRight(m_oSchedulerEventBO)

     of 0 :: Result := 'Keine Berechtigung',

     of 1 :: Result := 'Nur Infoansicht',

     of 2 :: Result := 'Volle Berechtigungen',

     of 3 :: Result := 'Nur Abwesenheitsanzeige',

  endcase,

end,

function GetUpcomingEventsForPerson(nPersID, dStartDate)

  |oList, i, oEventInfo|

  oList := m_oSchedulerEventBC.CbCalcUpcomingEventIDListByPersonnelIDAndStartDate(nPersID, 10, dStartDate),

  startseq

     writeln('Nächste Termine für Person-ID ' + Str(nPersID)),

     for i := 0 to oList.CbCount - 1 do

        oEventInfo := oList.CbItem(i),

        m_oSchedulerEventBO.CbGotoID(oEventInfo.CbEventID),

        writeln(m_oSchedulerEventBO.CbSubject),

     next,

  always

     DestroyObject(oList),

  stopseq,

end,

function GetMyUpcomingEvents()

  |oList, i, oEventInfo|

  oList := m_oSchedulerEventBC.CbCalcUpcomingEventIDListForCurrentUser(10),

  startseq

     writeln('Meine nächsten Termine '),

     for i := 0 to oList.CbCount - 1 do

        oEventInfo := oList.CbItem(i),

        m_oSchedulerEventBO.CbGotoID(oEventInfo.CbEventID),

        writeln(m_oSchedulerEventBO.CbSubject),

     next,

  always

     DestroyObject(oList),

  stopseq,

end,

//##############################################################################

m_oSchedulerEventBO := CreateObject('TbeSchedulerEventBO'),

m_oSchedulerEventBC := CreateObject('TbeSchedulerEventBusinessController'),

startseq

   m_oSchedulerEventBC.CbDataModule := m_oSchedulerEventBO.CbDataModule,

   GetParticipantsForEvent(10),

   writeln('Berechtigung:', GetReadRightForEvent(10)),

   GetUpcomingEventsForPerson(Lookup(waDab262, 'DAB263', {{MBEUSERPERSNR}}, 'ID'), Now()),

   GetMyUpcomingEvents(),

always

   DestroyObject(m_oSchedulerEventBO),

   DestroyObject(m_oSchedulerEventBC),

stopseq,

Siehe auch:

TbeSchedulerEventBO

TBeSchedulerEventParticipantList

TBeSchedulerEventIDList

TBeSchedulerEventIDItem

TBeSchedulerEventParticipantItem


TBeSchedulerEventIDItem

TBeSchedulerEventIDItem

Die Klasse TBeSchedulerEventIDItem repräsentiert die ID eines Termins.

Eigenschaften
CbEventID:N | ID des Termins

Beispiel

// siehe TBeSchedulerEventBusinessController

Siehe auch:

TBeSchedulerEventBusinessController

TbeSchedulerEventBO

TBeSchedulerEventParticipantList

TBeSchedulerEventIDList

TBeSchedulerEventParticipantItem


TBeSchedulerEventIDList

TBeSchedulerEventIDList

Die Klasse TBeSchedulerEventIDList ist eine Liste welche IDs zu Terminen beinhaltet.

Eigenschaften

CbCount:N

Liefert die Anzahl der Termine aus der Liste zurück.

Funktionen

CbItem:O

Liefert einen Termin (TBeSchedulerEventIDItem) aus der Liste zurück.

aIndex:N

Index des Termins aus der Liste

Beispiel

// siehe TBeSchedulerEventBusinessController

Siehe auch:

TBeSchedulerEventBusinessController

TbeSchedulerEventBO

TBeSchedulerEventParticipantList

TBeSchedulerEventIDItem

TBeSchedulerEventParticipantItem


TBeSchedulerEventParticipantList

TBeSchedulerEventParticipantList

Die Klasse TBeSchedulerEventParticipantList ist eine Liste welche Informationen der Teilnehmer zu einem Termin beinhaltet.

Eigenschaften

CbCount:N

Liefert die Anzahl der Teilnehmer aus der Liste zurück.

Funktionen

CbItem:O

Liefert einen Teilnehmer (TBeSchedulerEventParticipantItem) aus der Liste zurück.

aIndex:N

Index des Teilnehmers aus der Liste

Beispiel

// siehe TBeSchedulerEventBusinessController

Siehe auch:

TBeSchedulerEventBusinessController

TbeSchedulerEventBO

TBeSchedulerEventIDList

TBeSchedulerEventIDItem

TBeSchedulerEventParticipantItem


TBeSchedulerEventParticipantItem

TBeSchedulerEventParticipantItem

Die Klasse TBeSchedulerEventParticipantItem stellt Informationen zu einem Teilnehmer eines Termins bereit.

Eigenschaften
CbResWA:N | WorkArea des Teilnehmers (Dab262 Person oder Dab330 Ressource)
CbResID:N | ID des Teilnehmers
CbEventID:N | ID des Termins
CbMeetingID:N | Besprechungs-ID des Termins
CbDescription:C | Bezeichnung des Teilnehmers

Beispiel

// siehe TBeSchedulerEventBusinessController

Siehe auch:

TBeSchedulerEventBusinessController

TbeSchedulerEventBO

TBeSchedulerEventParticipantList

TBeSchedulerEventIDList

TBeSchedulerEventIDItem


TBeSearchEdit

TBeSearchEdit

Klasse für Suchtext-Eingaben mit verzögerter Auslösung der Suche.

Eigenschaften:

CharCase:N | (default) ecNormal = Eingabe wird normal angezeigt ecUpperCase = Eingabe wird nur in Großbuchstaben angezeigt ecLowerCase = Eingabe wird nur in Kleinbuchstaben angezeigt
DelayChangeInterval:N | Zeit in Millisekunden, nach deren Ablauf die Suche gestartet wird, wenn `ssoSearchOnTimer' true ist.
SearchOptions | -
ssoSearchOnBtnClick:L | (default) true = Suche startet bei Klick auf das Lupen-Symbol
ssoSearchOnReturn:L | (default) true = Suche startet nach drücken von [Enter]
ssoSearchOnTimer:L | (default) true = Suche startet nach der durch 'DelayChangeInterval' bestimmten Zeit
ShowButton:L | (default) true = Es wird ein kleines Lupensymbol am rechten Rand des Controls angezeigt
TextHintProperties | -
TextHint:C | Hinweis im Suchfeld (z.B: "Suche...", etc.)
TextHintFont:C | Die Schrift des Hinweises
TextHintWhileFocused:L | Gibt an, ob der Hinweis beim Fokussieren des Controls bestehen bleibt. (default) true = Hinweis bleibt beim Fokussieren sichtbar.
SearchButtonStyle:N | Gibt an, ob die Suche den Button ein- und ausschaltbar macht. (default) bsbsDefault = der Button bleibt gleich bsbsToggle = der Button wird ein "Toggle" zwischen "Suche" und "Filter". Kann umgeschaltet werden durch Maustastendruck auf dem Button oder durch die Eigenschaft "SeachMode".
SearchMode:N | Gibt an, in welchem Modus sich der Edit findet. Kann nur gesetzt werden, wenn SearchButtonStyle = bsbsToggle. (default) bsmSearch = Suchmodus bsmFilter = Filtermodus

Aktive Eigenschaften (Methoden):

OnSearchExecute | Führt die zugewiesene Funktion aus, wenn die Suche (z.B. durch Tastendruck) gestartet wird.
OnDropDown | Führt die zugewiesene Funktion aus, wenn die DropDown-Leiste geöffnet wird. (z.B. mit [Alt] + [ArrowDown])
OnBtnClick | Führt die zugewiesene Funktion aus, wenn das Lupensymbol (falls vorhanden) angeklickt wird.

Beispiel

//******************************************************************************

// Beschreibung: Demo der Klasse TBeSearchEdit

//******************************************************************************

| oForm, oSearch, oDataSource, oMainGrid, oMemTable |

//##############################################################################

//##############################################################################

// Events

//##############################################################################

//##############################################################################

//******************************************************************************

// Bei Suche

//******************************************************************************

function oSearchExecute( Sender )

  if (Sender.Text <> '') then

     if Sender.SearchMode = bsmFilter then

        oMemTable.Filter   := "Upper('" + Sender.Text +

                              "') $ Upper(NAME) OR Upper('" + Sender.Text +

                              "') $ Upper(ADRESSE)",

        oMemTable.Filtered := true,

     else

        Meld('Such-Modus ist bei Mem-Tables nicht unterstützt!'),

        Sender.SearchMode := bsmFilter,

        oSearchExecute(Sender),

     endif,

  else

     oMemTable.Filter   := '',

     oMemTable.Filtered := false,

  endif,

  oMemTable.OrderBy := 'NAME',

end,

//##############################################################################

//##############################################################################

// Funktionen

//##############################################################################

//##############################################################################

//******************************************************************************

// MemTable erstellen

//******************************************************************************

function CreateMemTable(aFields)

  | oMem, nArrLen, nC |

  nC := 1,

  nArrLen := ALen(aFields),

  oMem := CreateObject('TMemCalcTable'),

  // Felder hinzufügen:

  while nC <= nArrLen do

     AddMemField(oMem, aFields[nC, 1], aFields[nC, 2],

                       aFields[nC, 3], aFields[nC, 4]),

     nC++,

  end,

  Result := oMem,

end,

//******************************************************************************

// MemTable mit Datensätze füllen

//******************************************************************************

function FillMemTable(oMem)

  | aContacts, nC, nArrLen |

  aContacts := {

                {'Max Mustermann', '0123456789', 'Straße 1, 12345 München'},

                {'Erika Mustermann', '0123456789', 'Straße 1, 12345 München'},

                {'John Wayne', '0987656789', 'Straße 5, 54321 Hamburg'},

                {'Horst Hansen', '6234858', 'Straße 11, 20945 Stuttgart'},

                {'Herbert Huber', '016789', 'Straße 6, 11145 Berlin'}

                },

  nArrLen := ALen(aContacts),

  nC      := 1,

  while nC <= nArrLen do

     MyAppend(oMem),

      oMem:NAME    := aContacts[nC, 1],

      oMem:TELEFON := aContacts[nC, 2],

      oMem:ADRESSE := aContacts[nC, 3],

     MyPost(oMem),

     nC++,

  end,

  oMem.OrderBy := 'NAME',

end,

//******************************************************************************

// Initialisierung der MemTable

//******************************************************************************

function Init()

  oMemTable := CreateMemTable({

                               {'Name',    'C', 30, 0},

                               {'Telefon', 'C', 12, 0},

                               {'Adresse', 'C', 25, 0}

                               }),

  oMainGrid.DataSource      := oDataSource,

  oMemTable.Active          := true,

  oDataSource.DataSet       := oMemTable,

  oMainGrid.ReadWriteProps  := 0,

  oMainGrid.RegisterDataset := oMemTable,

  FillMemTable(oMemTable),

  DbGoTop(oMemTable),

end,

//##############################################################################

//##############################################################################

// Initialisierung

//##############################################################################

//##############################################################################

oForm       := CreateObject('TFormEx'),

oSearch     := CreateObject('TBeSearchEdit',, oForm, oForm),

oMainGrid   := CreateObject('TBeAltGrid',,    oForm, oForm),

oDataSource := CreateObject('TDataSourceEx',, oForm, oForm),

// oFrom

oForm.OrigCapt  := 'TBeSearchEdit-Demo',

oForm.Font.Name := 'Segoe UI',

oForm.Position  := poMainFormCenter,

oForm.Width     := 480,

// oMainGrid

oMainGrid.Align            := alClient,

oMainGrid.AlignWithMargins := true,

// oSearch

oSearch.Align                       := alTop,

oSearch.AlignWithMargins            := true,

oSearch.TextHintProperties.TextHint := 'Suchtext tippen -> Suche wird ausgelöst. ' +

                                       'ESC löscht den aktuellen Suchtext.',

oSearch.SearchButtonStyle := 1,

AssignEvent(oSearch, 'OnSearchExecute', 'oSearchExecute'),

Init(),

ShowModal(oForm),


TbeSrPosUpdParams

TbeSrPosUpdParams

Diese readonly Klasse dient als Basis für Event "bei Berechnung der WE-Jobliste".

Eigenschaften:

Eigenschaften
S255_OrderPosNo:C | String - Auftrag & Position Nummer
S255_ReceiPosNo:C | String - Bestellungsnummer
E255_CurrQuant:N | Numerisch - Istmenge nach Zählung
S255_ArtNo:C | String - DAB010 Artikel Nummer
B255_Done:L | Logisch - Position erledigt
E255_AccQuant:N | Numerisch - Verbuchte/Vereinnahmte Menge
I255_JobList:N | Numerisch - Altes Wert - Zuordnung zu Jobliste
D255_NeedAppoint:D | Datum - Bedarfs-Termin
I250_AddressNo:N | Numerisch - Absender-Nr. - Lieferanten/Kunden-Nr.
S250_SenderType:C | String - Absender-Typ (Z = Lieferant, K = Kunde, U = Unbekant)
S250_ReceiType:C | String - WE-Typ; (W = Wareneingang, B = Beistellung, R = Retoure, K = Reklamation, U = Unbekannt)
S250_ReceiNo:C | String - Waren-Eingangs-Nr.
B250_LocRestore:L | Logisch - Standort-Umlagerung
I255_D035_ID:N | Numerisch - Datensatz-ID d. Best-Rückstand

Readonly: Änderungen von Eigenschaften haben keine Auswirkung auf den aktuellen Prozess.

Beispiel

//################################################################################

// Dieser Event wird ausgeführt bei Update/Synchronisation des Wareneingangs.

// Es kann entschieden werden, welche JobListe die Position zugeordnet wird.

// Readonly Felder des Objekts oWEPosInfoParams der Klasse TbeSrPosUpdParams:

//  S255_OrderPosNo

//  S255_ReceiPosNo

//  E255_CurrQuant

//  S255_ArtNo

//  B255_Done

//  E255_AccQuant

//  I255_JobList

//  D255_NeedAppoint

//  I250_AddressNo

//  S250_SenderType

//  S250_ReceiType

//  S250_ReceiNo

//  B250_LocRestore

//  I255_D035_ID

//

// Rückgabe: Typ von Update/JobList

//     1 = Wareneingang mit QS-Prüfung

//     2 = Wareneingang ohne QS-Prüfung

//     3 = Wareneingang ohne Rückstandszuordnung

//     5 = Kunden-Retoure

//     6 = Kunden-Reklamation

//     8 = Sonstiges / Unbekannt (keine Ist-Menge)

//     9 = Nicht identifiziert (Absender und/oder Artikel)

//

//################################################################################

| nEvtNo:P1, nJobList:P2, oDab010:P3, oDab510:P4, oWEPosInfoParams:P5, nFactor:P6 |

//Umlagerung wird immer mit QC-Prüfung

if (nJobList = 2) and (oWEPosInfoParams.B250_LocRestore) then

 nJobList := 1,

endif,

nJobList

Siehe auch:

Event "bei Berechnung der WE-Jobliste"


TBeStandardTable

TBeStandardTable

Die Klasse TBeStandardTable kapselt Eigenschaften und Funktionen zum Lesen und Verändern von Tabellen-Daten.

Eigenschaften

CbFilter:C

Liefert den aktuellen Filter zurück oder setzt ihn.

CbFiltered:L

Aktiviert oder deaktiviert die Filterung der Tabelle.

CbFieldCount:N

Liefert die Anzahl der Datenbank-Felder zurück.

CbBoF:L

"Begin of File". Gibt an, ob sich die Tabelle auf dem ersten Datensatz befindet.

CbEoF:L

"End of File". Gibt an, ob sich die Tabelle auf dem letzten Datensatz befindet.

CbBookmark:C

Speichert die Position des aktuellen Datensatzes in einem Bookmark-String und kann die Position wieder auf diesen Datensatz setzen.

CbState:N

Liefert den aktuellen Status der Tabelle zurück. Mögliche Stati sind:

1 = dsBrowse

2 = dsEdit

3 = dsInsert

CbIndexname:C

Liefert den Namen des aktuellen Indexes zurück oder setzt einen neuen Index.

CbRecordCount:N

Liefert die Anzahl der Datensätze zurück.

CbRecNo:N

Liefert die Nummer des aktuellen Datensatzes zurück.

CbIsRecordLocked:L

Die Funktion prüft, ob der aktuelle Datensatz vom eigenen oder einem anderen Benutzer gesperrt ist.

CbDataAvailable:L

Die Eigenschaft ist True, wenn Datensätze sichtbar sind

CbNoDataAvailable:L

Die Eigenschaft ist True, wenn keine Datensätze sichtbar sind (z.B. wenn die Tabelle gefiltert ist)

CbPermFilterCount:N

Gibt die Anzahl der in der Tabelle gesetzten permanenten Filter zurück.

Diese Eigenschaft ist nur lesbar.

Funktionen

CbCalcDataRecordSize():O

Feldgröße(n) eines Datensatzes ermitteln

Result - Array mit Feldinformationen

cFieldName:C | Feldnamen mit Semikolon getrennt, für die Felder, deren Größe ermittelt werden soll default='' alle Felder
bDetermineStringSize:L | Tatsächliche Größe der String-Felder ermitteln

CbIsNoRecordMove():L

Die Funktion prüft, ob ein Datensatzwechsel derzeit möglich ist.

Result - Datensatzwechsel möglich

CbInsert():L

Die Funktion fügt einen neuen, leeren Datensatz in die Tabelle ein.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - Tabell im InsertMode

CbAppend():L

Die Funktion fügt der Tabelle einen neuen, leeren Datensatz hinzu.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - Tabelle im InsertMode

CbEdit():L

Die Funktion versetzt die Tabelle in den Bearbeitungsmodus.
Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - Tabelle im EditMode

CbPost():L

Die Funktion schreibt neu angelegte oder editierte Datensätze in die Tabelle.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - Tabelle im BrowserMode

CbCancel():L

Die Funktion bricht den Bearbeitungsmodus der Tabelle ab und schreibt eventuell neu angelegte Datensätze oder neu zugewiesene Werte nicht in die Tabelle.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - Tabelle im BrowseMode

CbDelete():L

Die Funktion löscht den aktuellen Datensatz und setzt den Zeiger auf den nächsten Datensatz.

Ist dies nicht möglich, so wird eine Exception ausgelöst.

Result - Tabelle im BrowseMode

CbField():O

Die Funktion ermittelt ein Datenbank-Feld-Objekt anhand des Feldindexes und liefert es zurück.

Result - Datenbankfeld-Objekt vom Typ TField

nIndex:N

Index des Feldes

CbFieldByName():0

Die Funktion ermittelt ein Datenbank-Feld-Objekt anhand des Feldnamens und liefert es zurück.

Result - Datenbankfeld-Objekt vom Typ TField

cFieldName:C

Name des Feldes

CbLocate():L

Die Funktion sucht in der Datenmenge nach einem bestimmten Datensatz und macht diesem zum aktive Datensatz.

Result - Datensatz gefunden

cKeyFields:C

Feldnamen der Felder die durchsucht werden sollen. Durch Semikolon getrennt:

'Feld1;Feld2'

cKeyValues:C

Suchbegriffe als Array:

{Wert1, Wert2}

nOptions:N

Suchoptionen:

loCaseInsensitive - Schlüsselfelder und Schlüsselwerte werden ohne Berücksichtigung der Groß-/Kleinschreibung verglichen

loPartialKey - Schlüsselwerte müssen nicht vollständig übereinstimmen

CbFindKey():L

Die Funktion sucht in einer Datenmenge nach einem bestimmten Datensatz und macht diesem zum aktiven Datensatz. CbFindKey benutzt für das Suchen des Datensatzes einen Index.

Result - Datensatz gefunden

aKey:A

Schlüssel / Suchkriterium als Array

{Wert1, Wert2}

CbFindNearest():L

Die Funktion sucht in der Datenmenge den Datensatz der die größte Übereinstimmung mit aKey hat und macht diesen zum aktiven Datensatz. CbFindNearest benutzt für das Suchen des Datensatzes einen Index.

Result - Einen Datensatz gefunden

aKey:A

Schlüssel / Suchkriterium als Array

{Wert1, Wert2}

CbOldValue():V

Die Funktion repräsentiert den ursprünglichen Wert des Feldes. Nach einem CbEdit und vor einem CbPost.

Result - Wert des Feldes vor dem Edit

cFieldName:C

Name des Feldes, dessen alter Wert ermittelt werden soll

CbDisplayText():C

Die Methode repräsentiert den Feldwert, wie er in einem datensensitiven Steuerelement angezeigt werden kann.

Result - Anzeigetext

cFieldName:C

Name des Feldes, dessen Anzeigetext ermittelt werden soll

CbGoTo():L

Die Funktion springt zu dem Datensatz, dessen RecordNumber aRecordNo ist.

Result - Positionierung erfolgreich

nRecordNo:N

RecordNumber des Datensatzed, auf den positioniert werden soll

CbLockRecord():L

Die Funktion sperrt den aktuellen Datensatz. Der Datensatz kann solange nicht von anderen Benutzern editiert werden, bis die Datensatzsperre mit CbUnLockRecord() wieder aufgehoben wird.

Result - Datensatzsperre erfolreich

CbUnLockRecord():L

Die Funktion entsperrt den aktuellen Datensatz.

Result - Aufheben der Datensatzsperre erfolgreich

CbGetBookmarkEx():O

Die Funktion ermittelt ein BookmarkEx-Objekt welches detaillierte Information über den aktuellen Zustand der Tabelle bzgl. gesetztem Index, Range und Filter enthält.

Result - BookmarkEx-Objekt

CbGetRecAsArray():O

Die Funtkion ermittelt den aktuellen Datensatz als Array. Jedes Feld ist ein Element des Arrays.

Result - Datensatz als Array

CbIsNoRecordMove():L

Die Funktion liefert True zurück wenn NoRecordMove für die Tabelle aktiv ist, ansonsten liefert sie False zurück

Result - NoRecordMove aktiv

Methoden

CbFirst()

Die Methode positioniert den Zeiger auf den ersten Datensatz der Tabelle.

CbLast()

Die Methode positioniert den Zeiger auf den letzten Datensatz der Tabelle.

CbEnableControls()

Die Methode aktiviert die Benachrichtigungen von datensensitiven Steuerelementen, die mit der Tabelle verbunden sind, falls diese zuvor mit CbDisableControls() deaktiviert wurden.

CbDisableControls()

Die Methode verhindert die Benachrichtigungen von datensensitiven Steuerelementen, die mit der Tabelle verbunden sind. Es werden beispielsweise die Browser, welche auf die Tabelle zugreifen nicht mehr automatisch aktualisiert. Dies kann die Geschwindigkeit erheblich erhöhen. Es muss durch ein startseq - always - stopseq sichergestellt werde, das CbEnableControls() ausgeführt wird.

CbNext()

Die Methode verschiebt den Zeiger um einen Datensatz nach unten.

CbPrior()

Die Methode verschiebt den Zeiger um einen Datensatz nach oben.

CbMove()

Die Methode verschiebt den Zeiger um die Anzahl der Datensätze aus nRecordCount in die gewünschte Richtung. Wenn nRecordCount negativ ist wird der Zeiger nach oben verschoben, wenn nRecordCount positiv ist, wird der Zeiger nach unten verschoben

nRecordCount:N

Anzahl der Datensätze um die der Zeiger verschoben werden soll.

CbSetFilter()

Setzt einen Filter auf die Tabelle und aktiviert diesen.

cFilter:C

Logischer Filter-Ausdruck.

CbRefresh()

Die Methode aktualisiert die Datenmenge durch erneutes Abrufen der Daten aus der Datenbank.

CbSetRange()

Die Methode begrenzt den sichtbaren Bereich der Tabelle auf die Datensätze die zwischen den übergebenen Werten sind. Es muss ein gültiger Index auf der Tabelle aktiv sein. Die Parameter müssen beide als Array übergeben werde.

aTopValue:U | Werte für die Obere Begrenzung
aEndValue:U | Werte für die Untere Begrenzung

CbSetRangeEx()

Die Methode grenzt den sichtbaren Bereich der Tabelle auf die Datensätze ein, die dem übergebenem Wert entsprechen. Es muss ein gültiger Index auf der Tabelle aktiv sein. Der Parameter muss als Array übergeben werden.

aScopeValue:U

Werte für die Begrenzung

CbCancelRange()

Die Methode hebt die Begrenzung des sichtbaren Bereiches der Tabelle auf.

CbReplace()

Die Methode ersetzt den Wert des Feldes durch den übergebenen Wert.

cFieldName:c | Name des Feldes, dessen Wert ersetzt werden soll
vNewValue:V | Neuer Wert, der in das Feld geschrieben wird

CbGoToBookmarkEx()

Die Funktion setzt den Zustand der Tabelle auf einen zuvor mit CbGetBookMarkEx() ermittelten Zustand zurück. Gesetzt werden Index, Ranges und Filter.

CbSetRecAsArray()

Die Methode schreibt die Werte eines Record-Array in die BeMemTable. Die BeMemTable muss sich dabei im Einfüge- oder Editiermodus befinden.

aRecord:U

Record-Array

CbSetRecAsArrayEx()

Die Methode schreibt die Werte eines Record-Array in die BeMemTable. Die BeMemTable muss sich dabei im Einfüge- oder Editiermodus befinden.

aRecord:U | Record-Array
aIgnoreFields:C | Durch ';' getrennter String mit Feldnamen, die nicht aus dem RecordArray übernommen werden sollen

CbBeginNoRecordMove()

Die Methode aktivert die NoRecordMove-Logik für die Tabelle. Währen NoRecordMove aktiv ist, kann die Tabelle nicht umpositioniert werden.

cNoRecordMoveFormName:c

Name des Formulars, in dem die Tabelle die gesperrt werden soll, verwendet wird.

CbEndNoRecordMove()

Die Methode deaktivert die NoRecordMove-Logik für die Tabelle wieder. Wenn die Methode aufgerufen wird wenn die NoRecordMove-Logik nicht aktiv ist, wird eine Exception ausgelöst

cNoRecordMoveFormName:c

Name des Formulars, in dem die Tabelle die entsperrt werden soll, verwendet wird.

CbAddPermFilter()

Fügt einen permanenten Filter hinzu.

aFilter:c

Filterbedingung

CbRemovePermFilter()

Hebt alle permanente Filter auf.

CbGetPermFilter()

Liefert einen bestimmten Filterausdruck zurück. Falls der eingegebene Index in der Liste der Filter nicht vorhanden ist (z.B. -1), liefert die Funktion alle permanente Filterausdrücke zurück.

aFilter:N

Filterindex

CbSaveIndex()

Den aktuellen Index der Tabelle merken

CbSaveAndSetIndex()

Den aktuellen Index der Tabelle merken und auf den angegebenen Index setzen

cIndexName:C Name des Index der auch gesetzt wird

CbResetIndex()

Auf den Zuletzt gemerkten Index zurücksetzen

Verfügbare Ereignisse

NoRecordMoveChanged

Nach dem Umschalten der NoRecordMoveLogik

NoRecordMoveChanging

Beim Umschalten der NoRecordMove-Logik

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Neues Memo anlegen und die Größe der enthaltenen Daten ermitteln

//##############################################################################

//##############################################################################

| m_oDab065, m_oMemoBO |

 m_oDab065           := CreateObject('TBeStandardTable' , 'ARTIKELSTAMM'),

 m_oDab065.WorkArea  := waDab065,

 m_oDab065.IndexName := 'Dab06B',

 m_oMemoBO           := CreateObject('TBeMemoBo', 'MEMOS'),

 startseq

    // Neues Memo anlegen

    m_oMemoBO.WriteLastUsedUserID := 65,

    m_oMemoBO.WriteLastUsed       := true,

    m_oMemoBO.CbInsertEmptyMemo(10, bcMemoLinkIDUser, 65, 0),

    m_oMemoBO.SubjectValue := 'Neues Memo',                                  // Memo-Feld

    m_oMemoBO.CbCreatedBy  := '65',                                          // String-Feld

    m_oMemoBO.CbPost(),

    // Auf des neu angelegte Memo positionieren

    m_oDab065.Active := True,

    DBSeek({m_oMemoBO.CbID}, m_oDab065),

    // Felder prüfen

    WriteLn(m_oDab065.CbCalcDataRecordSize('PLATZ', True)),

    WriteLn(m_oDab065.CbCalcDataRecordSize('PLATZ', False)),

    WriteLn(m_oDab065.CbCalcDataRecordSize('DATA', True)),

    WriteLn(m_oDab065.CbCalcDataRecordSize('BETREFF', True)),

    WriteLn(m_oDab065.CbCalcDataRecordSize('', True)),

    WriteLn(m_oDab065.CbCalcDataRecordSize('', False)),

 always

    DestroyObject(m_oMemoBO),

    DestroyObject(m_oDab065),

 stopseq,


TBeTimeRecordingBO

TBeTimeRecordingBO

Die Klasse TBeTimeRecordingBO kapselt Eigenschaften einer BDE-Zeitbuchung (Dab340).

Es handelt sich größtenteils um Read-Only-Eigenschaften. Ausnahmen sind in der Beschreibung explizit angegeben.

Eigenschaften:

Tabellen und Felder
Dab340:O | Dab340 Tabellenobjekt; (nur für Zugriffe auf Individual-Felder)
CbPostingType:N | Buchungstyp; (entspricht DAB340:BUCH_TYP)
CbPostingCode:N | Buchungscode (nicht Read-Only!); (entspricht DAB340:BUCH_CODE)
CbProductionOrderPosNo:C | Prod.Auftr/Pos.Nr; (entspricht DAB340:B_POS_LFD)
CbDab240_ID:N | Verknüpfung zu Dab240-Position; (entspricht DAB340:DAB240_ID)
CbDab035_ID:N | Verknüpfung zu Dab035-Auftrag; (entspricht DAB340:DAB035_ID)
CbResourceType:C | Ressourcentyp Person/Ressource; (entspricht DAB340:RESTYP)
CbEmployeeNo:N | Personen/Mitarbeiter-Nr; (entspricht DAB340:PERSNR)
CbPostedByEmployeeeNo:N | Gebucht von Personen-Nr. (entspricht DAB340:BUCH_PERS)
CbResourceID:N | Ressourcen-ID; (entspricht DAB340:RES_ID)
CbStartTimeStamp:U | Start Datum & Zeitpunkt (nicht Read-Only!); (entspricht DAB340:START)
CbStartDate:D | Start-Datum der Buchung; (entspricht DAB340:S_DATUM)
CbStartTime:C | Start-Zeit der Buchung (SS:MM); (entspricht DAB340:S_ZEIT)
CbStartTimeInSeconds:N | Start Sekunden ab Mitternacht; (entspricht DAb340:S_SECONDS)
CbEndTimeStamp:U | Ende Datum & Zeitpunkt (nicht Read-Only!); (entspricht DAB340:ENDE)
CbEndDate:D | Ende-Datum der Buchung; (entspricht DAB340:E_DATUM)
CbEndTime:C | Ende-Zeit der Buchung (SS:MM); (entspricht DAB340:E_ZEIT)
CbEndTimeInSeconds:N | Ende Sekunden ab Mitternacht; (entspricht DAB340:E_SECONDS)
CbEndedByUserNo:C | Platz-Nr der Ende-Buchung; (entspricht DAB340:PLATZ_ENDE)
CbIntegratedTroubleCode:N | Code für integrierte Störung (nicht Read-Only!); (entspricht DAB340:STOER_CODE)
CbIntegratedTroubleDurationSeconds:N | Anzahl Sekunden der Störung (nicht Read-Only!); (entspricht DAB340:STOERZ_SEK)
CbSubtractIntegratedTroubleTime:L | Störungszeit abziehen (nicht Read-Only!); (entspricht DAB340:STOERZ_ABZ)
CbDistributionFactor:N | Verteil-Faktor Prod.Abtlg. (entspricht DAB340:ABT_VERT)
CbDurationCorrectionAbsolute:N | Zeit-Korrektur absolut Sek. (entspricht DAB340:ZEIT_KOR_A)
CbDurationCorrectionInPercent:N | Zeit-Korrektur prozentual; (entspricht DAB340:ZEIT_KOR_P)
CbSecondsValuated:N | Anzahl Sekunden, bewertet; (entspricht DAB340:SEKUNDEN)
CbMinutesValuated:N | Anzahl gebuchter Minuten; (entspricht DAB340:MINUTEN)
CbCostValueOfPostingBeforeEvaluation:N | Einstandswert vor Bewertung; (entspricht DAB340:EK_WERT_VB)
CbSurchargeCostValueOfPostingBeforeValuation:N | Einstandsw. Zusch. vor Bewert. (entspricht DAB340:EK_WERTZVB)
CbCostCorrectionAbsolute:N | Kosten-Korrektur absolut; (entspricht DAB340:WERT_KOR_A)
CbCostCorrectionInPercent:N | Kosten-Korrektur prozentual; (entspricht DAB340:WERT_KOR_P)
CbCostValueOfPosting:N | Einstandswert der Buchung; (entspricht DAB340:EK_WERT)
CbSurchargeCostValueOfPosting:N | Einstandswert der Zuschläge; (entspricht DAB340:EK_WERTZ)
CbBreaksArray:C | Pausen-Tabelle (nicht Read-Only!); (entspricht DAB340:PAUSEN)
CbBreakMinutes:N | Anzahl Pausen-Minuten; (entspricht DAB340:PAUSEN_MIN)
CbSecondsRecorded:N | Anzahl erfasster Sekunden; (entspricht DAB340:ERFASS_SEK)
CbCalculatedProductiveSeconds:N | Anzahl produktive Sekunden; (entspricht DAB340:SEK_PROD)
CbArticleNo:C | Artikel-Nr des Arbeitsgangs; (entspricht DAB340:ARTNR)
CbActType:C | Tätigkeits-Typ; (entspricht DAB340:TAETIG_TYP)
CbCustomerOrderPosNo:C | Kund.Auftr./Pos.Nr (DAB055); (entspricht DAB340:APNUMMER)
CbDispoNo:C | Kettfeld zu DAB020; (entspricht DAB340:DISPONR)
CbDab020_ID:N | Verknüpfung zu Dab020-Buchung; (entspricht DAB340:DAB020_ID)
CbYieldQuantity:N | Gefertigte Arbg.-Gutmenge (nicht Read-Only!); (entspricht DAB340:MENGE)
CbScrapQuantity:N | Gefertigter Arbg.-Ausschuss (nicht Read-Only!); (entspricht DAB340:MENGE_AUSS)
CbScrapCode:N | Ausschuss-Code (nicht Read-Only!); (entspricht DAB340:AUSS_CODE)
CbMemo:C | Memo (entspricht DAB340:MEMO) (nicht Read-Only!)
CbDateTimePrecision: TBeDateTimePrecision | Gibt basierend auf dem Ressourcen-Typ die maximal erlaubte Präzision für Zeitstempel zurück.

Beispiel

// siehe TBeBDEBusinessController

Siehe auch:

TBeEmployeeBO

TBeProductionPartListBO

TBeProductionOrderBusinessController

TBeBDECodesBO

TBeBDECodesBusinessController


TBeUserCombo

TBeUserCombo

Klasse zur Auswahl von BE-Benutzern in einer DropDown-Auswahlliste.

Eigenschaften:

Allgemeine-Eigenschaften

siehe Klasse TDBComboBoxEx

OrderBy steuert die Sortierung der Liste

0 = keine Sortierung

1 = User-Nummer

2 = User-Name

Aktive-Eigenschaften (Methoden)

OnRefresh Event beim Aktualisieren des Listen-Inhalts

ExecRefresh User-Liste befüllen

Siehe auch:

TBeUserList

TBeDBUserList


TBeUserList

TBeUserList

Klasse zur Darstellung / Auswahl von BE-Benutzern in einer Mehrfach-Auswahlliste.

Eigenschaften:

Allgemeine-Eigenschaften

HightlightColor Farbe der Hervorhebung ( bei ShowUserLogged = true)

ShowUserLogged aktuell angemeldete Benutzer farbig hervorheben

SortBy steuert die Sortierung der Liste

0 = Benutzer-Nummer

1 = ausgewählt / nicht ausgewählt

2 = Benutzer-Name

CheckedAsStr Rückgabe der ausgewählten Benutzer als String im Format "065/066/067"

Aktive-Eigenschaften (Methoden)

ExecRefresh User-Liste befüllen

Beispiel

| oForm, oUserList, oDBUserList, oUserCombo, oMemTable, oMemField, oMemDS |

oForm := CreateObject('TFormEx'),

oForm.OrigCapt := 'TBeUserList / TBeDBUserList / TBeUserCombo',

oForm.Width  := 400,

oForm.Height := 260,

// Datenbank-unabhängige User-Controls =========================================

// User-Liste

oUserList := CreateObject('TBeUserList',,oForm,oForm),

oUserList.Top    := 10,

oUserList.Left   := 10,

oUserList.Width  := 160,

oUserList.Height := 150,

oUserList.HightlightColor := cllime,   // Farbe der Hervorhebung

oUserList.ShowUserLogged  := true,     // angemeldete User hervorheben

oUserList.ExecRefresh,                 // User-Liste füllen

// User-Combo

oUserCombo := CreateObject('TBeUserCombo',,oForm,oForm),

oUserCombo.Left   := 10,

oUserCombo.Top    := 180,

oUserCombo.Width  := 160,

oUserCombo.ExecRefresh,                // User-Combo füllen

// Datenbank-gebundene User-Controls ===========================================

oMemTable := CreateObject('TMemCalcTable'), // Datenbank für Dummy-Programm

  oMemField          := CollAdd( oMemTable.FieldsDefinition ),

  oMemField.Name     := 'USERS',

  oMemField.DataType := 1, // Character

  oMemField.Size     := 30,

oMemTable.Active   := true,

dbappend(oMemTable),

oMemTable:USERS := c_usr + '/',

dbpost(oMemTable),

writeln(AllTrim(oMemTable:USERS)),

oMemDS         := CreateObject('TDataSourceEx'),

oMemDS.DataSet := oMemTable,

// User-Liste

oDBUserList := CreateObject('TBeDBUserList',,oForm,oForm),

oDBUserList.Top    := 10,

oDBUserList.Left   := 210,

oDBUserList.Width  := 160,

oDBUserList.Height := 150,

oDBUserList.DataSource := oMemDS,

oDBUserList.DataField  := 'USERS',

oDBUserList.ExecRefresh,

dbrefresh(oMemTable),

// Eine TBeUserCombo mit Datenbank-Anbindung gibt es momentan nicht.

ShowModal(oForm),

// Rückgabe der Selektion

{oUserList.CheckedAsStr, oUserCombo.Value, AllTrim(oMemTable:USERS)}

Siehe auch:

TBeDBUserList

TBeUserCombo


TBeVacationBusinessController

TBeVacationBusinessController

Die Klasse TBeVacationBusinessController stellt Funktionen zur Ermittlung von Urlaubs-Informationen für BDE-Personen bereit.

Eigenschaften:

Funktionen

CbCreateVacationInfoMemTable

Erstellt eine MemTable mit der benötigten Struktur für CbCalcVacationInfosForUsers()

aOwner:O

Owner auf welchem die MemTable erstellt werden soll

CbCalcVactionInfo

Ermittelt für eine Person deren Urlaubs-Informationen

siehe TBeVacationInfoItem

aPersNo:N

Personal-Nummer

CbCalcVactionInfoForDate

Ermittelt für eine Person zum übergebenen Zeitpunkt deren Urlaubs-Informationen

aPersNo:N | Personal-Nummer
aDate:D | Datum für welches die Urlaubs-Informationen ermittelt werden sollen

CbCalcVacationInfosForUsers

Ermittelt für mehrere Personen die Urlaubs-Informationen und stellt diese in einer MemTable zur Verfügung

aMemTable:O | MemTable; (kann mit CbCreateVacationInfoMemTable() erstellt werden)
aOnlyPersNos:C | per '/' getrennte Liste von Personal-Nummern für welche die Informationen ermittelt werden sollen. Leere Eingabe entspricht allen Personen
aIgnorePersNos:C | per '/' getrennte Liste von Personal-Nummern für welche KEINE Informationen ermittelt werden sollen.
aDate:D | Datum für welches die Urlaubs-Informationen ermittelt werden sollen

Beispiel

|oDM, oVacationBC, oVacationInfo, oMemTable|

oDM         := CreateObject('TBeDbGet'),

oVacationBC := CreateObject('TBeVacationBusinessController'),

startseq

   oVacationBC.CbDataModule := oDM,

   // Urlaubs-Information für User 2 ermitteln

   oVacationInfo := oVacationBC.CbCalcVactionInfo(2),

   startseq

      writeln('Urlaub für dieses Jahr: ' + Str(oVacationInfo.CbTotalDays) + ' (Resturlaub vom letzten Jahr ' + Str(oVacationInfo.CbRemainingDaysFromLastYear) + ' Tag/e)'),

      writeln('Resturlaub für dieses Jahr: ' + Str(oVacationInfo.CbRemainingDays)),

      writeln('Bereits genommener Urlaub: ' + Str(oVacationInfo.CbConsumptDays)),

      writeln('Bereits geplanter Urlaub: ' + Str(oVacationInfo.CbScheduledDays)),

   always

      Destroyobject(oVacationInfo),

   stopseq,

   // Urlaubs-Information für Benutzer 1 bis 9 ermitteln

   oMemTable := oVacationBC.CbCreateVacationInfoMemTable(oDM),

   startseq

      oVacationBC.CbCalcVacationInfosForUsers(oMemTable, '1/2/3/4/5/6/7/8/9', '', Now()),

      Browse(, oMemTable),

   always

      DestroyObject(oMemTable),

   stopseq,

always

   DestroyObject(oVacationBC),

   DestroyObject(oDM),

stopseq,

Siehe auch:

TBeVacationInfoItem


TBeVacationInfoItem

TBeVacationInfoItem

Die Klasse TBeVacationInfoItem kapselt Informationen zum Urlaub einer BDE-Person.

Eigenschaften:
CbPersNo:N | Personal-Nummer
CbContractDaysPerYear:D | Urlaubstage pro Jahr laut Vertrag.
CbDaysThisYear:D | Effektive Urlaubstage für das gesamte Jahr.
CbRemainingDaysFromLastYear:C | Rest-Urlaubstage aus dem letztem Jahr.
CbOpenDays:N | Noch nicht genommene Urlaubstage in diesem Jahr.
CbConsumptDays:N | Bisher verbrauchter Urlaub in diesem Jahr. Hierbei werden manuelle Korrekturen einberechnet.
CbScheduledDays:C | Bisher geplanter Urlaub in diesem Jahr.
CbRemainingDays:N | Noch verfügbare Urlaubstage in diesem Jahr.
CbTotalDays:C | Gesamt Urlaubsanspruch in diesem Jahr. (CbDaysThisYear() + CbRemainingDaysFromLastYear())

Beispiel

siehe TBeVacationBusinessController

Siehe auch:

TBeVacationBusinessController


TBeVatBusinessController

TBeVatBusinessController

Die Klasse TBeVatBusinessController stellt Funktionen zur Überprüfung der Validität von Umsatzsteuer-Kontexten zur Verfügung.

Eigenschaften:

Funktionen

CbIsValidVatContext:L

Überprüft ob das übergebene Umsatzsteuerkontext-BO für den übergebenen Länder-ISO-Code und das Datum gültig ist.

aBO:O | TBeVatContextBO
aVatISOCode:N | Länder-ISO-Code
aDate:D | Datum

CbHasIntersectionForDescription:L

Überprüft ob für das übergebene Umsatzsteuerkontext-BO Gültigkeitsüberschneidungen mit anderen Umsatzsteuerkontext-BOs der gleichen Bezeichnung vorliegen.

aBO:O

TBeVatContextBO

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: TBeVatContextBO und TBeVatContextBusinessController

//               Mit dem TBeVatContextBO werden Informationen zum

//               Umsatzsteuerkontexte abgerufen.

//               Mit dem TBeVatContectBusiness-Controller

//               werden Einträge auf Gültigkeit unter bestimmten

//               Vorraussetzungen geprüft

//##############################################################################

//##############################################################################

|

  m_oVatBusinessController, m_oBeVatContextBO, m_dDate, m_nIsoCode

|

//******************************************************************************

// Umsatzsteuer-Kontext-Datensatz erstellen mit Hilfe des BeVatContextBOs

//******************************************************************************

m_oBeVatContextBO := CreateObject('TBeVatContextBO'),

startseq

   m_oBeVatContextBO.CbInsert(),

   startseq

      m_oBeVatContextBO.CbVatISOCode  := 'DE',

      m_oBeVatContextBO.CbValidFrom   := Now() - 7,

      m_oBeVatContextBO.CbValidTo     := Now() + 7,

      m_oBeVatContextBO.CbDescription := 'Aktueller Kontext',

      m_oBeVatContextBO.CbVatRate1    := 1.1,

      m_oBeVatContextBO.CbPost(),

      //************************************************************************

      // Umsatzsteuer-Kontext gegen beliebiges Datum auf Gültigkeit prüfen

      //************************************************************************

      m_dDate := InputBox('Datum', 'Datum zur Gültigkeitsprüfung eingeben:', DtoC(Now())),

      if not m_oBeVatContextBO.CbCheckValidDate(CToD(m_dDate)) then

         Meld('Zum Datum ' + m_dDate + ' ist der Umsatzsteuerkontext nicht gültig.'),

      endif,

      //************************************************************************

      // TBeVatBusinessController erstellen

      //************************************************************************

      m_oVatBusinessController := CreateObject("TBeVatBusinessController"),

      startseq

         m_oVatBusinessController.CbDataModule := m_oBeVatContextBO.CbDataModule,

         // ISO-Code prüfen

         m_nIsoCode := InputBox('ISO-Code', 'ISO-Code eingeben:', 'DE'),

         //*********************************************************************

         // Prüft ob der Umsatsteuerkontext gültig ist

         // Dafür muss der Länder-ISO-Code übereinstimmen und das Datum gültig

         // sein

         //*********************************************************************

         if m_oVatBusinessController.CbIsValidVatContext(m_oBeVatContextBO, m_nIsoCode,

                                                         CtoD(m_dDate)) then

            Meld('Der Umsatzsteuer-Kontext ist gültig.'),

         else

            Meld('Der Umsatzsteuer-Kontext ist NICHT gültig!'),

         endif,

         m_oBeVatContextBO.CbInsert(),

         startseq

            m_oBeVatContextBO.CbVatISOCode  := 'DE',

            m_oBeVatContextBO.CbValidFrom   := CtoD(InputBox('Datum', 'Neuer Umsatzsteuerkontext gültig ab:', DtoC(Now()))),

            m_oBeVatContextBO.CbValidTo     := m_oBeVatContextBO.CbValidFrom + 7,

            m_oBeVatContextBO.CbDescription := 'Aktueller Kontext',

            m_oBeVatContextBO.CbMemo        := 'NEU',

            m_oBeVatContextBO.CbVatRate1    := 1.2,

            //******************************************************************

            // Prüft ob Umsatzsteuerkontexte mit der gleichen Bezeichnung

            // existieren und sich im Gültigkeitsbereich überschneiden

            //******************************************************************

            if m_oVatBusinessController.CbHasIntersectionForDescription(m_oBeVatContextBO) then

               m_oBeVatContextBO.CbCancel(),

               Meld('Ein Umsatzsteuerkontext mit gleicher Bezeichnung ist bereits vorhanden und' + CRLF +

                    'überschneidet sich im Gültigkeitsbereich mit dem neuen Umsatzsteuerkontext!'),

            else

               m_oBeVatContextBO.CbPost(),

               Meld('Neuer Umsatzsteuerkontext wurde angelegt.'),

            endif,

         onerror

            m_oBeVatContextBO.CbCancel(),

            meld(GetErrorText()),

         stopseq,

      always

         DestroyObject(m_oVatBusinessController),

      stopseq

   onerror

      m_oBeVatContextBO.CbCancel(),

      meld(GetErrorText()),

   stopseq,

always

   DestroyObject(m_oBeVatContextBO),

stopseq

Siehe auch:

TBeVatContextBO


TBeVatContextBO

TBeVatContextBO

Die Klasse TBeVatContextBO kapselt die Eigenschaften und Funktionen der Umsatzsteuer-Kontexte (DabUST).

Eigenschaften:

Eigenschaften
CbVatISOCode:C | Länder-ISO-Code für den Umsatzsteuer-Kontext
CbDescription:C | Bezeichnung für den Umsatzsteuer-Kontext
CbMemo:C | Bemerkung für den Umsatzsteuer-Kontext
CbVatRate1:N | Umsatzsteuer-Satz 1
CbVatRate2:N | Umsatzsteuer-Satz 2
CbVatRate3:N | Umsatzsteuer-Satz 3
CbVatRate4:N | Umsatzsteuer-Satz 4
CbVatRate5:N | Umsatzsteuer-Satz 5
CbVatRate6:N | Umsatzsteuer-Satz 6
CbVatRate7:N | Umsatzsteuer-Satz 7
CbVatRate8:N | Umsatzsteuer-Satz 8
CbVatRate9:N | Umsatzsteuer-Satz 9
CbValidFrom:D | Gültig von Datum des Umsatzsteuer-Kontext
CbValidTo:D | Gültig bis Datum des Umsatzsteuer-Kontext

Funktionen

CbCheckValidDate:L

Überprüft ob der Umsatzsteuer-Kontext an dem übergebenen Datum gültig ist

aDate:D

Datum welches auf Gültigkeit überprüft werden soll

Beispiel

// siehe Beispiel von TBeVatBusinessController

Siehe auch:

TBeVatBusinessController


TBeXMLAttribute

TBeXMLAttribute

Klasse für den Zugriff auf die Eigenschaften eines XML-Attributes. Nur verfügbar in Verbindung mit der Lizenz "XML Kommunikation".

Eigenschaften:

Allgemeine-Eigenschaften

Depth:N Aktuelle Ebene im XML-Baum

Name:C Element-Name

NodeType:N Element-Typ (in der jetzigen Implementation immer = 2)

Value:C Element-Wert

Verwendung:

Zugriff auf ein XML-Attribut eines TBeXMLElement-Objektes (per Listen-Eigenschaft TBeXMLElement.Attributes).

Beispiel

// Hinweis: Dies ist kein Codeblock-Source, sondern ein XML-Beispiel um die

//          Bedeutung der TBeXMLAttribute-Eigenschaften zu verdeutlichen

// Für Codeblock-Beispiel siehe "TBeXMLReader"

<auftrag anummer="1923" termin="KW.08.04" datum="20080311">

              Depth = 1

              Name = "anummer"

              NodeType = 2

              Value = "1923"

              Depth = 1

              Name = "termin"

              NodeType = 2

              Value = "KW.08.04"

              Depth = 1

              Name = "Datum"

              NodeType = 2

              Value = "20080311"

   <aufpos posnr="1" artnr="00.609" menge="10.0000"/>

              Depth = 2

              Name = "posnr"

              NodeType = 2

              Value = "1"

              ... usw. ...

</auftrag>

Siehe auch:

TBeXMLReader

TBeXMLElement

TBeXMLWriter


TBeXMLElement

TBeXMLElement

Klasse für den Zugriff auf die Eigenschaften eines XML-Elements. Nur verfügbar in Verbindung mit der Lizenz "XML Kommunikation"

Eigenschaften:

Allgemeine-Eigenschaften

Depth:N Aktuelle Ebene im XML-Baum

Name:C Element-Name

NodeType: Element-Typ (siehe unten)

HasValue:L True = Element hat einen Wert

Value:C Element-Wert

IsEmpty:L True = Element ist leer

Attributes:TCollection Element-Attribute (= Liste mit TBeXMLAttribute-Objekten)

siehe TBeXMLAttribute

Mögliche Werte von "NodeType"

xmlElemUnknown = 0

xmlElemElement_node = 1

xmlElemAttribute_node = 2

xmlElemText_node = 3

xmlElemCdata_section_node = 4

xmlElemEntity_ref_node = 5

xmlElemEntity_node = 6

xmlElemPi_node = 7

xmlElemComment_node = 8

xmlElemDocument_node = 9

xmlElemDocument_type_node = 10

xmlElemDocument_frag_node = 11

xmlElemNotation_node = 12

xmlElemHtml_document_node = 13

xmlElemDtd_node = 14

xmlElemElement_decl = 15

xmlElemAttribute_decl = 16

xmlElemEntity_decl = 17

xmlElemNamespace_decl = 18

xmlElemXinclude_start = 19

xmlElemXinclude_end = 20

Verwendung:

Zugriff auf ein XML-Element des TBeXMLReader.

Beispiel

// Hinweis: Dies ist kein Codeblock-Source, sondern ein XML-Beispiel um die

//          Bedeutung der TBeXMLElement-Eigenschaften zu verdeutlichen

// Für Codeblock-Beispiel siehe "TBeXMLReader"

<auftrag anummer="1923" termin="KW.08.04" datum="20080311">

              Depth = 0

              Name = "auftrag"

              NodeType = xmlElemElement_Node

              HasValue = False

              IsEmpty = False

              Attribute.Count = 3

   <aufpos posnr="1">

              Depth = 1

              Name = "aufpos"

              NodeType = xmlElemElement_Node

              HasValue = False

              IsEmpty = False

              Attribute.Count = 1

              Text einer Text-Position

              Depth = 1

              Name = "aufpos"

              NodeType = xmlElemText_Node

              HasValue = True

              Value = "Text einer Text-Position"

              IsEmpty = False

              Attribute.Count = 0

       </aufpos>

</auftrag>

Siehe auch:

TBeXMLReader

TBeXMLAttribute

TBeXMLWriter


TBeXMLReader

TBeXMLReader

Klasse zum lesen einer XML-Datei bzw. XML-Daten. Nur verfügbar in Verbindung mit der Lizenz "XML Kommunikation".

Eigenschaften:

Allgemeine-Eigenschaften

FileName:C Datei-Name der XML-Datei

Schema:C Datei-Name zur XML-Schema-Datei

Encoding:C Codierung der XML-Datei (default = "UTF-8")

Active:L True = XML-Datei zum lesen öffnen bzw. ist geöffnet
False = XML-Datei schließen bzw. ist geschlossen

CurrElement: TBeXMLElement Aktuell eingelesenes XML-Element (siehe ReadNextElement)

Aktive-Eigenschaften (Methoden)

ReadNextElement:L Nächstes XML-Element inkl. der Attribute einlesen
(ist anschließend über CurrElement abrufbar)

Ergebnis: True = Nächstes XML-Element wurde gelesen

False = keine weiteren XML-Elemente (EOF)

SchemaValid:L Führt eine Schema-Validierung durch

SchemaErrors:C Liste aller vorhandenen Schema-Fehler wenn SchemaValid = False ergab

Methoden

ReadFromXMLString(aXML:C) Wird kein Datei-Name angegeben, so kann mit dieser
Methode der XML-Inhalt auch direkt per String geladen werden

Verwendung:

- Der XML-Reader liest je ReadNextElement-Aufruf immer ein komplettes XML-Element inkl. aller Attribute und der Attribut-Werte aus, jedoch nicht die folgenden Unter-Elemente und nicht den Element-Wert!
(Der Element-Wert ist ein eigenes XML-Text-Element, siehe Beispiel)

- Hierarchien können über CurrElement.Depth des aktuellen Elements ermittelt werden (siehe Beispiel).

ACHTUNG

oXMLReader.Active := false,

darf nicht vor dem Zerstören den Objektes mittels destroyobject aufgerufen werden!

Hintergrund:

Beim Zerstören den Objektes wird

oXMLReader.Active := false,

implizit aufgerufen.

Dabei kommt es zu Problemen, wenn dies zuvor bereits geschehen ist.

Beispiel

// HINWEIS: XML-Beispiele der Auswertung siehe Klasse "TBeXMLElement" / "TBeXMLAttribute"

// HINWEIS: Mit dem Beispiel-CodeBlock der Klasse "TBeXMLWriter" kann

//          zum Testen eine realistische XML-Datei generiert werden!

|oXMLReader, oXMLElem, oXMLAttrib, cXMLDatei, i, k, m, tTime, lDoOutput|

cXMLDatei  := 'C:\Delphi\VSS\Intern\3rd_Party\DIXml\Demos\output1.xml',

// XML-Reader instanziieren und XML-Datei öffnen

oXMLReader := CreateObject('TBeXMLReader','BeXMLReader'),

oXMLReader.Encoding := 'UTF-8',

oXMLReader.FileName := cXMLDatei,

oXMLReader.Active   := true,

tTime    := TimeEx(),

k        := 0,

m        := 0,

lDoOutput:= true,

while oXMLReader.ReadNextElement do

  // aktuelles Element merken

  oXMLElem := oXMLReader.CurrElement,

  k++,

  // Ist Element ein regulärer Node?

  if oXMLElem.NodeType = XMLELEMELEMENT_NODE

     or oXMLElem.NodeType = XMLELEMTEXT_NODE then

     m++,

     if lDoOutput then

       // Element-Eigenschaften ausgeben

       WriteLn( Replicate('  ', oXMLElem.Depth ) +

                'Ebene: ' +          Str(oXMLElem.Depth,3),

                'Leeres Element: ' + iif(oXMLElem.IsEmpty, ' Ja ', 'Nein'),

                'Hat einen Wert: ' + iif(oXMLElem.HasValue, ' Ja ', 'Nein'),

                'Anz.Attribute: ' +  Str(CollCount(oXMLElem.Attributes), 3),

                'Name: ' +           oXMLElem.Name,

                iif( oXMLElem.Value <> '', 'Wert: ' +           oXMLElem.Value, '' ) ),

     endif,

     // Element-Attribute ausgeben

     for i := 1 to CollCount(oXMLElem.Attributes) do

        // aktuelles Attribut merken

        oXMLAttrib := CollItem(oXMLElem.Attributes, i),

        if lDoOutput then

          // Attribut-Eigenschaften ausgeben

          WriteLn( Replicate(' ', oXMLElem.Depth ) +

                   '    - Element-Typ: ' +  Str(oXMLAttrib.NodeType,3),

                   'Name: ' +         oXMLAttrib.Name,

                   'Wert: ' +         oXMLAttrib.Value ),

        endif,

     next,

  endif,

end,

tTime := Round((TimeEx() - tTime) * 24 * 60 * 60, 6),

writeln( FloatToStr(k) + ' XML-Elemente (davon ' + FloatToStr(m) + ' relevante Nodes) in '

         + FloatToStr(tTime) + ' Sekunden als Datei gelesen.' ),

Siehe auch:

TBeXMLElement

TBeXMLAttribute

TBeXMLWriter


TBeXMLWriter

TBeXMLWriter

Klasse zur Generierung einer XML-Datei bzw. XML-Daten. Nur verfügbar in Verbindung mit der Lizenz "XML Kommunikation".

Eigenschaften:

Allgemeine-Eigenschaften

FileName:C Datei-Name der XML-Datei

Schema:C Datei-Name zur XML-Schema-Datei

Encoding:C Codierung der XML-Datei (default = "UTF-8")

Standalone:C Angabe, ob es externe Deklarationen gibt. Mögliche Werte 'yes' / 'no'. Default = 'no'. Groß-Kleinschreibung beachten!

Indent:N Anzahl Leerzeichen zu hierarchischen Einrückung der XML-Ausgabe (default = 1)

WriteXMLStartElement:L True (default) = Am Anfang der XML-Datei wird das XML-Start-Element mit Codierung usw. eingefügt.

Active:L True = XML-Datei zum Schreiben öffnen bzw. ist geöffnet
False = XML-Datei schließen bzw. ist geschlossen

UseMemoryWriter:L Wenn kein Datei-Name angegeben ist, so kann diese Eigenschaft auf True gestellt
werden. Dann erfolgt die Ausgabe in den Speicher und kann per XMLAsString ermittelt werden.

Aktive-Eigenschaften (Methoden)

BeginElement:C Neues XML-Element schreiben. Die Zuweisung ist der Name des XML-Elementes.

EndElement Aktuelles XML-Element schließen.

WriteAttrib:A Dem aktuellen XML-Element ein Attribut mit Wert zuweisen

Array-Format: { Attribut-Name.C, Attribut-Wert:C }

WriteValue Dem aktuellen XML-Element einen Wert zuweisen

WriteCData Dem aktuellen XML-Element CDATA-Information zuweisen. CDATA-Bereiche werden beim Parsen von XML-Dokumenten ignoriert, können also z.B. wiederum XML-Tags beinhalten.

SchemaValid:L Führt eine Schema-Validierung durch

SchemaErrors:C Liste aller vorhandenen Schema-Fehler wenn SchemaValid = False ergab

Methoden

XMLAsString:C Hiermit kann der XML-Inhalt als String ermittelt werden, falls kein Datei-Name
verwendet wird. Siehe Eigenschaft UseMemoryWriter

Verwendung:

Es ist die folgende Aufruf-Hierarchie der einzelnen Eigenschaften zu beachten:

- 1..1 BeginElement

- 0..n WriteAttrib

- 0..1 WriteValue

- 0..n BeginElement

- 0..n WriteAttrib

- 0..n WriteCData

- 0..1 WriteValue

- 0..n BeginElement

(...)

- 0..n EndElement

- 0..n EndElement

- 1..1 EndElement

Der einzelne umschließende Begin/EndElement-Aufruf ist nicht obligatorisch, sollte jedoch für eine saubere und gültige XML-Struktur gesetzt werden (sofern die Anforderung nichts anderes verlangt).

Beispiel

// HINWEIS: Mit diesem Beispiel-CodeBlock kann zum Testen eine realistische

// XML-Datei für das Beispiel der Klasse "TBeXMLReader" generiert werden!

|oXMLWriter, oXMLElem, oXMLAttrib, cXMLDatei, i, k, tTime,

 oDM, oDab000, oDab050, oDab055, nKdNrVon, nKdNrBis|

cXMLDatei  := 'C:\Delphi\VSS\Intern\3rd_Party\DIXml\Demos\Output1.xml',

oDM := CreateObject('TBeDBGet'),

oDab000 := DbGetTable(oDM, waDAB000),

oDab050 := DbGetTable(oDM, waDAB050),

oDab055 := DbGetTable(oDM, waDAB055),

// XML-Writer instanziieren und XML-Datei öffnen

oXMLWriter := CreateObject('TBeXMLWriter'),

oXMLWriter.Encoding := 'UTF-8',

oXMLWriter.Indent   := 2,

oXMLWriter.FileName := cXMLDatei,

oXMLWriter.Active   := true,

startseq

  nKdNrVon := 00001,

  nKdNrBis := 80000,

  k        := 0,

  tTime    := TimeEx(),

  oXMLWriter.BeginElement := 'be',

  // Inhalte generieren

  DBScope( {nKdNrVon}, {nKdNrBis}, oDab000 ),

  DBGoTop(oDab000),

  while not Eof(oDab000) do

     oXMLWriter.BeginElement := 'kunde',

     oXMLWriter.WriteAttrib := { 'kdnr',       Alltrim(Str(oDab000:KDNR,8)) },

     oXMLWriter.WriteAttrib := { 'matchcode',  Alltrim(oDab000:MATCHCODE) },

     oDab050.IndexName := 'DAB052',

     DbScope( {nKdNrVon}, {nKdNrBis}, oDab050 ),

     while not Eof(oDab050) do

        oXMLWriter.BeginElement := 'auftrag',

        oXMLWriter.WriteAttrib := { 'anummer', Alltrim(Str(oDab050:ANUMMER,6)) },

        oXMLWriter.WriteAttrib := { 'termin',  oDab050:TERMIN },

        oXMLWriter.WriteAttrib := { 'datum',   DToS(Date()) },

        i := 0,

        DbScope( {oDab050:ANUMMER+'   '}, {oDab050:ANUMMER+'999'}, oDab055 ),

        while not Eof(oDab055) do

           oXMLWriter.BeginElement := 'aufpos',

           oXMLWriter.WriteAttrib := { 'posnr', Alltrim(Substr(oDab055:APNUMMER,7,3)) },

           if Alltrim(oDab055:ARTNR) <> '@@@@@' then

              oXMLWriter.WriteAttrib := { 'artnr', Alltrim(oDab055:ARTNR) },

              oXMLWriter.WriteAttrib := { 'menge', Alltrim(Str(oDab055:BMenge,14,DABPAR:NKSTELLEN)) },

           else

              oXMLWriter.WriteValue  := oDab055:MEMO,

           endif,

           oXMLWriter.EndElement,

           k++,

           i++,

           DBSkip(1, oDab055),

        end,

        // ---> Hier NICHT mehr erlaubt !!!

        // oXMLWriter.WriteAttrib := { 'posanzahl', Str(i,3) },

        oXMLWriter.EndElement,

        k++,

        DBSkip(1, oDab050)

     end,

     oXMLWriter.EndElement,

     k++,

     DbSkip(1, oDab000),

  end,

  oXMLWriter.EndElement,

always

   oXMLWriter.Active   := false,

stopseq,

tTime := Round((TimeEx() - tTime) * 24 * 60 * 60, 6),

writeln( FloatToStr(k) + ' Sätze in ' + FloatToStr(tTime) + ' Sekunden als XML-Elemente aus Datenbank exportiert.' ),

Siehe auch:

TBeXMLReader

TBeXMLElement

TBeXMLAttribute


TCbBatchMail

TCbBatchMail

Diese Klasse dient zum Versenden von E-Mails über das SMTP-Protokoll.

Eigenschaften
Action:N | Versand ausführen gültiger Wert ist nur smtpSend
AttachedFiles:U | Datei/en welche der E-Mail angehängt werden sollen einzelner Dateiname oder Array mit Dateinamen
BCc:U | BCC Empfänger einzelner Empfänger oder Array mit Empfängern
Cc:U | CC Empfänger einzelner Empfänger oder Array mit Empfängern
From:C | Absender
MailServer:C | Adresse des E-Mail Servers
MessageText:C | E-Mail Nachricht
SendTo:U | Empfänger einzelner Empfänger oder Array mit Empfängern
Subject:C | Betreff
UserName:C | Login-Name für den E-Mail Server
Password:C | Login-Password für den E-Mail Server

Funktionen und Methoden
CbLoadSettingsFromUserNo | Einstellungen für den Versand von einem Benutzer verwenden; Die Versand-Art (SMTP, MAPI, ...) bleibt die des aktuellen Benutzers
CbLoadSettingsFromEmailAccount | Einstellungen für den Versand von einem E-Mail Konto verwenden; Die Versand-Art (SMTP, MAPI, ...) bleibt die des aktuellen Benutzers

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: E-Mail über SMTP versenden

//##############################################################################

//##############################################################################

| m_oMailObj |

m_oMailObj := MailObject(),

m_oMailObj.SendTo      := 'test@test.de',

m_oMailObj.MessageText := 'Hallo, ich bin ein Test',

m_oMailObj.Subject     := 'Hallo',

m_oMailObj.CbLoadSettingsFromUserNo(90),

m_oMailObj.Action := smtpSend,

Siehe auch:

MailSend()


TCbColorDlg

TCbColorDlg

Klasse zur Anzeige eines Farb-Auswahl-Dialogs.

Eigenschaften:

Allgemeine-Eigenschaften

CustomColors:Array Array mit Elementen in der Form "ColorX=YYYYYY", wobei X den Wertebereich A bis P hat und YYYYYY ein Farbwert in Hexadezimal Schreibweise ist.

Options:Integer 1 = erweiterten Dialog anzeigen (selbstdefinierbare Farben)

Accept:L True wenn Dialog mit OK bestätigt wurde.

Aktive-Eigenschaften (Methoden)

Active:L True = Dialog wird angezeigt

Rückgabewert

Color:Integer Wert der gewählten Farbe

Beispiel

| aColorDlg |

aColorDlg:= CreateObject('TCbColorDlg'),

StartSeq

    aColorDlg.Options      := 1,

    aColorDlg.CustomColors := {"ColorA=00FF33","ColorB=FF00FF"},

    aColorDlg.Active       := True,

    if aColorDlg.Accept then

       WriteLn(aColorDlg.Color)

    else

       WriteLn('Keine Farbe gewählt !')

    endif

Always

   DestroyObject(aColorDlg)

StopSeq


TCbExtendedConsoleExecution

TCbExtendedConsoleExecution

Ermöglicht das Ausführen von Programmen in Codeblock.

Hinweis:

Zu jedem auszuführenden Programm muss ein absoluter oder relativer Pfad angegeben werden (UNC-Pfade werden nicht unterstützt).

Umgebungsvariablen sind während der Ausführung nicht verfügbar.

Die Execute-Methode wartet auf das Ende des ausgeführten Programms.

Daher sind Programme die eine Eingabe durch den Benutzer erfordern (Tastatur/Maus) nicht geeignet,

da das Programm im Hintergrund gestartet wird und nicht mehr normal beendet werden kann.

Eigenschaften

ExitCode:N

Der Exit-Code des ausgeführten Programms

Output:C

Der Text, den das Programm in die Standard-Ausgabe geschrieben hat

Funktionen / Methoden

Execute

Führt das übergebene Programm aus

aCommand:C

Auszuführendes Programm

Beispiel

| oCmd |

oCmd := CreateObject('TCbExtendedConsoleExecution'),

// Datei ausführen

oCmd.Execute('C:\Windows\SysWOW64\ipconfig.exe'),   // Bei 32-Bit-Systemen muss 'SysWOW64' mit 'system32' ersetzt werden!

Writeln(oCmd.Output),

Writeln('-- Exit code: ' + str(oCmd.ExitCode)),

DestroyObject(oCmd),

Siehe auch:

ShellExecute()


TCbFullTextSearch

TCbFullTextSearch

Diese Klasse dient als Rückgabe der Funktion FullTextSearchDocking.

Eigenschaften:

Eigenschaften
Value:C |  | String - Array in dem das ID-Feld der Tabelle und der Wert des ausgewählten Datensatzes enthalten ist; Read-Only
MaskID:N |  | Gibt die verwendete Masken-ID zurück. Read-Only
Caption:C |  | Caption des Dockings.
MainTable:O |  | Die Tabelle, die durchsucht wird
Verfügbare Ereignisse
BeforeSearch | Vor der Volltextsuche

Beispiel

| oForm, oDab000, oFullTextSearchDocking |

function BeforeSearch( Sender )

   meld(Sender.SqlStatement)

end,

oForm := CreateObject('TFormEx', 'TFormEx'),

oDab000 := BeOpen(waDab000),

startseq

  oFullTextSearchDocking := FullTextSearchDocking(oForm, oDab000),

  oFullTextSearchDocking.CbHelper.CbManualDock(oForm),

  AssignEvent(oFullTextSearchDocking, 'BeforeSearch', 'BeforeSearch'),

  oFullTextSearchDocking.Caption := 'Caption',

  Show(oFullTextSearchDocking),

  writeln(oFullTextSearchDocking.MaskID),

  writeln(oFullTextSearchDocking.Value),

  // Um Filter von der MainTable in der Suche zu aktualisieren

  // muss man die Tabelle neu setzen

  oFullTextSearchDocking.MainTable := oDAB000,

  ShowModal(oForm),

always

  BeClose(oDab000),

stopseq

Siehe auch:

FullTextSearch()

FullTextSearchDocking()


TCbReport

TCbReport

Dient zum Erstellen und Drucken von Reports.

Erstellen des Reports:

Ein TCbReport-Objekt wird im Codeblock mit der Funktion ReportInit() erzeugt.

Es ist auch möglich, den Report mit der Funktion CreateObject('TCbReport') zu erzeugen, jedoch kann man dann keine Tabelle als Datenquelle übergeben.

Designen des Reports:

Vor dem Druck des Reports muss noch ein Layout erstellt werden, dies geschieht mit dem Aufruf von ReportPrint(), wobei als Modus rm_Print übergeben wird.

Drucken des Reports:

Gedruckt wird der Report ebenfalls mit der Funktion ReportPrint(), wobei als Modus rm_Print übergeben wird.

Unterschiede zu TBeCbArchive:

Anders als die TBeCbArchive-Klasse wird bei TCbReport kein Beleg aus dem Belegarchiv geladen sondern ein neuer Report erstellt.

Außerdem gibt es hier keine Möglichkeit bereits im Codeblock einen E-Mail-Anhang oder den E-Mail-Text zu setzen.

Dies muss dann alles an der Oberfläche durch den Benutzer geschehen.

Dummy-Reports:

Da man dem TBeCbArchive-Objekt nur den Papierschachtnamen übergeben kann, wird das TCbReport-Objekt als sogenannter "Dummy-Report" verwendet.

Damit kann dann mithilfe der Liste aller vorhandenen Papierschächte (OrgBins bzw. CopyBins) und über die Druckerzuweisungen (DabR30) der passende Schachtname ermittelt werden.

Eigenschaften
RParams:U | Report-Parameter oder Array mit Parametern
TestPrint:L | (default) False = Normaler Druck
OrgPrinting:L | Gibt an, ob gerade ein Original oder eine Kopie gedruckt wird (Ist nur im OnSelectBin-Event valide)
SaveSetupDlg:L | (default) False = Einstellungen, die auf dem Druck-Dialog gesetzt werden, nicht gespeichert
CanFax:L | (default) False = Report kann nicht per Fax versandt werden
CanMail:L | (default) False = Report kann nicht per E-Mail versandt werden
AlwaysPrint:L | True = Führt einen zusätzlichen Druck mit dem normalen Drucker aus, auch wenn der Report bereits per E-Mail oder Fax versandt wird; (default) False
UsePrintDlg:L | (default) True = Druck-Dialog wird angezeigt
UseTransaction:L | (default) False = Der Druck wird nicht in einer Transaktion ausgeführt
SelectLayout:L | (default) True = Das Report-Layout kann im Druck-Dialog gewählt werden
OrgPrinterName:C | Name des Druckers für das Original
OrgBinP1:N | Papierschacht für die erste Seite des Originals
OrgBinPx:N | Papierschacht für die anderen Seiten des Originals
OrgCount:N | Anzahl der Originale (default = 1)
CopyPrinterName:C | Name des Druckers für die Kopie(n) (Standardmäßig OrgPrinterName)
CopyBinP1:N | Papierschacht für die erste Seite der Kopie(n)
CopyBinPx:N | Papierschacht für die anderen Seiten der Kopie(n)
CopyCount:N | Anzahl der Kopien (default = 0)
ReportNo:N | Nummer des Report-Layouts
DocNo:U | Beleg-Nummer (frei zu vergeben)
KeyNo:U | Auftrags- bzw. Vorgangs-Nummer. Wird beim Versand per E-Mail an das BatchMail-Objekt übergeben (frei zu vergeben werden)
PersNo:N | Kunden-Nummer oder Vertreter-Nummer, etc. Wird beim Versand per E-Mail an das BatchMail-Objekt übergeben (frei zu vergeben werden)
LockStr:C | Durch setzen dieser Eigenschaft wird beispielsweise beim Stapel-Druck verhindert, dass andere Benutzer auf die gleichen Datensätze zugreifen können und somit der Druck-Vorgang unterbrochen wird
DefPrinterName:C | (readonly) Name des Standard-Druckers
PrinterList:U | (readonly) Liste aller verfügbaren Drucker
OrgBins:U | (readonly) Liste der Papierschächte für den Druck des Originals; Ein zweidimensionales Array aus Schachtname und Schachtnummer
CopyBins:U | (readonly) Liste der Papierschächte für den Druck der Kopien(n); Ein zweidimensionales Array aus Schachtname und Schachtnummer
Done:L | (readonly) True = Druck wurde abgeschlossen
Page:O | (readonly) Aktuelle Seite des Reports als Objekt (Ist nur im OnSelectBin-Event valide)

Verfügbare Ereignisse
OnNewDocNo | Beim Vergeben einer neuen Dokumenten-Nummer
OnInitPrintValues | Beim Initialisieren der Print-Values
OnFillPrintValues | Beim Füllen der Print-Values
OnDetailPrinted | Nach dem Druck des Detail-Bereiches für einen Datensatz auf dem Report
OnSetLocks | Beim Setzen der Sperren
OnResetLocks | Beim Zurücksetzen der Sperren
AfterPrint | Nach dem Druck
OnProcessData | Beim Verarbeiten der Daten
OnSelectBin | Beim Auswählen des Papierschachtes

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Online-Hilfe Beispiel für die Klasse 'TCbReport'

//##############################################################################

//##############################################################################

| oReport, DAB010:DB:='waDab010, Dab011' |

oReport := ReportInit('Test-Report', DAB010),

startseq

   // Faxen und Mailen des Reports ermöglichen

   oReport.CanFax  := True,

   oReport.CanMail := True,

   if Jn('Report-Layout bearbeiten?', False) then

      ReportPrint(oReport, rm_Layout), // Report designen

   else

      ReportPrint(oReport, rm_Print),  // Report drucken

   endif,

always

   DestroyObject(oReport),

stopseq,

Siehe auch:

TBeCbArchive

ReportInit()

ReportPrint()


TCodeBlockPanel

TCodeBlockPanel

Ein Panel, dem ein CodeBlock zugewiesen werden kann, um so eine individuelle Benutzeroberfläche zu realisieren.

Das CodeBlockPanel findet hauptsächlich im be-Maskendesigner Verwendung, um designbare Masken noch flexibler erweitern zu können.

Eigenschaften:

ExecOnLoad:L

true = Beim ersten Laden des Panels wird der CodeBlock ausgeführt

(default) false

ID:N

Hier kann eine ID hinterlegt werden, welcher dann CodeBlock-Code zugewiesen wird indem man doppelt in das

Eingabefeld (z.B. im Objektinspektor der Masken-Designer oder in der F12-Maske) klickt.

Panels mit der gleichen ID führen auch immer den dafür hinterlegten CodeBlock aus.

Beispiel

//******************************************************************************

// Beschreibung: TCodeBlockPanel Beispiel 1:

//               Erzeugen eines TForm Formulars auf einem TCodeBlockPanel

//               Dieses Beispiel kann auf allen CodeBlockPanels verwendet werden

//******************************************************************************

| oForm, oButton, oEdit, oLabelButton, oLabelEdit |

//##############################################################################

//##############################################################################

// Events

//##############################################################################

//##############################################################################

//******************************************************************************

// Bei Klick auf den Button

//******************************************************************************

function ButtonClick( Sender )

  oLabelButton.Caption := 'Der Button wurde angeklickt!',

end,

//******************************************************************************

// Bei Tastendruck im Editfeld

//******************************************************************************

function EditKeyPress( Sender )

  oLabelEdit.Caption := 'Eingabe: ' + Sender.Text,

end,

//##############################################################################

//##############################################################################

// Initialisierung

//##############################################################################

//##############################################################################

// Dieser CodeBlock soll nur ausgeführt werden,

// wenn das Formular noch nicht existiert

if Empty(FindObjByClass(Self, 'TForm')) then

  StartSeq

     // Form

     oForm             := CreateObject('TForm',, Self, Self),

     oForm.BorderStyle := bsNone,

     oForm.Align       := alClient,

     oForm.Visible     := true,

     SetParent(oForm, Self),

     // Edit

     oEdit        := CreateObject('TBeEdit',, Self, oForm),

     oEdit.Top    := 3,

     oEdit.Left   := 3,

     oEdit.Width  := 80,

     oEdit.Height := 24,

     oEdit.Text   := 'TBeEdit',

     // LabelButton

     oLabelButton         := CreateObject('TLabel',, Self, oForm),

     oLabelButton.Top     := oEdit.Height + 6,

     oLabelButton.Left    := 3,

     oLabelButton.Caption := '',

     // LabelEdit

     oLabelEdit         := CreateObject('TLabel',, Self, oForm),

     oLabelEdit.Top     := oLabelButton.Top + oLabelButton.Height + 6,

     oLabelEdit.Left    := 3,

     oLabelEdit.Caption := '',

     // Button

     oButton         := CreateObject('TButton',, Self, oForm),

     oButton.Top     := 3,

     oButton.Left    := oEdit.Width + 3,

     oButton.Width   := 65,

     oButton.Height  := 24,

     oButton.Caption := 'TButton',

     // Events zuweisen

     AssignEvent(oButton, 'OnClick', 'ButtonClick'),

     AssignEvent(oEdit, 'OnKeyPress', 'EditKeyPress'),

  OnError

     MessageDlg(GetErrorText()),

  StopSeq,

endif,

//==============================================================================

//==============================================================================

//==============================================================================

//==============================================================================

//==============================================================================

//==============================================================================

//******************************************************************************

// Beschreibung: TCodeBlockPanel Beispiel 2:

//               Erzeugen eines Browsers, der die Details aus der Tabelle

//               Dab510 für die aktuellen Bestellrückstände filtert.

//               Dieses Programm kann nur auf der Maske `Lieferanten-Rückstände'

//               verwendet werden!

//******************************************************************************

| oDsMain, oDsDab510, oDab510, oGrid |

//##############################################################################

//##############################################################################

// Events

//##############################################################################

//##############################################################################

//******************************************************************************

// Wenn sich ein Datensatz aus der MAINTABLE ändert (sprich: Zu einem anderen

//                                                           Lieferanten ge-

//                                                           sprungen wird.  )

//******************************************************************************

function MainTableDataChange()

  DBScope({MAINTABLE:ARTNR}, {MAINTABLE:ARTNR}, oDab510),

  DBLocate('LINR', {MAINTABLE:LIEFNR},, oDab510),

  // Browser Einstellungen einmal beim ersten Aufruf laden

  if not Empty(oGrid) and (oGrid.Tag = 0) then

     oGrid.ReadWriteProps := 0, // Browser Einstellungen laden

     oGrid.Tag := 1,

  endif,

end,

//##############################################################################

//##############################################################################

// Initialisierung

//##############################################################################

//##############################################################################

// Dieser CodeBlock soll nur ausgeführt werden,

// wenn das Control mit dem Namen `DetailGrid' noch nicht existiert

if Empty(FindObject(Self, 'DetailGrid')) then

  StartSeq

     // Detail-Tabelle

     oDab510 := CreateObject('TBeStandardTable', 'ArtikelZulief', Self, Self),

     oDab510.Workarea := waDAB510,

     oDab510.IndexName := 'Dab511',

     oDab510.Active := true,

     // Datasource

     oDsDab510 := CreateObject('TDataSourceEx', 'oDsDab510', Self, Self),

     oDsDab510.DataSet := oDab510,

     // Anzeige Grid

     oGrid := CreateObject('TBeAltGrid', 'DetailGrid', Self, Self),

     oGrid.Align := alClient,

     oGrid.ID := '@BROID', // Browser ID

     oGrid.DataSource := oDsDab510,

     oGrid.RegisterDataset := oDab510,

     oGrid.Tag := 0,

     // DataChange Event der Haupttabelle abfangen

     oDsMain := FindObjByClass(GetOwner(MAINTABLE),'TDataSourceEx'),

     AssignEvent(oDsMain, 'OnDataChange', 'MainTableDataChange'),

  OnError

     MessageDlg(GetErrorText()),

  StopSeq,

endif,


TDataBase

TDataBase

Klasse zum Zugriff auf externe Datenquellen per ODBC

Voraussetzung:

Es muss eine gültige Installation der BDE ("Borland Database Engine") vorhanden sein

4. BDE Installieren, entweder von einer "Delphi-Setup CD": Benutzerdefiniertes Setup, alles bis auf "Gemeinsame Dateien -> BDE" abwählen

oder mit separat erhältlichem "BDE Setup" installieren

5. Datenbank in BDE hinzufügen

Start -> Systemsteuerung -> BDE

Tabkarte "Datenbanken" wählen und über "Objekt" -> "Neu" eine Neue Datenbank anlegen.

Beispiel

|oDB, oTable, cSQL, oQuery, cPath, aReport, aPrinters, aOldCursor, oDab065:DB:= 'waDAB065, DAB066' |

function BDEConnect(cDBName, cAlias)

  |oDB|

  startseq,

     oDB := CreateObject('TDataBase'),

     oDB.Params := {'PATH=C:\'},

     // bei Verwendung eines User / Passworts:

     // oDB.Params := {'PATH=C:\','USER NAME=USER1','PASSWORD=PASS1'},

     oDB.AliasName := cAlias,

     oDB.DataBaseName := cDBName,

     oDB.LoginPrompt := false,

     oDB.Connected := true,

     result := oDB,

  onerror,

     writeln(GetErrorText()),

  stopseq,

end,

function Get_BDETable(cDBName, cTableName)

  |oTable|

  startseq,

     oTable := CreateObject('TTable','Table'),

     oTable.Databasename := cDBName,

     oTable.TableName := cTableName,

     oTable.Active := true,

     result := oTable,

  onerror,

     writeln(GetErrorText()),

  stopseq,

end,

cPath  := 'C:\',

oDB    := BDEConnect('Mappe1.dbf', 'DBDEMOS'),

oTable := Get_BDETable(cPath, oDB.DataBaseName),

Browse('BDE',oTable),


TDbEditAnyNo

TDbEditAnyNo - Eingabefeld mit eigener Suchfunktion

Diese Eingabefeldklasse ist dafür vorgesehen, eigene Suchfunktionen zu implementieren. Das Erscheinungsbild des Controls entspricht dem eines Eingabefeldes für Kunden-, Lieferanten- oder Artikelnummern, also ein Edit-Feld mit Such-Button.

Verwendung:

Die Zuweisung der Klasse zu einem Datenfeld erfolgt über Datenbankverwaltung / Felder / Optionen / Controltyp / TDbEditAnyNo. Die Suchfunktion muss im Masken-Designer über die Eigenschaft BlockStr als Codeblock realisiert werden. Hier ist natürlich auch die Nutzung bestehender BE-Fenster-Klassen möglich.

Beispiel

// Suchfunktion im Feld Kostenstelle der Eingabemaske FiBu-Sachkonten, realisiert

// über die vorhandene BE-Fensterklasse 'TSachKtoWahl'.

| oObj, oSachKtoWahl, aOldCursor |

aOldCursor:= SetCursor(crHourGlass),

StartSeq

  oSachKtoWahl:= CreateObject('TSachKtoWahl',, Application, Application),

  If !Empty(oSachKtoWahl) then                          // Suchfenster erzeugen

     StartSeq

       oSachKtoWahl.KontoTyp:= 'A',                     // Vorgabe 'Kostenstelle'

       If Df010:KostenSt > 0 then

          oSachKtoWahl.Konto:= Df010:KostenSt           // DB-Tabelle positionieren

       EndIf,

       If ShowModal(oSachKtoWahl) = mrOk then           // Fenster anzeigen

          oObj:= GetOwner(Self),

          If ClassName(oObj) <> 'TBeMaskDesigner' then  // :-( geht nicht anders

             If (DbState(Df010) = dsBrowse) and

                not (BoF(Df010) and EoF(Df010)) then

                DbEdit(Df010),

             EndIf,

             Df010:KostenSt:= oSachKtoWahl.Konto,       // Auswahl holen

          EndIf

       EndIf

     Always

       DestroyObject(oSachKtoWahl)                      // Suchfenster schliessen

     StopSeq,

  EndIf

Always

  SetCursor(aOldCursor)

StopSeq


TDBIndiFilterEx

TDBIndiFilterEx

Klasse zur Filterung von Tabellen / Editierung von Individuellen Filtern über die Benuteroberfläche.

Eigenschaften:

Allgemeine-Eigenschaften

DataSource Verknüpfung zum DataSource des zu filternden DataSets

FilterList Liste von Filtern (TCollection)

Beispiel

oFilter := CreateObject('TDBIndiFilterEx', 'FILTER', oForm, toolbar_filter),

oFilter.DataSource := ds_projekte,

oFilterItem := CollAdd(oFilter.FilterList, ),

  oFilterItem.DisplayText := 'mit Wiedervorlage',

  oFilterItem.FilterBlock := "'not empty(WVDATUM)'",


TDBSelectBoxEx

TDBSelectBoxEx

Spezialisierte SelectBoxEx-Klasse mit DB-Anbindung für ein Control zur Auswahl einer oder mehrerer vorgegebenen Optionen:

Zusätzliche Eigenschaften

Eigenschaften
DataSource:O | DataSource der Tabelle mit der die SelectBox verbunden werden soll
DataField:C | Feldname in der die Werte der SelectBox eingetragen werden sollen
ReadOnlyStateFromField:L | Gibt an ob das Control den ReadOnly status vom Feld übernehmen soll

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Onlinehilfe Beispiel für die Verwendung von TDBSelectBoxEx im

//               Codeblock.

//##############################################################################

//##############################################################################

| oForm, oBtn_Save, oBtn_Skip, oEdit, oSelectBox, oDM, oDS010  |

//******************************************************************************

// Aktualisiert die Informationen für den aktuellen Artikel

//******************************************************************************

function RefreshArticleInfo()

  oBtn_Save.Caption := 'Speichern' + ' [' + Trim(oDs010.DataSet:ARTNR) + ']',

  oSelectBox.CbCheckNone(),

  case oDs010.DataSet:ARTTYP

    of 'M' :: oSelectBox.CbItemIndex := 0,

    of 'B' :: oSelectBox.CbItemIndex := 1,

    of 'U' :: oSelectBox.CbItemIndex := 2,

    of 'T' :: oSelectBox.CbItemIndex := 3,

    of 'H' :: oSelectBox.CbItemIndex := 4,

    of 'V' :: oSelectBox.CbItemIndex := 5,

    of 'A' :: oSelectBox.CbItemIndex := 6,

    of 'E' :: oSelectBox.CbItemIndex := 7,

  endcase

end,

//******************************************************************************

// Fügt ein neues SelectBox Item hinzu

//******************************************************************************

function DoBtn_SaveClick()

  DbPost(oDs010),

  RefreshArticleInfo(),

end,

//******************************************************************************

// Wechselt zum nächsten Datensatz

//******************************************************************************

function DoBtn_Skip()

  DbSkip(1, oDs010),

  RefreshArticleInfo(),

  if EoF(oDs010) then

     DbGoTop(oDs010),

  endif,

end

//******************************************************************************

// Stellt sicher das ein ArtikelTyp ausgewählt wurde

//******************************************************************************

function DoValidateSelectBox()

| i, lFoundChecked |

   lFoundChecked := False,

   for i := 0 to 7 do

       SetErrorIf(lFoundChecked and oSelectBox.CbIsItemChecked(i), 'Es darf nur 1 Typ ausgewählt sein!'),

       if oSelectBox.CbIsItemChecked(i) then

          lFoundChecked := True,

       endif,

   next,

   SetErrorIf(not lFoundChecked, 'Es muss 1 Typ ausgewählt sein'),

end,

oForm  := CreateObject('TFormEx'),

oDM    := CreateObject('TBeDBGet', , oForm),

oDS010 := CreateObject('TDataSourceEx', , oForm),

startseq

   oDS010.DataSet := DbGetTable(oDm, waDab010),

   DbGoTop(oDS010),

   //***************************************************************************

   oBtn_Save         := CreateObject('TButton', , oForm, oForm),

   oBtn_Save.Caption := 'Speichern',

   oBtn_Save.Align   := alBottom,

   AssignEvent(oBtn_Save, 'OnClick', 'DoBtn_SaveClick'),

   //***************************************************************************

   oBtn_Skip         := CreateObject('TButton', , oForm, oForm),

   oBtn_Skip.Caption := 'Nächster Artikel',

   oBtn_Skip.Align   := alBottom,

   AssignEvent(oBtn_Skip, 'OnClick', 'DoBtn_Skip'),

   //***************************************************************************

   oEdit       := CreateObject('TEdit', , oForm, oForm),

   oEdit.Align := alBottom,

   //***************************************************************************

   oSelectBox       := CreateObject('TDBSelectBoxEx', '', oForm, oForm),

   oSelectBox.Align := alTop,

   AssignEvent(oSelectBox, 'OnValidateValue', 'DoValidateSelectBox'),

   oSelectBox.DataSource := oDs010,

   oSelectBox.DataField  := 'ARTTYP',

   oSelectBox.CbAddItem('M:Endprodukt'),

   oSelectBox.CbAddItem('B:Baugruppe'),

   oSelectBox.CbAddItem('U:Unterbaugruppe'),

   oSelectBox.CbAddItem('T:Kaufteil'),

   oSelectBox.CbAddItem('H:Setartikel'),

   oSelectBox.CbAddItem('V:Variante'),

   oSelectBox.CbAddItem('A:Arbeitswert'),

   oSelectBox.CbAddItem('E:Externleistung'),

   RefreshArticleInfo(),

   ShowModal(oForm),

always

   DestroyObject(oForm),

stopseq

Siehe auch:

TSelectBoxEx


TFont

TFont

TFont beschreibt die Schriftmerkmale für die Anzeige von Text. TFont definiert einen Zeichensatz über die Schrifthöhe,

die Schriftart, die Schriftattribute ( z.B. fett und kursiv ) usw.

Eigenschaften:

Allgemeine-Eigenschaften

Charset:N Durch die Festlegung von Charset bestimmen Sie den Zeichensatz, der für die Schrift verwendet wird.

Jede Schriftart (angegeben in der Eigenschaft Name) unterstützt mindestens einen Zeichensatz. Die zulässigen Werte für Charset entnehmen Sie der Dokumentation des Zeichensatzherstellers.

Color:N Verwenden Sie Color, um die Farbe für die Textzeichen festzulegen. Es stehen Farbkonstanten wie z.B. clRed, clGreen etc. zur Verfügung, um die Farbe dynamisch zuzuweisen.

Height:N Mit der Eigenschaft Height können Sie die Höhe einer Schrift in Pixel festlegen. Bei einem negativen Wert wird der interne Abstand über den einzelnen Textzeilen nicht berücksichtigt. Bei einem positiven Wert für Height errechnet sich die Höhe aus der Schrifthöhe plus dem internen Abstand.

Verwenden Sie die Eigenschaft Size, wenn die Schriftgröße in Punkt angegeben werden muss. In einer Anwendung wird die Schriftgröße vom Benutzer normalerweise in Punkt angegeben. Anwendungsprogrammierer hingegen befassen sich bei der Anzeige einer Schrift auf dem Bildschirm normalerweise mit der tatsächlichen Größe der Schrift in Pixel.

Mit folgender Formel kann der Wert der Eigenschaft Height aus der Punktgröße ermittelt werden:

Font.Height = -Font.Size * Font.PixelsPerInch / 72

Wenn die Eigenschaft Height einen positiven Wert enthält, wird die Eigenschaft Size in eine negative Zahl umgewandelt.

Wenn die Eigenschaft Size einen positiven Wert enthält, ergibt sich für die Eigenschaft Height eine negative Zahl.

Name:C Verwenden Sie diese Eigenschaft, um die Schriftart für eine Schrift festzulegen.

Hinweis:

Wenn die angegebene Schrift nicht auf dem System verfügbar ist, verwendet Windows eine andere Schrift.

Style:N Die Eigenschaft Style bestimmt, ob die Schrift normal, kursiv, unterstrichen, fett usw. angezeigt wird.

Mit der Eigenschaft Style können Sie ein Attribut für die Zeichen einer Schrift vergeben. Style kann keinen, einen oder mehrere der folgenden Werte enthalten:

Wert Bedeutung

fsBold Der Text wird fett angezeigt.

fsItalic Der Text wird kursiv angezeigt.

fsUnderline Der Text wird unterstrichen.

fsStrikeout Der Text wird durchgestrichen.

Verwendung:

- z.B. im Browser, im Report-Designer, in vielen Steuerelementen etc.

Beispiel

// Beispiel: Spalten-Eigenschaften eines Wiedervorlage-Memo-Browsers

// -> Einstellung von TFont im Codeblock der Vordergrundfarbe einer Textspalte

| oFont |

oFont:= Self.ColumnFont,

// Die Abfrage auf "not Empty()" ist nötig, weil Self.ColumnFont nur bei der

// tatsächlichen Ausgabe der Spalte zur Verfügung steht

If not Empty(oFont) then

   // Die Attribute in Style können durch Addition kombiniert werden

   // oFont.Style:= iif(Status = 'G', 0, fsItalic + fsUnderline),

   // bestehende Attribute in Style können auch mit _OR() ergänzt werden

   // oFont.Style:= iif(Status = 'U', oFont.Style, _Or(oFont.Style, fsBold + fsUnderline)),

   if Status = 'U' then

      oFont.Style := fsBold,

   else

      oFont.Style := 0,

   endif,

EndIf,

// Wenn der Codeblock die komplette Einstellung erledigt hat, zeigt clNone an,

// dass be keine weiteren Einstellungen vornehmen soll. Wird wie eine Farbe

// zurück gegeben, dann überschreibt diese die Farb-Einstellung, die im Codeblock

// vorgenommen wurde.

clNone


TFormArtConsumpt

TFormArtConsumpt

Klasse zum Anzeigen des Formulars für Verbräuche (Lagerverwaltung).

Eigenschaften:

Allgemeine-Eigenschaften

MasterDataSet:O DataSet Objekt (DAB010)

Beispiel

siehe TFormArtDates

Siehe auch:

TFormArtDates

TFormArtStock

TFormStoreFile

TFormArtCustArr

TFormSuppBackOrd

TFormProdArr

TFormTOSinglePos


TFormArtCustArr

TFormArtCustArr

Klasse zum Anzeigen des Kundenrückstände Formulars.

Eigenschaften:

Allgemeine-Eigenschaften

MasterDataSet:O DataSet Objekt (DAB010)

Beispiel

siehe TFormArtDates

Siehe auch:

TFormArtDates

TFormArtStock

TFormArtConsumpt

TFormStoreFile

TFormSuppBackOrd

TFormProdArr

TFormTOSinglePos


TFormArtDates

TFormArtDates

Klasse zum Anzeigen des Terminraster-Formulars.

Eigenschaften:

Allgemeine-Eigenschaften

MasterDataSet:O DataSet Objekt (DAB010)

Beispiel

|oForm, oPnlLeft, oPnlRight, oPnlBottom, oLblInfo, oDBGrid, oDataSource,

 oDAB010, oFormObject,

 oBtnDetach, oBtnArtDates, oBtnArtStock, oBtnArtConsumpt, oBtnStoreFile,

 oBtnArtCustArr, oBtnSuppBackOrd, oBtnProdArr |

//******************************************************************************

// Fenster von Klasse erzeugen und anzeigen

//******************************************************************************

function CreateForm( cClassName )

  if not Empty(oFormObject) then

     DestroyObject(oFormObject),

  endif,

  oFormObject := CreateObject(cClassName,'Fenster',oForm,oPnlLeft),

  oFormObject.Align := alclient,

  oFormObject.BorderStyle := bsnone,

  oFormObject.MasterDataSet := oDAB010,

  Show(oFormObject),

end,

//******************************************************************************

// Fenster lösen

//******************************************************************************

function BtnDetachWindowClick( Sender )

  if not Empty(oFormObject) then

     oFormObject.Align := alNone,

     oFormObject.BorderStyle := bsSizeToolWin,

  endif,

end,

//******************************************************************************

// Fenster erzeugen

//******************************************************************************

function BtnCreateClick( Sender )

  case Sender.Tag

    of 1 :: CreateForm('TFormArtStock'),         // Lagerplatz-Bestände

    of 2 :: CreateForm('TFormArtConsumpt'),      // Verbräuche

    of 3 :: CreateForm('TFormStoreFile'),        // Lagerkartei

    of 4 :: CreateForm('TFormArtCustArr'),       // Kundenrückstände

    of 5 :: CreateForm('TFormSuppBackOrd'),      // Zuliefererrückstände

    of 6 :: CreateForm('TFormProdArr'),          // Produktionsrückstände

    otherwise CreateForm('TFormArtDates'),       // Terminraster

  endcase,

  oLblInfo.Caption := Sender.Caption,

end,

//******************************************************************************

// Bei Formularstart

//******************************************************************************

function MainFormShow( Sender )

  BtnCreateClick( oBtnArtDates ),

end,

//******************************************************************************

//******************************************************************************

// Formular

//******************************************************************************

//******************************************************************************

StartSeq,

  oForm           := CreateObject('TFormEx','MainForm'),

  oPnlLeft        := CreateObject('TPanel','PnlLeft',oForm, oForm),

  oPnlRight       := CreateObject('TPanel','PnlRight',oForm, oForm),

  oPnlBottom      := CreateObject('TPanel','PnlBottom',oForm, oForm),

  oBtnDetach      := CreateObject('TBeBitBtn','BtnDetach',oForm,oPnlRight),

  oLblInfo        := CreateObject('TLabel','LblInfo',oForm,oPnlRight),

  oDAB010         := CreateObject('TBeRightsTable','Table',oForm,oForm),

  oDBGrid         := CreateObject('TBeAltGrid','DBGrid',oForm,oPnlBottom),

  oDataSource     := CreateObject('TDataSourceEx','DataSource',oForm,oForm),

  oBtnArtDates    := CreateObject('TBeBitBtn','oBtnArtDates',oForm,oPnlRight),

  oBtnArtStock    := CreateObject('TBeBitBtn','oBtnArtStock',oForm,oPnlRight),

  oBtnArtConsumpt := CreateObject('TBeBitBtn','BtnArtConsumpt',oForm,oPnlRight),

  oBtnStoreFile   := CreateObject('TBeBitBtn','BtnStoreFile',oForm,oPnlRight),

  oBtnArtCustArr  := CreateObject('TBeBitBtn','BtnArtCustArr',oForm,oPnlRight),

  oBtnSuppBackOrd := CreateObject('TBeBitBtn','BtnSuppBackOrd',oForm,oPnlRight),

  oBtnProdArr     := CreateObject('TBeBitBtn','BtnProdArr',oForm,oPnlRight),

  // Form

  oForm.Width    := 800,

  oForm.Height   := 800,

  oForm.Position := poMainFormCenter,

  assignevent(oForm, 'OnShow', 'MainFormShow'),

  // Panel

  oPnlLeft.Align        := alClient,

  oPnlLeft.BevelOuter   := bvNone,

  oPnlLeft.Caption      := '',

  // Panel

  oPnlRight.Width       := 200,

  oPnlRight.Align       := alRight,

  oPnlRight.BevelOuter  := bvNone,

  oPnlRight.Caption     := '',

  // Panel

  oPnlBottom.Height     := 150,

  oPnlBottom.Align      := alBottom,

  oPnlBottom.BevelOuter := bvNone,

  oPnlBottom.Caption    := '',

  // DAB010

  oDAB010.Workarea := waDAB020,

  oDAB010.Active   := true,

  // Datasource

  oDataSource.DataSet := oDAB010,

  // Grid

  oDBGrid.Align      := alClient,

  oDBGrid.DataSource := oDataSource,

  // Info Label

  oLblInfo.Top        := 10,

  oLblInfo.Left       := 5,

  oLblInfo.Height     := 15,

  oLblInfo.Caption    := '',

  oLblInfo.Font.Size  := 10,

  oLblInfo.Font.Style := 1,

  // Button

  oBtnArtDates.Top     := 35,

  oBtnArtDates.Left    := 5,

  oBtnArtDates.Width   := 190,

  oBtnArtDates.Tag     := 0,

  oBtnArtDates.Caption := 'Terminraster',

  oBtnArtDates.ImageIndex.IndexNormal := 449,

  assignevent(oBtnArtDates, 'OnClick', 'BtnCreateClick'),

  // Button

  oBtnArtStock.Top     := 65,

  oBtnArtStock.Left    := 5,

  oBtnArtStock.Width   := 190,

  oBtnArtStock.Tag     := 1,

  oBtnArtStock.Caption := 'Lagerplatz-Bestände',

  oBtnArtStock.ImageIndex.IndexNormal := 15,

  assignevent(oBtnArtStock, 'OnClick', 'BtnCreateClick'),

  // Button

  oBtnArtConsumpt.Top     := 95,

  oBtnArtConsumpt.Left    := 5,

  oBtnArtConsumpt.Width   := 190,

  oBtnArtConsumpt.Tag     := 2,

  oBtnArtConsumpt.Caption := 'Verbräuche',

  oBtnArtConsumpt.ImageIndex.IndexNormal := 186,

  assignevent(oBtnArtConsumpt, 'OnClick', 'BtnCreateClick'),

  // Button

  oBtnStoreFile.Top     := 125,

  oBtnStoreFile.Left    := 5,

  oBtnStoreFile.Width   := 190,

  oBtnStoreFile.Tag     := 3,

  oBtnStoreFile.Caption := 'Lagerkartei',

  oBtnStoreFile.ImageIndex.IndexNormal := 19,

  assignevent(oBtnStoreFile, 'OnClick', 'BtnCreateClick'),

  // Button

  oBtnArtCustArr.Top     := 155,

  oBtnArtCustArr.Left    := 5,

  oBtnArtCustArr.Width   := 190,

  oBtnArtCustArr.Tag     := 4,

  oBtnArtCustArr.Caption := 'Kundenrückstände',

  oBtnArtCustArr.ImageIndex.IndexNormal := 441,

  assignevent(oBtnArtCustArr, 'OnClick', 'BtnCreateClick'),

  // Button

  oBtnSuppBackOrd.Top     := 185,

  oBtnSuppBackOrd.Left    := 5,

  oBtnSuppBackOrd.Width   := 190,

  oBtnSuppBackOrd.Tag     := 5,

  oBtnSuppBackOrd.Caption := 'Zuliefererrückstände',

  oBtnSuppBackOrd.ImageIndex.IndexNormal := 503,

  assignevent(oBtnSuppBackOrd, 'OnClick', 'BtnCreateClick'),

  // Button

  oBtnProdArr.Top     := 215,

  oBtnProdArr.Left    := 5,

  oBtnProdArr.Width   := 190,

  oBtnProdArr.Tag     := 6,

  oBtnProdArr.Caption := 'Produktionsrückstände',

  oBtnProdArr.ImageIndex.IndexNormal := 224,

  assignevent(oBtnProdArr, 'OnClick', 'BtnCreateClick'),

  // Button

  oBtnDetach.Top     := 265,

  oBtnDetach.Left    := 5,

  oBtnDetach.Width   := 190,

  oBtnDetach.Caption := 'Fenster nicht andocken',

  oBtnDetach.ImageIndex.IndexNormal := 18,

  assignevent(oBtnDetach, 'OnClick', 'BtnDetachWindowClick'),

  // Formular anzeigen

  ShowModal(oForm),

OnError

   meld(GetErrorText()),

   DestroyObject( oForm ),

StopSeq,

Siehe auch:

TFormArtStock

TFormArtConsumpt

TFormStoreFile

TFormArtCustArr

TFormSuppBackOrd

TFormProdArr

TFormTOSinglePos


TFormArtStock

TFormArtStock

Klasse zum Anzeigen des Lagerbestand-Formulars.

Eigenschaften:

Allgemeine-Eigenschaften

MasterDataSet:O DataSet Objekt (DAB010)

Beispiel

siehe TFormArtDates

Siehe auch:

TFormArtDates

TFormArtConsumpt

TFormStoreFile

TFormArtCustArr

TFormSuppBackOrd

TFormProdArr

TFormTOSinglePos


TFormAttribPrev

TFormAttribPrev

Formular zum Anzeigen / Bearbeiten einer Merkmalstabelle.

Eigenschaften:

Allgemeine-Eigenschaften

TabId:Integer ID der Merkmalstabelle

Beispiel

| aMDTForm |

aMDTForm := CreateObject('TFormAttribPrev'),

StartSeq

    aMDTForm.TabId := -1, // Merkmalstabellen ID

    ShowModal(aMDTForm),

Always

   DestroyObject(aMDTForm )

StopSeq


TFormEx

TFormEx

Basis Formular Klasse.

Eigenschaften:

Allgemeine-Eigenschaften

OrigCapt:C Fenster-Titel, nicht die Eigenschaft Caption verwenden da diese bei Docking-Fenstern überschrieben wird.

ActiveControl:O Fokusiertes Steuerelement bei Start

ImageIndex:N ImageIndex aus be-ImageList für Icon im Fenster-Navigator

PositionSaveId:C @+5 Zeichen für ID, zum Speichern der Größe/Position

Position:C poDesigned = Standard-Wert ab D2007, damit Formular immer an gleicher Position geöffnet wird

Verwendung:

- Im F12-Designer ist es die Standard Fenster-Klasse

Beispiel

|oForm, oButton, oEdit|

// Form Object und Demo Steuerelemente erzeugen

oForm    := CreateObject('TFormEx'),

oButton  := CreateObject('TBeBitBtn',,oForm,oForm),

oEdit    := CreateObject('TBeEdit',,oForm,oForm),

startseq

  oForm.Width          := 200,    // Breite des Fensters

  oForm.Height         := 150,    // Höhe des Fensters

  oForm.OrigCapt       := 'Demo', // Titel des Fensters

  oForm.ActiveControl  := oEdit,  // Fokusiertes Steuerelement bei Start

  oForm.ImageIndex     := 1,      // ImageIndex aus be-ImageList für Icon im Fenster-Navigator

  oForm.Position       := poDesigned, // Standard-Wert ab D2007, damit Formular

                                      // immer an gleicher Position geöffnet wird

  oForm.PositionSaveId := '@DEMO1',   // @+5 Zeichen für ID zum speichern der Größe/Position

  // Demo Steuerelemente

  oEdit.Top  := 20,

  oEdit.Left := 20,

  oEdit.Text := today(),

  oButton.Top     := 60,

  oButton.Left    := 20,

  oButton.Caption := 'Demo',

  ShowModal(oForm),

always

  DestroyObject(oForm),

stopseq,


TFormProdArr

TFormProdArr

Klasse zum Anzeigen des Formulars für Produktionsrückstände.

Eigenschaften:

Allgemeine-Eigenschaften

MasterDataSet:O DataSet Objekt (DAB010)

Beispiel

siehe TFormArtDates

Siehe auch:

TFormArtDates

TFormArtStock

TFormArtConsumpt

TFormStoreFile

TFormArtCustArr

TFormSuppBackOrd

TFormTOSinglePos


TFormQCTestCycle

TFormQCTestCycle

Klasse zur Durchführung von Prüfvorgängen

Hinweis

Die Klasse kann nicht erzeugt werden. Folgende Eigenschaften, Ereignisse und Methoden dienen nur zur Anpassung des Workflows.

Eigenschaften:

Eigenschaften
Verfügbare Ereignisse
OnPPEControlsUpdated | Nach Aktualisierung der Sichtbarkeit und ReadOnly-Eigenschaft aller GUI-Elemente
Funktionen und Methoden
CbReset() | Setzt die GUI des Prüfvorgangs zurück. Entspricht schließen und neu öffnen des Fensters.
CbNextActivity() | Startet die nächste Aktion des Workflows.

Beispiel

//******************************************************************************

// Inhalt eines CalcEdits auf der Maske Prüfergebnisse

//******************************************************************************

| oForm |

SetPersistent(True),

//******************************************************************************

// Steuerung der Sichtbarkeit des IST-Wertes

//******************************************************************************

function AfterReadOnlyUpdate()

   | cMaskID, oDS_DABPPV, oDABPPV, edt_istwert,

     lbl_sollwert_eh, bMeasuringInspection

   |

   cMaskId                   := "_"+strtoken(self.name,"_",2),

   edt_istwert               := FindObject(GetOwner(self),"ISTWERT"+cMaskId),

   lbl_sollwert_eh           := FindObject(GetOwner(self),"TBeLabel_SOLLWERT_EH"+cMaskId),

  // Achtung

  // im gestarten Prüfmodus ist das Dataset DABPPE dieser Maske LEER

  // daher über den Owner die DABPPV bestimmen

  oDS_DABPPV := FindObject(GetOwner(self),"DS_MAINTABLE"),

  if not empty(oDS_DABPPV) and ClassOf(oDS_DABPPV,'TDataSourceEx') then

     oDABPPV := oDS_DABPPV.Dataset,

     if ClassOf(oDABPPV, "TBeRightsTable") and (oDABPPV.Workarea = waDABPPV) then

        // Prüfen, welche Felder ausgeblendet werden sollen

        bMeasuringInspection     := oDABPPV:MESSWERTE,

        lbl_sollwert_eh.caption  := oDABPPV:SOLLW_EH,

     endif,

  endif,

  lbl_sollwert_eh.visible := bMeasuringInspection,

  edt_istwert.visible     := bMeasuringInspection,

end,

oForm := GetParentForm(self),

if ClassOf(oForm, 'TFormQCTestCycle') then

  AssignEvent(oForm, 'OnPPEControlsUpdated', 'AfterReadOnlyUpdate'),

endif,

Siehe auch:

PruefVorgang()


TFormStoreFile

TFormStoreFile

Klasse zum Anzeigen der Lagerkartei.

Eigenschaften:

Allgemeine-Eigenschaften

MasterDataSet:O DataSet Objekt (DAB010)

Beispiel

siehe TFormArtDates

Siehe auch:

TFormArtDates

TFormArtStock

TFormArtConsumpt

TFormArtCustArr

TFormSuppBackOrd

TFormProdArr

TFormTOSinglePos


TFormSuppBackOrd

TFormSuppBackOrd

Klasse zum Anzeigen des Formulars für Bestell- / Zuliefererrückstände.

Eigenschaften:

Allgemeine-Eigenschaften

MasterDataSet:O DataSet Objekt (DAB010)

Beispiel

siehe TFormArtDates

Siehe auch:

TFormArtDates

TFormArtStock

TFormArtConsumpt

TFormStoreFile

TFormArtCustArr

TFormProdArr

TFormTOSinglePos


TFormTOSinglePos

TFormTOSinglePos

Klasse zum Anzeigen des Umsatz-Formulars.

Eigenschaften:

Eigenschaften
WinPosID:C | WinPosition-ID die verwendet werden soll; Default = die selbe die be benutzt
MainTable:O | Master-Tabelle (z.b. Kundenstamm, Lieferantenstamm); Default = nil
MemHistory:O | Historie-Memory-Tabelle für StatType = 3; Default = nil
StatType:N | Umsatz-Anzeige-Modus; &#183 0 = stSinglePosition = Einzelpositionen; &#183 1 = stSampleDelivery = Musterlieferungen; &#183 2 = stSuppSinglePos = Lieferant Umsatz Einzelpositionen; &#183 3 = stSerialHist = Serien-Nr. Historie; &#183 4 = stProdSinglePos = Fertigungs-Historie; &#183 5 = stDelivLoc = Standortlieferungen; &#183 6 = stFilterDefined = eigene Anzeige per Projekt-ID und/oder Filter
ProjectID:N | Umsätze nur für dieses Projekt anzeigen; StatType = stFilterDefined
Filter:C | Zusätzlicher individueller ADS-Filter; StatType = stFilterDefined
ShowTxt:L | Buchungs-Text anzeigen
TxtHeight:N | Buchungs-Text Höhe
MainPersNo:N | Umsätze nur für diesen Kunden/Lieferanten/usw. anzeigen
AccountType:C | Filterung auf Buchungs-Art

Funktionen und Methoden
CbInit() | Initialisiert das Formular; Diese Funktion muss einmal nachdem alle Einstellungen vorgenommen sind aufgerufen werden
CbRefreshData() | Aktualisiert die Anzeige

Beispiel

|oForm|

oForm := CreateObject('TFormTOSinglePos'),

startseq

   oForm.WinPosID := 'TOSP_TST',

   if JN('Umsatz-Anzeige für Projekt?', true) then

      oForm.ProjectID := 362,                       // nur Einträge für das Projekt 362

      oForm.Filter    := 'DATUM > ''11/11/2012''',  //              nach dem 11.11.2012 anzeigen

   else

      oForm.StatType    := 0,                       // Umsatz für Kunden anzeigen

      oForm.MainPersNo  := 10000001,

      oForm.AccountType := 'A',

   endif,

   oForm.CbInit(),

   ShowModal(oForm),

always

   DestroyObject(oForm),

stopseq,

Siehe auch:

TFormArtDates

TFormArtStock

TFormArtConsumpt

TFormStoreFile

TFormArtCustArr

TFormSuppBackOrd

TFormProdArr


TFormVarCalc

TFormVarCalc

Eingabedialog für Varianten.

Eigenschaften:

Allgemeine-Eigenschaften

ShowButtons:L Schließen/Ok/Abbrechen Button anzeigen

ShowCalculation:L Kalkulation anzeigen

LabelWidth:N Breite der linken Spalte in welcher die Bezeichnungen angezeigt werden

ReadOnly:L Nur Lese-Modus aktiv (wird ignoriert falls CalcField gesetzt ist)

Modified:L (nicht aktiv)

PL_Memo:C Varianten-Array (z.b. SL_MEMO Feld-Inhalt)

PL_MemoLang:C Varianten-Übersetzungen (z.b. SL_MEMO Feld-Inhalt der Dab110)

Language:N Sprachen-Nummer die für Artikel-Bezeichnungen innerhalb der Varianten verwendet werden soll

ArtNo:C Artikel-Nummer

OrderPosNo:C Auftrags-Positions-Nummer

SalesLoc:N Verkaufs-Standort

DropDownCount:N Gibt die Anzahl der Elemente an die bei einem Merkmals-Control max. angezeigt werden (Default = 20)

CalcField:O Varianten-Array Feld (z.b. SL_MEMO Feld)

CalcDab010:O Tabelle Dab010 Kundenstamm

CalcDab050:O Tabelle Dab050 Auftrags-Kopf

CalcDab055:O Tabelle Dab055 Auftrags-Positionen

Aktive-Eigenschaften (Methoden)

OnCalcReady Event nach erfolgreicher Kalkulation

Verwendung:

- Im Codeblock als Eigenschaft der Klasse TVarCalcPanel

Beispiel

siehe TVarCalcPanel

Siehe auch:

SL_Calc()

TVarCalcPanel


TPeriodTimer

TPeriodTimer

Klasse zur Performance-Messung und Auswertung.

Eigenschaften:

PerformanceTestActive

FileName

ExecStartTimer

ExecStopTimer

ExecResetAllTimer

ExecWriteAllTimer

Verwendung:

Die Klasse kann auf zwei Arten eingesetzt werden:

-> Verwendung der global registrierten Instanz mittels der CB-Konstante PerformanceTimer

-> Eigene Instanzierung

Beispiel

performancetimer.FileName := 'C:\Debug\Performance_test.txt',

performancetimer.PerformanceTestActive := True,

performancetimer.ExecResetAllTimer,

performancetimer.ExecStartTimer := 'Import',

sleep(100),

performancetimer.ExecStartTimer := 'Import_Schritt1',

sleep(100),

performancetimer.ExecStopTimer  := 'Import_Schritt1',

performancetimer.ExecStartTimer := 'Import_Schritt2',

sleep(100),

performancetimer.ExecStopTimer  := 'Import_Schritt2',

performancetimer.ExecStartTimer := 'Import_Schritt3',

sleep(200),

performancetimer.ExecStopTimer  := 'Import_Schritt3',

performancetimer.ExecStartTimer := 'Import_Schritt1',

sleep(100),

performancetimer.ExecStopTimer  := 'Import_Schritt1',

performancetimer.ExecStopTimer  := 'Import',

performancetimer.ExecWriteAllTimer,


TSelectBoxEx

TSelectBoxEx

Klasse für ein Control zur Auswahl einer oder mehrerer vorgegebenen Optionen:

Eigenschaften

Eigenschaften
DefaultColor:N | Die Farbe für das Control, wenn es nicht den Fokus hat
FocusColor:N | Die Farbe für das Control, wenn es den Fokus hat
ReadOnlyColor:N | Die Farbe für das Control, wenn es ReadOnly ist
CbCount:N | Gibt die Anzahl auswählbaren Items zurück
CbItemIndex:N | Index des aktuell fokussierten Items. Setzen des Wertes schaltet den Checked-Status des Items um.

Funktionen und Methoden
CbDeleteItem | Entfernt das Item am angegebenen Index
CbClear | Entfernt alle Items aus der SelectBox
CbCheckAll | Setzt den Checked-Status für alle Items auf True
CbCheckNone | Setzt den Checked-Status für alle Items auf False
CbCheckItem | Setzt den Checked-Status für das Item am angegebenen Index auf True
CbUnCheckItem | Setzt den Checked-Status für das Item am angegebenen Index auf False
CbAddItem:N | Fügt ein neues Items hinzu und gibt den Index für dieses zurück
CbGetItem:C | Gibt den Namen des Items am angegebenen Index zurück
CbIsItemChecked:L | Gibt den Checked-Status des Items am angegebenen Index zurück

Verfügbare Ereignisse

OnValidateValue

Zur Überprüfung, ob die Auswahl der Items erlaubt ist.

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung: Onlinehilfe Beispiel für die Verwendung von TSelectBoxEx im

//               Codeblock.

//##############################################################################

//##############################################################################

| oForm, oBtn_Add, oBtn_Delete, oEdit, oSelectBox |

//******************************************************************************

// Fügt ein neues SelectBox Item hinzu

//******************************************************************************

function DoAddClick()

  oSelectBox.CbAddItem(oEdit.text),

end,

//******************************************************************************

// Löscht ein SelectBox Item

//******************************************************************************

function DoDeleteClick()

  oSelectBox.CbDeleteItem(oSelectBox.ItemIndex),

end,

oForm := CreateObject('TFormEx'),

startseq

   //***************************************************************************

   oBtn_Delete         := CreateObject('TButton', , oForm, oForm),

   oBtn_Delete.Caption := 'Löschen',

   oBtn_Delete.Align   := alBottom,

   AssignEvent(oBtn_Delete, 'OnClick', 'DoDeleteClick'),

   //***************************************************************************

   oBtn_Add         := CreateObject('TButton', , oForm, oForm),

   oBtn_Add.Caption := 'Hinzufügen',

   oBtn_Add.Align   := alBottom,

   AssignEvent(oBtn_Add, 'OnClick', 'DoAddClick'),

   //***************************************************************************

   oEdit       := CreateObject('TEdit', , oForm, oForm),

   oEdit.Align := alBottom,

   //***************************************************************************

   oSelectBox       := CreateObject('TSelectBoxEx', '', oForm, oForm),

   oSelectBox.Align := alTop,

   oSelectBox.CbAddItem('#####'),

   oSelectBox.CbAddItem('12345'),

   oSelectBox.CbAddItem('abcde'),

   oSelectBox.CbAddItem('@@@@@'),

   oSelectBox.CbItemIndex := 3,

   ShowModal(oForm),

always

   DestroyObject(oForm),

stopseq

Siehe auch:

TDBSelectBoxEx


TTreeNodeEx

TTreeNodeEx

Klasse zur Datenhaltung einer Baumstruktur für TTreeViewEx.

Eigenschaften:

Allgemeine-Eigenschaften

Text Anzeigetext des Baumknotens

Parent Übergeordneter Knoten (Objekt: TTreeNodeEx)

HasChildren true = wenn Baumknoten Unterknoten besitzt

Value Optionaler Wert des Baumknotens

Aktive-Eigenschaften (Methoden)

Focused Veraltet (hat keine Funktion)

ImageIndex Index des Bildes das für den Baumknoten angezeigt wird

SelectedIndex Index des Bildes welches für den Baumknoten im selektierten Zustand angezeigt wird

StateIndex Index des Bildes für den Baumknoten welches zusätzlich angezeigt wird

FirstChild Gibt den ersten Unterknoten des aktuellen Knoten zurück, falls vorhanden (Objekt: TTreeNodeEx)

LastChild Gibt den letzten Unterknoten des aktuellen Knoten zurück, falls vorhanden (Objekt: TTreeNodeEx)

NextSibling Gibt den nächsten Knoten des aktuellen Knoten auf gleicher Hierachieebene zurück (Objekt: TTreeNodeEx)

PrevSibling Gibt den vorherigen Knoten des aktuellen Knoten auf gleicher Hierachieebene zurück (Objekt: TTreeNodeEx)

NextVisible Gibt den nächsten sichtbaren Knoten des aktuellen Knoten auf gleicher Hierachieebene zurück (Objekt: TTreeNodeEx)

PrevVisible Gibt den vorherigen sichtbaren Knoten des aktuellen Knoten auf gleicher Hierachieebene zurück (Objekt: TTreeNodeEx)

AddChild Fügt an den Knoten einen Unterknoten an und liefert diesen zurück (Objekt: TTreeNodeEx)

FreeTree Löscht den aktuellen Knoten inklusive aller Unterknoten

DeleteNode Löscht den aktuellen Knoten inklusive aller Unterknoten

DeleteChildNodes Löscht alle Unterknoten des aktuellen Knoten

CollapseNode Klappt die Baumstruktur unterhalb des aktuellen Knoten zusammen

ExpandNode Entfaltet die Baumstruktur unterhalb des aktuellen Knoten

Beispiel

siehe TTreeViewEx

Siehe auch:

TTreeViewEx


TTreeViewEx

TTreeViewEx

Klasse zur Darstellung einer Baumstruktur (ähnlich wie File-Explorer).

Eigenschaften:

Allgemeine-Eigenschaften

Images ImageListe des TreeViews

StateImages StateImageListe des TreeViews zur zusätzlichen Statusanzeige

Items Liste aller Knoten (zum hinzufügen muss CollAdd() verwendet werden)

Aktive-Eigenschaften (Methoden)

OnEditAborted Event bei Abbruch des Editierens

DisableDblClick Deaktivierung des DoubleClickEvents

FocusedNode Veraltet (hat keine Funktion)

FirstNode Gibt den obersten Knoten der Baumstruktur zurück (Objekt: TTreeNodeEx)

Selected Gibt den aktuell selektierten Baumknoten zurück (Objekt: TTreeNodeEx)

FullCollapseTree Klappt die gesamte Baumstruktur zusammen

FullExpandTree Entfaltet die gesamte Baumstruktur

BeginUpdate Verhindert bis zu einem Aufruf der Methode EndUpdate das Aktualisieren des Baumdiagramms

EndUpdate Hebt die Sperre die durch BeginUpdate gesetzt wurde wieder auf

AutoExpand true = Unterknoten öffnen sich automatisch bei Auswahl des Baumknoten

HideSelection true = Selektion wird nicht angezeigt wenn TreeView keinen Eingabefokus hat

HotTrack true = Baumknoten werden automatisch hervorgehoben wenn sich der Mauszeiger darüber befindet

MultiSelect true = mehrere Baumknoten können gleichzeitig ausgewählt werden

RowSelect true = Die ganze Zeile des selektierten Baumknotens wir hervorgehoben (ShowLines muss false sein)

ShowButtons true = Symbole (+ & -) zum auf- und zusammenfalten der Baumknoten anzeigen

ShowLines true = Verbindungslinien zwischen den Unterknoten anzeigen

ShowRoot true = Verbindungslinien zwischen den obersten Knoten der Baumstruktur und den Unterknoten anzeigen

EnableScrolling true = Mausrad scrollt Baumknoten; false = Mausrad verschiebt Bildlaufleiste

SortType 0 = Keine automatische Sortierung; 3 = Baumknoten werden automatisch nach deren Text sortiert

Indent Einrückung der Baumknoten (in Pixel)

Beispiel

|oForm, oTreeView, oPnlRight,

 oBtnAddNode, oBtnAddSub, oBtnDelNode, oLblNodeValue |

//******************************************************************************

// Neuen Knoten zum Baum hinzufügen

//******************************************************************************

function AddNode()

|oNode|

  // Knoten hinzufügen

  oNode       := CollAdd(oTreeView.Items),

  // Anzeigetext einstellen

  oNode.Text  := "Knoten " + str(CollCount(oTreeView.Items)),

  // Zusätzlichen Wert füllen

  oNode.Value := "XYZ Wert / " + str(GetExTimer()),

  oNode.ImageIndex    := CollCount(oTreeView.Items),

  oNode.SelectedIndex := 1,

  result := oNode,

end,

//******************************************************************************

// Neuen Unterknoten anfügen

//******************************************************************************

function AddSubNode(oParentNode)

|oSubNode|

  // an Knoten einen Unterknoten anfügen

  oSubNode       := oParentNode.AddChild,

  oSubNode.ImageIndex := CollCount(oTreeView.Items),

  oSubNode.SelectedIndex := 1,

  // Anzeigetext einstellen

  oSubNode.Text  := "Unterknoten " + str(CollCount(oTreeView.Items)),

  // Zusätzlichen Wert füllen

  oSubNode.Value := "ABC Wert / " + str(GetExTimer()),

  result := oSubNode,

end,

//******************************************************************************

// Neuen Knoten zum Baum hinzufügen

//******************************************************************************

function BtnAddNodeClick( Sender )

  AddNode(),

end,

//******************************************************************************

// Neuen Unterknoten an ausgewählten Knoten anfügen

//******************************************************************************

function BtnAddSubClick( Sender )

|oSelected|

  oSelected := oTreeView.Selected, // akt. gewählter Knoten

  if oSelected <> nil then

     // Unterknoten anfügen

     AddSubNode(oSelected),

     // Baumstruktur aufklappen

     oSelected.ExpandNode,

  else

     meld('Bitte erst einen Knoten auswählen'),

  endif,

end,

//******************************************************************************

// Ausgewählten Knoten löschen

//******************************************************************************

function BtnDelNodeClick( Sender )

|oSelected|

  oSelected := oTreeView.Selected, // akt. gewählter Knoten

  if oSelected <> nil then

     // Sind Unterknoten vorhanden?

     if oSelected.HasChildren then

        // Hinweis anzeigen

        if MessageDlg("Vorhandene Unterknoten werden gelöscht!",2,12) = 2 then

           exit,

        endif,

     endif,

     // Knoten inkl. aller Unterknoten löschen

     oSelected.DeleteNode,

  endif,

end,

//******************************************************************************

// Wenn im Baum ein anderer Knoten ausgewählt wird

//******************************************************************************

function TreeViewChange( Sender )

|oSelected|

  oSelected := oTreeView.Selected, // akt. gewählter Knoten

  if oSelected <> nil then

     // Value auslesen und anzeigen

     oLblNodeValue.Caption := 'Wert: ' + oSelected.Value,

  endif,

end,

//******************************************************************************

// Bei Formularstart Baum automatisch befüllen

//******************************************************************************

function MainFormShow( Sender )

|i, j, oNode|

  // Baum sperren

  oTreeView.BeginUpdate,

  startseq,

     // 5 Knoten mit je 3 Unterknoten erstellen

     for i:=0 to 5 do

        oNode := AddNode(),

        for j:=0 to 3 do

           AddSubNode(oNode),

        end,

     end,

  always,

     // Sperre aufheben

     oTreeView.EndUpdate,

  stopseq,

  // Baum komplett aufklappen

  oTreeView.FullExpandTree,

end,

//******************************************************************************

//******************************************************************************

// Formular

//******************************************************************************

//******************************************************************************

StartSeq,

  oForm          := CreateObject('TFormEx','MainForm'),

  oTreeView      := CreateObject('TTreeViewEx', 'TreeView',oForm,oForm),

  oTreeView.Images := FindObject(FindObject(Application, 'DM_ImageList'), 'ImageListMain'),

  oPnlRight      := CreateObject('TPanel','PnlRight',oForm, oForm),

  oLblNodeValue  := CreateObject('TLabel','LblNodeValue',oForm,oPnlRight),

  oBtnAddNode    := CreateObject('TBeBitBtn','BtnAddNode',oForm,oPnlRight),

  oBtnAddSub     := CreateObject('TBeBitBtn','BtnAddSub',oForm,oPnlRight),

  oBtnDelNode    := CreateObject('TBeBitBtn','BtnDelNode',oForm,oPnlRight),

  // Form

  oForm.Width    := 600,

  oForm.Height   := 600,

  oForm.Position := poMainFormCenter,

  assignevent(oForm, 'OnShow', 'MainFormShow'),

  // Tree

  oTreeView.Align         := alClient,

  oTreeView.HideSelection := false,

  assignevent(oTreeView, 'OnChange', 'TreeViewChange'),

  // Panel

  oPnlRight.Width      := 200,

  oPnlRight.Align      := alRight,

  oPnlRight.BevelOuter := bvNone,

  oPnlRight.Caption    := '',

  // Info Label

  oLblNodeValue.Top     := 5,

  oLblNodeValue.Left    := 5,

  oLblNodeValue.Height  := 15,

  oLblNodeValue.Caption := '',

  // Button (Knoten hinzufügen)

  oBtnAddNode.Top     := 35,

  oBtnAddNode.Left    := 5,

  oBtnAddNode.Width   := 190,

  oBtnAddNode.Caption := 'Neuen Knoten hinzufügen',

  oBtnAddNode.ImageIndex.IndexNormal := 15,

  assignevent(oBtnAddNode, 'OnClick', 'BtnAddNodeClick'),

  // Button (Unterknoten hinzufügen)

  oBtnAddSub.Top     := 65,

  oBtnAddSub.Left    := 5,

  oBtnAddSub.Width   := 190,

  oBtnAddSub.Caption := 'Neuen Unterknoten hinzufügen',

  oBtnAddSub.ImageIndex.IndexNormal := 15,

  assignevent(oBtnAddSub, 'OnClick', 'BtnAddSubClick'),

  // Button (ausgewählten Knoten löschen)

  oBtnDelNode.Top     := 95,

  oBtnDelNode.Left    := 5,

  oBtnDelNode.Width   := 190,

  oBtnDelNode.Caption := 'ausgewählten Knoten löschen',

  oBtnDelNode.ImageIndex.IndexNormal := 6,

  assignevent(oBtnDelNode, 'OnClick', 'BtnDelNodeClick'),

  // Formular anzeigen

  ShowModal(oForm),

OnError

   meld(GetErrorText()),

   DestroyObject( oForm ),

StopSeq,

Siehe auch:

TTreeNodeEx


TVarCalcPanel

TVarCalcPanel

Klasse zur Anzeige des Varianten-Dialogs auf einem Panel.

Eigenschaften:

Allgemeine-Eigenschaften

FormVarCalc:O Varianten-Dialog Formular (Objekt vom Typ TFormVarCalc)

DataSource:O DataSource Objekt

DataField:C Feld zu Varianten-Array (z.b. SL_Memo Feld)

ArtNo:C Artikel-Nummer (entspricht FormVarCalc.ArtNo)

PurchPrice:N Einkaufs-Preis (erst während und nach dem Event OnCalcReady gefüllt)

SalesPrice:N Verkaufs-Preis (erst während und nach dem Event OnCalcReady gefüllt)

ReadOnly:L nur Lese-Modus (wird ignoriert falls DataField/DataSource gesetzt ist) (entspricht FormVarCalc.ReadOnly)

Modified:L (nicht aktiv) (entspricht FormVarCalc.Modified)

Aktive-Eigenschaften (Methoden)

ValidValue:L Alle Eingabe-Felder validieren

TRUE - alle Eingaben sind korrekt

FALSE - der Fokus wird auf das Eingabe-Feld mit dem inkorrekten Inhalt gesetzt

OnCalcReady Event nach erfolgreicher Kalkulation (entspricht FormVarCalc.OnCalcReady)

Verwendung:

- Erzeugen der TVarCalcPanel-Klasse per CreateObject im Codeblock

- Zuweisen des Parents auf ein Formular (TFormEx, ...)

- Zuweisen eines DataSource und eines DataFields oder direktes setzen von FormVarCalc.PL_Memo

Beispiel

| oVCPanel, oDab010, oForm, oPanel, oEdit1, oEdit2, oBtn, oNavigator, oCheckBox,

  oDM, oDs, oField |

//******************************************************************************

// Artikel suchen

//******************************************************************************

function BtnSearchClick()

  if not DbSeek({Upper(RTrim(oEdit1.Text))}, oDab010) then

     MessageDlg('Artikel wurde nicht gefunden.', mtError)

  endif

end,

//******************************************************************************

// Kalkulation ein/ausblenden

//******************************************************************************

function CbShowCalcClick()

  oVCPanel.FormVarCalc.ShowCalculation:= not oVCPanel.FormVarCalc.ShowCalculation,

end,

//******************************************************************************

// Supervisor-Modus de/aktivieren

// (funktioniert nur in der Programmier-Umgebung)

//******************************************************************************

function CbAdminModeClick()

| oForm, oAktion |

oForm:= FindObject(Application, 'F_ProgMain'),

if not Empty(oForm) then

   oAktion:= FindObject(oForm, 'A_GodMode'),

   if not Empty(oAktion) then

      ActionExecute(oAktion)

   endif,

endif,

end,

//******************************************************************************

// Artikel-Nummer des TVarCalcPanels setzen

//******************************************************************************

function DsDab010Change()

  if not Empty(oVCPanel) then

     oVCPanel.ArtNo:= oDab010:ArtNr,

  endif,

end,

//******************************************************************************

// Ergebnis der Varianten-Eingabe ausgeben

//******************************************************************************

function CalcReady()

  Writeln(oVCPanel.FormVarCalc.PL_Memo),

end,

//******************************************************************************

// alle Eingaben prüfen

//******************************************************************************

function D010BeforePost()

   if not oVCPanel.ValidValue then

      abort(true),

   endif,

end,

//******************************************************************************

// Dialog erzeugen

//******************************************************************************

oDM:= CreateObject('TBeDBGet'),

StartSeq

  oDab010:= DbGetTable(oDM, waDAB010),

  StartSeq

    oDab010.CheckUserRights:= false,

    oForm:= CreateObject('TFormEx', '', Application),

    StartSeq

      AssignEvent(oDab010, 'BeforePost', 'D010BeforePost'),

      oForm.KeyPreView     := True,

      oForm.Width          := ScreenWidth / 3,

      oForm.Height         := ScreenHeight / 3 * 2,

      oForm.Position       := poScreenCenter,

      oPanel               := CreateObject('TPanel', '', oForm, oForm),

      oPanel.Align         := alTop,

      oPanel.Height        := 120,

      oEdit1:= CreateObject('TBeEdit', '', oForm, oPanel),

      oEdit1.Left          := 10,

      oEdit1.Top           := 10,

      oEdit1.Text          := 'TEST',

      oEdit2:= CreateObject('TBeEdit', '', oForm, oPanel),

      oEdit2.Left          := oEdit1.Left + oEdit1.Width + 10,

      oEdit2.Top           := oEdit1.Top,

      oEdit2.ReadOnly      := True,

      oBtn                 := CreateObject('TBeBitBtn', '', oForm, oPanel),

      oBtn.Left            := oEdit2.Left + oEdit2.Width + 10,

      oBtn.Top             := oEdit2.Top - 2,

      oBtn.Caption         := 'Suche',

      startseq,

         oBtn.Images          := FindObject(FindObject(Application, 'DM_ImageList'), 'ImageListMain'),

         oBtn.ImageIndex.IndexNormal := 91,

      onerror,

         writeln('Imagelist nicht geladen: ' + GetErrorText()),

      stopseq,

      AssignEvent(oBtn, 'OnClick', 'BtnSearchClick'),

      oDS                  := CreateObject('TDataSourceEx', '', oForm),

      oNavigator           := CreateObject('TDBNavigator', '', oForm, oPanel),

      oNavigator.DataSource:= oDS,

      AssignEvent(oDs, 'OnDataChange', 'DSDab010Change'),

      oDS.DataSet          := oDab010,

      oNavigator.Left      := 10,

      oNavigator.Top       := oEdit1.Top + oEdit1.Height + 10,

      oEdit2.DataSource    := oDS,

      oEdit2.DataField     := 'ARTNR',

      oField:= DbField('SL_MEMO', oDab010),

      oCheckBox            := CreateObject('TCheckBox', '', oForm, oPanel),

      oCheckBox.Left       := 10,

      oCheckBox.Top        := oNavigator.Top + oNavigator.Height + 10,

      oCheckBox.Caption    := 'ShowCalculation',

      AssignEvent(oCheckBox, 'OnClick', 'CbShowCalcClick'),

      oCheckBox            :=  CreateObject('TCheckBox', '', oForm, oPanel),

      oCheckBox.Left       := 10,

      oCheckBox.Top        := oNavigator.Top + oNavigator.Height + 30,

      oCheckBox.Caption    := 'AdminMode',

      AssignEvent(oCheckBox, 'OnClick', 'CbAdminModeClick'),

      // TVarCalcPanel erzeugen

      oVCPanel:= CreateObject('TVarCalcPanel', '', oForm, oForm),

      oVCPanel.DataSource:= oDs,

      oVCPanel.DataField := 'SL_MEMO',

      oVCPanel.Align     := alClient,

      oVCPanel.ArtNo     := 'TEST',

      AssignEvent(oVCPanel, 'OnCalcReady', 'CalcReady'),

      ShowModal(oForm),

    Always

      DestroyObject(oForm),

    StopSeq,

  Always

    DestroyObject(oDab010),

  Stopseq

Always

  DestroyObject(oDM),

StopSeq

Siehe auch:

SL_Spalten()

SL_Calc()

TFormVarCalc


Business Object Event "Berechnung Suchtext für Volltextsuche"

Business Object Event "Berechnung Suchtext für Volltextsuche"

Dieser Event wird aufgerufen, wenn ein Business-Objekt gespeichert wird. Damit kann zum einen der Vorschautext angepasst werden und zum anderen kann der Inhalt der Volltextsuche angepasst werden (z.B. Begriffe hinzufügen oder entfernen)

Hinweis für TBeMemoBo

- Die Eigenschaft "RefreshFulltextSearch" muss aktiv sein damit dieser Event ausgelöst wird

- Der Default-Wert für CbPreviewTextValue entspricht den ersten 255 Zeichen des Memo-Plaintext

- CbSearchFulltextValue wird beim Setzten automatisch für den FTS-Index optimiert

(PrepareTextForFTS() muss also nicht zusätzlich aufgerufen werden)

Beispiel

//******************************************************************************

// Beispiel Event-Behandlung für ein TBeMemoBo

//******************************************************************************

| nEvtNo:P1, oMemoBO:P2 |

// Aufruf erfolgt vor dem Speichern eines Memo Business-Objekts (TBeMemoBO)

// "CbSearchFulltextValue" wird bei der Zuweisung automatisch mit PrepareTextForFTS

// für den FTS-Index optimiert.

// Vorschautext, max. 255 Zeichen

oMemoBO.CbPreviewText    := Left('Eigener Vorschautext' + oMemoBO.CbPreviewText, 255),

// Inhalt für Volltextsuche,

oMemoBO.CbSearchFulltext := oMemoBO.CbSearchFulltext + ' Zusatz Suchtext',

Siehe auch:

PrepareTextForFTS()

TBeMemoBO


Business Object Event "Nach dem Import einer E-Mail"

Business Object Event "Nach dem Import einer E-Mail"

Dieser Event wird aufgerufen, wenn ein eine E-Mail-Nachricht als Memo Business-Objekt importiert wurde.

Das Memo wurde bereits gespeichert, die umgebende Transaktion ist noch aktiv.

Über den Parameter oMailImportedInfo:P3 (TBeCbMailImportedInfo) können Zusatz-Informationen abgerufen

werden und Aktionen definiert werden, die auf dem Mail-Server ausgeführt werden sollen.

Während der Ausführung dieses Events sollte keine Dialogsteuerung zum Einsatz gelangen, da künftige

be-Versionen den E-Mail-Import serverseitig ausführen werden.

Beispiel

// ******************************************************************************

// Beispiel 1

// Memo-Typ setzen und "Gelesen" markieren

// ******************************************************************************

|nEvtNo:P1, oMemoBO:P2, oMailImportedInfo:P3|

// Aufruf erfolgt nach dem Import eines E-Mails als Memo.

// - Das Memo Business-Objekt ist bereits gespeichert.

// - Die Transaktion ist noch aktiv.

// - Mittels des oMailImportedInfo-Objekts (TBeCbMailImportedInfo) können

//   weiterführende Aktionen auf dem MailServer definiert werden, die anschließend

//   zeitversetzt ausgeführt werden.

//   Hinweis: Verzeichnis-Operationen erfordern eine eingerichtete IMAP-Verbindung.

// - Achtung: in diesem Programm keine Dialogsteuerung verwenden.

oMemoBO.CbEdit(),

// Typ z.B. auf "E-Mail" setzen (macht bereits der Standard)

oMemoBO.MemoTypeValue := 50,

// "Gelesen" markieren für den aktuellen User - mit History-Eintrag

oMemoBO.MarkAsRead.UserID           := c_usr,

oMemoBO.MarkAsRead.WriteMemoHistory := true,

oMemoBO.MarkAsRead.CBMarkAsRead(),

oMemoBO.CbPost(),

// ******************************************************************************

// Beispiel 2

// E-Mail auf dem Server in Mailbox "DUPLIKATE" verschieben und Memo löschen

// ******************************************************************************

| nEvtNo:P1, oMemoBO:P2, oMailImportedInfo:P3 |

// Aufruf erfolgt nach dem Import eines E-Mails als Memo.

// - Das Memo Business-Objekt ist bereits gespeichert.

// - Die Transaktion ist noch aktiv.

// - Mittels des oMailImportedInfo-Objekts (TBeCbMailImportedInfo) können

//   weiterführende Aktionen auf dem MailServer definiert werden, die anschließend

//   zeitversetzt ausgeführt werden.

//   Hinweis: Verzeichnis-Operationen erfordern eine eingerichtete IMAP-Verbindung.

// - Achtung: in diesem Programm keine Dialogsteuerung verwenden.

if oMailImportedInfo.CanDoImapOperations and

   oMailImportedInfo.DuplicateMemoId > 0 then

   oMailImportedInfo.ImapOperations.CreateMailBox('DUPLIKATE'),

   oMailImportedInfo.ImapOperations.MoveToMailBox(oMailImportedInfo.ImportedUId,

                                                  oMailImportedInfo.ImapMailBoxPath,

                                                  'DUPLIKATE'),

   oMemoBO.CbDelete(),

endif

Siehe auch:

TBeMemoBO

TBeCbMailImportedInfo

TBeCbImapMailOperations


Business Object Event "Nach der Neuanlage"

Business Object Event "Nach der Neuanlage"

Dieser Event wird aufgerufen, wenn eine Business-Objekt Neuanlage stattgefunden hat.

Durch eine Exception in diesem Event kann die Neuanlage verworfen werden.

Hinweis:

Um den Vorgang ohne (an der Oberfläche) sichtbare Exception abzubrechen kann Abort(NoRecording=True) verwendet werden

Beispiel

|nEvtNo:P1, oBO:P2|

// Aufruf erfolgt nach der Neuanlage eines Business-Objekts

// Vorgang kann durch das Auslösen einer Exception abgebrochen werden.

if not jn('Aktion durchführen?') then

   SetError('Aktion wurde in Event abgebrochen') // Alternativ abort(NoRecording=True)

endif

Siehe auch:

Abort()

TBeMemoBO


Business Object Event "Vor dem Speichern"

Business Object Event "Vor dem Speichern"

Dieser Event wird aufgerufen, bevor ein Business-Objekt gespeichert wird.

Durch eine Exception in diesem Event kann das Speichern abgebrochen werden.

Hinweis:

Um den Vorgang ohne (an der Oberfläche) sichtbare Exception abzubrechen kann Abort(NoRecording=True) verwendet werden

Beispiel

// Siehe Business Object Event "Nach der Neuanlage"

Siehe auch:

Abort()

TBeMemoBO


Business Object Event "Vor dem Löschen"

Business Object Event "Vor dem Löschen"

Dieser Event wird aufgerufen, bevor ein Business-Objekt gelöscht wird.

Durch eine Exception in diesem Event kann das Löschen abgebrochen werden.

Hinweis:

Um den Vorgang ohne (an der Oberfläche) sichtbare Exception abzubrechen kann Abort(NoRecording=True) verwendet werden

Beispiel

// Siehe Business Object Event "Nach der Neuanlage"

Siehe auch:

Abort()

TBeMemoBO


Business Object Event "Berechnung der Info-Caption"

Business Object Event "Berechnung der Info-Caption"

Dieser Event wird aufgerufen, wenn ein Zugriff auf die Caption oder die Zuordnungs-Caption eines Business-Objekts stattfindet.

In diesem Event können über das Business-Objekt Unterobjekt "CaptionInfo" (TBeBoInfoCaption) die Captions angepasst werden.

Beispiel

|nEvtNo:P1, oMemoBO:P2, oCaptionInfo:P3|

// Aufruf erfolgt bei Berechnung der Info-Caption eines Memo Business-Objekts (TBeMemoBO)

// Mittels des oCaptionInfo-Objekts (TBeBoInfoCaption) können

//  - die Caption des Memo Business-Objekts sowie

//  - die Caption für die Zuordnung des Memo Business-Objekts geändert werden

// Zeitpunkt der letzten Änderung an die Caption des Single-Tabs anhängen

// -> erscheint dann in Tabkarten-Caption

oCaptionInfo.Caption.Caption  := oCaptionInfo.Caption.Caption +

                                 ' [letzte Änderung: ' +

                                 dtoc(oMemoBO.ChangedValue) +

                                  ']',

// Wurde das Memo Business-Objekt durch jemand anderen geändert, dann den

// Usernamen an die Memo-Zuordnung anhängen

// -> erscheint dann in InfoPanel

if oMemoBO.ChangedByValue <> c_usr then

   oCaptionInfo.Link.Suffix := oCaptionInfo.Link.Suffix +

                               ' [Änderung durch: ' +

                                BeUserName(Val(oMemoBO.ChangedByValue)) +

                               ']',

endif,

Siehe auch:

TBeMemoBO

TBeBoInfoCaption


Business Object Event "vor dem Setzen der internen Notiz"

Business Object Event "Vor dem Setzen der internen Notiz"

Dieser Event wird aufgerufen, bevor die interne Notiz eines Memo Business-Objekts gesetzt wird.

In diesem Event kann über das Info-Objekt oInternalNoteInfo (TBeBoInternalNoteInfo) die interne Notiz vorbelegt werden.

Beispiel

| nEvtNo:P1, oMemoBO:P2, oInternalNoteInfo:P 3|

// Aufruf erfolgt bei dem Setzen der internen Notiz eines Memo Business-Objekts (TBeMemoBO)

// Mittels des oInternalNoteInfo-Objekts (TBeBoInternalNoteInfo) kann die interne Notiz

// angepasst werden

oInternalNoteInfo.CustomInternalNote := InputBox('Interne Notiz:', 'Text:', ''),

if empty(oInternalNoteInfo.CustomInternalNote) then

   oInternalNoteInfo.UseDefaultInternalNote := jn('Standard Notiz verwenden?'),

endif,

Siehe auch:

TBeMemoBO

TBeBoInternalNoteInfo


Business Object Event "bei Kopie"

Business Object Event "bei Kopie"

Dieser Event wird aufgerufen, wenn ein Business-Objekt kopiert wird.

z.B. beim Ausführen von "Neues Projekt aus Vorlage" im Projektmanagement.

Über das DuplicateInfo-Objekt können auf verschiedenste Quell-Informationen zugegriffen werden (z.B. das Quell Business-Objekt).

Dem DuplicateInfo-Objekt in diesem Event, ist es nur möglich auf die Eigenschaften der Business-Objekte zuzugreifen.

Im Gegensatz hierzu, hat das DuplicateInfo-Objekt aus dem Event "nach dem Duplizieren", Eigenschaften wodurch die weiteren Aktionen

nach dem Event gesteuert werden können.

Das Event "bei Kopie" wird für folgende Business-Objekte ausgeführt.

&#183 TBeProjectBO

Eigenschaften:

SourceBo: TBeProjectBO

Quell-Business Objekt

&#183 TBeProjectTaskBO

Eigenschaften:

SourceBo: TBeProjectTaskBO | Quell-Business Objekt
ProjectBO: TBeProjectBO | Ziel-Business Projekt-Objekt
SourceProjectBO: TBeProjectBO | Quell-Business Projekt-Objekt

&#183 TBeProjectTaskEffortBO

Eigenschaften:

SourceBo: TBeProjectTaskEffortBO | Quell-Business Objekt
ProjectTaskBO: TBeProjectTaskBO | Ziel-Business Projekt-Task-Objekt
SourceProjectTaskBO: TBeProjectTaskBO | Quell-Business Projekt-Task-Objekt
ProjectBO: TBeProjectBO | Ziel-Business Projekt-Objekt
SourceProjectBO: TBeProjectBO | Quell-Business Projekt-Objekt

Beispiel

| nEvtNo:P1, oProjectBO:P2, oDuplicateInfo:P3 |

// Aufruf erfolgt beim Kopieren eines Projekt-Stamm Business-Objekts (TBeProjectBO)

// Über das oDuplicateInfo-Objekt (TBeBoProjectDuplicateInfo) können zusätzliche Informationen

// wie z.B. das Quell-Business-Objekt, abgerufen werden

oProjectBO.CbComment := ConcatRTF(oDuplicateInfo.CbSourceProjectBO.CbComment,

                                  "Projekt kopiert am " + DToC(now()) + ' um ' + time() + ' durch ' + BeUserName(c_usr)),

Siehe auch:

TBeProjectBO

TBeProjectTaskBO

TBeProjectTaskEffortBO

TBeProjectBusinessController

TBeBoProjectTaskDuplicateInfo

TBeBoProjectTaskEffortDuplicateInfo

TBeBoProjectDuplicateInfo


Business Objekt Event "nach dem Duplizieren"

Business Object Event "nach dem Duplizieren"

Dieser Event wird aufgerufen, wenn ein Business Objekt "dupliziert" wird.

&#183 TBeMemoBO

Für ein Memo Business-Objekt wird dieser Event bei "(allen) antworten", "weiterleiten" oder "Folge Memo erstellen", aufgerufen.

In diesem Event können über das als Parameter verfügbare DuplicatedInfo-Objekt (TBeCbMemoDuplicatedInfo) weitere Aktionen gesteuert sowie auf das Quell-Business Objekt zugegriffen werden.

Beispiel

|nEvtNo:P1, oMemoBO:P2, oDuplicatedInfo:P3,

 aAdditionalHeader, aHeaderArray, oTargetDab065|

// Aufruf erfolgt nach dem Duplizieren eines Memo Business-Objekts (TBeMemoBO)

// Mittels des oDuplicatedInfo-Objekts (TBeCbMemoDuplicatedInfo, wenn das Business-Objekt

// ein TBeMemoBo ist) kann der Duplizierungs-Vorgang beeinflusst werden, außerdem kann darüber

// auf das Quell Memo Business-Objekt zugegriffen werden.

if oDuplicatedInfo.MemoDuplicateMode = mdmSequence then

  // Quell-Memo gelesen markieren

  oDuplicatedInfo.MarkSourceMemoAsRead := True,

  // Quell-Memo Inhalt übernehmen

  oDuplicatedInfo.TakeOverOldContent   := True,

  // Betreff-Präfix

  oDuplicatedInfo.SubjectPrefix        := 'Folge: ',

  // Eigenen Wert zu Header Array hinzufügen

  aAdditionalHeader := Dim(3),

  aAdditionalHeader[1] := pchiCustom,

  aAdditionalHeader[2] := 'Original erstellt am:',

  aAdditionalHeader[3] := DtoC(oDuplicatedInfo.SourceBo.CreatedValue),

  aHeaderArray := oDuplicatedInfo.PrevContentHeaderArray,

  AAdd(aHeaderArray, aAdditionalHeader),

  oDuplicatedInfo.PrevContentHeaderArray := aHeaderArray,

  // Beispiel für Indi-Feld

  // oMemoBO.CbTable:X_INDIFIELD := 'Neuer Wert'

endif,

Siehe auch:

TBeMemoBO

TBeCbMemoDuplicatedInfo


Event "beas: Validierung eines Requests für einen Service mit ExternalContext"

Event "beas: Validierung eines Requests für einen Service mit ExternalContext"

Beschreibung

Der Event wird nach Empfang eines Service-Requests, der mit dem Contexttyp ExternalContext registriert wurde, ausgeführt. Er dient der Validierung und gegebenenfalls der Ergänzung der Daten des Contexts. Anschließend müssen die Daten des Contexts vollständig sein.

Hinweis

Dieser Event steht ausschließlich für den beas zur Verfügung.

Parameter

nEvtNo | Enum |
oUserSession: | TBeasCbUserSession |
oContext | TBeasCbExternalContext | Context-Parameter aus Service-Request
oInputParam | TBeasCbDynamicServiceInput | Input-Parameter aus Service-Request ohne Context
oOutputParam | TBeasCbContextValidationResult | Rückgabewerte

Rückgabewert

keine - der Parameter oOutputParam wird direkt verwendet.

Verarbeitung des oOutputParam nach Ausführung des Validierungsevent:

&#183 sind weder UserNo noch UserLoginName gesetzt, wird als Default der Start-Beas-User als User gesetzt

&#183 ist der Standort nicht versorgt (<0), wird der Standort gesetzt, mit dem der beas gestartet wurde.

&#183 ist die Abteilung nicht versorgt (<0), wird die Abteilung gesetzt, mit der der beas gestartet wurde.

&#183 ist Locale nicht versorgt, wird als Default de-DE gesetzt.

&#183 ist die Zeitzone nicht versorgt, wird als Default 'Z' für UTC gesetzt.

Beispiel

| nEvtNo:P1, oUserSession:P2, oContext:P3, oInputParam:P4, oOutputParam:P5,

  oParamsContext, oSwitch

|

//******************************************************************************

// oUserSession    Klasse: TBeasCbUserSession

// oContext        Klasse: TBeasCbExternalContext

// oInputParam     Klasse: TBeasCbDynamicServiceInput

// oInputParam.CbParams    Klasse: TBeasCbServiceInputParam

// oOutputParam    Klasse: TBeasCbContextValidationResult

//

// CbIsValid: entscheidet, ob Context als valide gilt oder nicht

// nach Ausführung des Events werden die versorgten Informationen aus oOutputParam

// in den Context kopiert ( CbUserNo bis CbTimestampUTCStr und CbContextParamOutput )

//

// Rückgabe: keine

//******************************************************************************

oSwitch := oInputParam.CbParams.ParamValueDef("Switch", -1),

case oSwitch

   of 0  ::

      oOutputParam.CbIsValid := True,

      oOutputParam.CbUserNo  := 65,

      oParamsContext := oOutputParam.CbContextParamOutput.CbParams,

      oParamsContext.AddParam("additional", "something"),

      oParamsContext.AddParam("additional2", "something2"),

      oOutputParam.CbContextLoggingInfo := 'Info fuer Context Logger',

   otherwise oOutputParam.CbIsValid := False,

endcase,

Siehe auch:

TBeasCbContextValidationResult

TBeasCbDynamicServiceOutput


Event "bei Aktualisierung Termin"

Event "bei Aktualisierung Termin"

Dieser Event wird aufgerufen, nachdem ein Termin (DabTRM: Terminkalender) gespeichert wurde.

Hierbei werden alle notwendigen Informationen für den Termin und dessen Besprechung bereitgestellt.

Der Event dient hauptsächlich zur Steuerung von individuellen Lese-Berechtigungen und dem Setzen des Info-Textes eines Termins.

Beispiel

|nEvtNo:P1, oDataMod:P2, oUpdInfo:P3|

// oDataMod: Datenmodul (in Transaktion, es dürfen keine Änderungen an den Tabellen erfolgen)

// oUpdInfo: Objekt bietet Information über den aktuellen Aktualisierungs-Prozess und

//           dient zur Modifizierung einiger Felder

//           MeetingID: (nur lesen) ID der Besprechung welche aktualisiert wird

//           EventID  : (nur lesen) ID des Termins welcher aktualisiert wird

//           InfoText : (setzbar) Inhalt der in das Feld "INFOTEXT" der DabTRM (Terminkalender)

//                                geschrieben wird

//           UseForAll: (setzbar) schaltet den Aufruf dieses Events für alle folgenden Termine

//                                der aktuellen Besprechung aus, hierbei werden die Informationen

//                                dieses Events für alle weiteren Besprechungs-Termine verwendet

//

//           ReadRightFullManual,

//           ReadRightInfoManual: (nur lesen) Lese-Berechtigung für das Feld "Voll-Zugriff" bzw. "Info-Zugriff"

//                                            wurde manuell angepasst

//           ReadRightFull,

//           ReadRightInfo      : (setzbar) vorberechneter Wert für alle User die "Voll-Zugriff" bzw. "Info-Zugriff"

//                                          haben. z.b. '050/060/080'

//                                          Dieser Wert kann gesetzt werden wird aber nochmals validiert,

//                                          damit sichergestellt ist das alle Teilnehmer (falls keine vorhanden alle User)

//                                          "Voll-Zugriff" besitzen.

//

//           Zur Lese-Berechtigung:

//           - Einträge können nie in beiden Feldern "Info" und "Voll" stehen

//           - der Eintrag "000" bedeutet "alle Benutzer"

//           - Einträge in "Info-Zugriff" schränken Einträge in "Voll-Zugriff" ein

//             z.b. "Info-Zugriff" = '050/060'

//                  "Voll-Zugriff" = '000'     -> alle Benutzer außer '050' und '060' haben "Voll-Zugriff"

//

// Rückgabe: keine

//******************************************************************************

// Die Matchcodes aller zu diesem Termin verknüpften Kunden als Komma-Liste ermitteln

//******************************************************************************

function CalcInfoText(nBesprechungsID)

| oSQLQuery, cSqlStr |

  Result  := '',

  cSqlStr := SqlStr( SELECT DISTINCT DAB000.MATCHCODE

                      FROM

                      INNER JOIN

                            on DAB000.ID = DABTRV.ZIEL_ID

                      WHERE     DABTRV.BESP_ID  =

                            AND DABTRV.WORKAREA = 1 ),

  // wichtig: SQL-Statement muss in Transkation des Datenmoduls laufen

  oSQLQuery := CreateObject('TBeAdsQuery', 'TRM_INFOTEXT_QRY', oDataMod.AdsConnection),

  startseq

    oSQLQuery.Sql    := cSqlStr,

    oSQLQuery.Active := True,

    DbGoTop(oSQLQuery),

    while not eof(oSQLQuery) do

      // Matchcodes mit Komma separiert auflisten

      if not empty(oSQLQuery:MATCHCODE) then

        if not empty(Result) then

          Result += ', ',

        endif,

        Result += AllTrim(oSQLQuery:MATCHCODE),

      endif,

      DbSkip(1, oSQLQuery),

    end,

  always

    DestroyObject(oSQLQuery),

  stopseq,

end,

startseq

  oUpdInfo.UseForAll     := True,

  oUpdInfo.ReadRightFull := oUpdInfo.ReadRightFull + '/100',

  oUpdInfo.ReadRightInfo := oUpdInfo.ReadRightInfo + '/050',

  oUpdInfo.InfoText      := CalcInfoText(oUpdInfo.MeetingID),

onerror

  MessageDlg('Fehler im Event ' + progName() + crlf + crlf + GetErrorText()),

  raise(),

stopseq,

// Ergebnis: - der Event wird pro Besprechung nur 1 mal ausgelöst, die setzbaren Felder gelten für alle Termine der Besprechung

//           - der User "100" hat immer Vollen-Zugriff auf alle Termine der Besprechung

//           - der User "050" hat nur Info-Zugriff auf alle Termine der Besprechung

//             (außer auf seine eigenen, dort hat er immer Vollen-Zugriff)

//           - alle Termine der Besprechung haben im Info-Text eine Liste mit den Matchcodes

//             der zugehörigen Kunden stehen


Event "bei Anzeige Artikel Neuanlage-Dialog"

Event "bei Anzeige Artikel Neuanlage-Dialog"

Der Aufruf erfolgt unmittelbar vor dem Anzeigen des Artikel Neuanlage-Dialogs.

Beispiel

| nEvtNo:P1, cEditNewArtNo:P2, lCheckAutoNo:P3, lCheckCopyExistingArt:P4, cEditExistArtNo:P5, lCheckCopySupps:P6, lCheckCopyAllData:P7, lCheckCopyForeignLangs:P8, lCheckCopyPartList:P9 |

// Eventgetriggerte individuellen Befüllung des NewArticle-Dialogs

// Rückgabe               : Array {cEditNewArtNo, lCheckAutoNo, lCheckCopyExistingArt,

//                                 cEditExistArtNo, lCheckCopySupps, lCheckCopyAllData,

//                                 lCheckCopyForeignLangs, lCheckCopyPartList}

// cEditNewArtNo          : Aktuelle Artikelnummer

// lCheckAutoNo           : True für Nr. automatisch vergeben

// lCheckCopyExistingArt  : True für existierenden Artikel kopieren

// cEditExistArtNo        : Zu editierende Artikelnummer

// lCheckCopySupps        : True für Lieferanten kopieren

// lCheckCopyAllData      : True für alle Daten zu kopieren

// lCheckCopyForeignLangs : True für Fremdsprachen zu kopieren

// lCheckCopyPartList     : True für Stücklisten zu kopieren

{cEditNewArtNo, lCheckAutoNo, lCheckCopyExistingArt, cEditExistArtNo, lCheckCopySupps, lCheckCopyAllData, lCheckCopyForeignLangs, lCheckCopyPartList}


Event "bei Auswahl Prüfplan-Vorlage"

Event "bei Auswahl Prüfplan-Vorlage"

Der Aufruf erfolgt vor der Erstellung der Prüfpläne für die QS-Prüfung (Wareneingang -> Prüfvorgang).

Beispiel

| nEvtNo:P1, nModus:P2, cKommiss:P3, cPlanArtNo:P4, nPlanD210ID:P5,

  oDab250:P6, oDab255:P7, oDab035:P8, oDab240:P9, lCheckDisabled |

// Auswahl einer Prüfplan-Vorlage

// nModus      : Prüfplan-Vorlage für

//               1 - Wareneingangs-Position

//               2 - Produktionsauftrags-Position

// cKommiss    : Chargen/Serien-Nr. wenn "Prüfung je Charge/Serien-Nr." aktiv

//               ansonsten leer

// cPlanArtNo  : Artikelnummer oder Stücklisten-Artikel von welcher der Prüfplan

//               kopiert wird

// nPlanD210ID : Stücklistenpositions-ID von welcher der Prüfplan kopiert wird

//               wenn es sich um einen Prüfplan einer Stücklistenposition handelt

// oDab250     : Tabelle Wareneingang-Kopfdaten         bei nModus=1 ansonsten nil

// oDab255     : Tabelle Wareneingang-Positionsdaten    bei nModus=1 ansonsten nil

// oDab035     : Tabelle Produktion-Bestellrückstände   bei nModus=2 ansonsten nil

// oDab240     : Tabelle Produktion-Auftragsstücklisten bei nModus=2 ansonsten nil

//

// Rückgabe    : Array {cPlanArtNo, nPlanD210ID, lNoCheck}

// lNoCheck    : Schaltet die Prüfung aus

// Prüfung für Lieferant '1111' ausschalten

lCheckDisabled := (oDab250:ABS_TYP = 'Z') and (oDab250:ABS_NR = 1111),

{cPlanArtNo, nPlanD210ID, lCheckDisabled}

Siehe auch:

Event "nach Erfassen Prüfschritt"


Event "bei Berechnung der Sicherheitszeit in Tagen"

Event "bei Berechnung der Sicherheitszeit in Tagen"

Berechnungsevent, das zur Steuerung einer Sicherheitszeit bei tagesgenauen Dispositionsvorgängen eingesetzt werden kann. Die Sicherheitszeit kann als zusätzliche Pufferzeit zwischen dem geplanten Zugang und dem Abgang der Artikel verwendet werden.

Beispiel

| nEvtNo:P1, nModus:P2, oDab010:P3, dBedarf:P4, nSicherZeit:P5 |

// Rückgabe = Sicherheitszeit in Tagen oder <leer> = nSicherZeit

// nModus      : Aktueller Berechnungsmodus (1=Handel, 2=Baugruppen, 3=SLAufl.Kauft, 4=SL-Aufl.Baugruppen)

// oDab010     : Aktueller Artikel-Datensatz

// dBedarf     : Berechnetes Bedarfsdatum

// nSicherZeit : Vorgabe Sicherheitszeit in Tagen

nSicherZeit += 3,

nSicherZeit


Event "bei Berechnung der WE-Jobliste"

Event "bei Berechnung der WE-Jobliste"

Beschreibung

Der Event wird ausgeführt vor Update/Synchronization des Waren-Eingangs. Es kann entschieden werden, welches Typ von Update/JobList wird durchgeführt.

Parameter

nEventNo: | integer | Nummer des Events
nJobList: | integer | Nues/vorgeschlagenes Wert der Joblist
oDab010 | DataSet | Artikel
oDab510 | DataSet | Artikel-Lieferanten
oWEPosInfoParams | Object | Vor-Berechenete nutzliche Parameters: S255_OrderPosNo - Auftrag & Position Nummer; S255_ReceiPosNo - Bestellungsnummer; E255_CurrQuant - Istmenge nach Zählung; S255_ArtNo - DAB010 Artikel Nummer; B255_Done - Position erledigt; E255_AccQuant - Verbuchte/Vereinnahmte Menge; I255_JobList - Altes Wert - Zuordnung zu Jobliste; D255_NeedAppoint - Bedarfs-Termin; I250_AddressNo - Absender-Nr. - Lieferanten/Kunden-Nr. S250_SenderType - Absender-Typ (Z = Lieferant, K = Kunde, U = Unbekant); S250_ReceiType - WE-Typ; (W = Wareneingang, B = Beistellung, R = Retoure, K = Reklamation, U = Unbekannt); S250_ReceiNo - Waren-Eingangs-Nr. B250_LocRestore - Standort-Umlagerung; I255_D035_ID - Datensatz-ID d. Best-Rückstand
nFactor | integer | +1 oder -1

Rückgabewert

Integer - Typ von Update/JobList

Mögliche Werte:

1 = Wareneingang mit QS-Prüfung

2 = Wareneingang ohne QS-Prüfung

3 = Wareneingang ohne Rückstandszuordnung

5 = Kunden-Retoure

6 = Kunden-Reklamation

8 = Sonstiges / Unbekannt (keine Ist-Menge)

9 = Nicht identifiziert (Absender und/oder Artikel)

Beispiel

//################################################################################

// Dieser Event wird ausgeführt bei Update/Synchronisation des Wareneingangs.

// Es kann entschieden werden, welche JobListe die Position zugeordnet wird.

// Readonly Felder des Objekts oWEPosInfoParams der Klasse TbeSrPosUpdParams:

//  S255_OrderPosNo

//  S255_ReceiPosNo

//  E255_CurrQuant

//  S255_ArtNo

//  B255_Done

//  E255_AccQuant

//  I255_JobList

//  D255_NeedAppoint

//  I250_AddressNo

//  S250_SenderType

//  S250_ReceiType

//  S250_ReceiNo

//  B250_LocRestore

//  I255_D035_ID

//

// Rückgabe: Typ von Update/JobList

//     1 = Wareneingang mit QS-Prüfung

//     2 = Wareneingang ohne QS-Prüfung

//     3 = Wareneingang ohne Rückstandszuordnung

//     5 = Kunden-Retoure

//     6 = Kunden-Reklamation

//     8 = Sonstiges / Unbekannt (keine Ist-Menge)

//     9 = Nicht identifiziert (Absender und/oder Artikel)

//

//################################################################################

| nEvtNo:P1, nJobList:P2, oDab010:P3, oDab510:P4, oWEPosInfoParams:P5, nFactor:P6 |

//Umlagerung wird immer mit QC-Prüfung

if (nJobList = 2) and (oWEPosInfoParams.B250_LocRestore) then

 nJobList := 1,

endif,

nJobList

Siehe auch:

TbeSrPosUpdParams


Event "bei Export nach MS Excel"

Event "bei Export nach MS Excel"

Der Event wird nach dem Aufruf von "Browser exportieren" aufgerufen und dient zur Formatierung des Excel-Dokumentes.

Beispiel

| nEvtNo:P1, uExcelExport:P2 |

// Formatierung eines Export nach MS Excel

// uExcelExport : ExcelExportObjekt

startseq

   uExcelExport.FontHeader.Name    := 'Arial',

   uExcelExport.FontHeader.Size    := '10',

   uExcelExport.FontTitles.Name    := 'Arial',

   uExcelExport.FontTitles.Size    := '10',

   uExcelExport.FontData.Name      := 'Arial',

   uExcelExport.FontData.Size      := '10',

   uExcelExport.FontSummary.Name   := 'Arial',

   uExcelExport.FontSummary.Size   := '10',

   uExcelExport.FontFooter.Name    := 'Arial',

   uExcelExport.FontFooter.Size    := '10',

   uExcelExport.FontGroup.Name     := 'Arial',

   uExcelExport.FontGroup.Size     := '10',

onerror

   Meld(GetErrorText()),

stopseq


Event "bei Fehler in BE-Recht/Event/Formel"

Event "bei Fehler in BE-Recht/Event/Formel"

Der Aufruf erfolgt, falls in einem DB-Recht (Tabellen-/Feld-Recht, Neu, Update, Delete), einem BE-Event oder einer Formel in den allgemeinen Parametern ein Fehler auftritt.

Der Event bietet die Möglichkeit die Fehlinformationen auszuwerten und zu steuern, ob anschließend ein Programm-Fehler ausgelöst werden soll (siehe Beispiel).

Beispiel

| nEvtNo:P1, nEventTyp:P2, cEventID:P3, oException:P4, lHandled:P5,

  cTyp, nRes |

// Handling von BE-Event-Fehlern

// nEventTyp  : 0 = Tabellen/Feld-Recht (Neu, Update, Delete)

//  cEventID  : Text mit genaueren Infos zum Recht (Tabellen-/Feldname, Art des Rechts, etc.)

// nEventTyp  : 1 = BE-Event (z.B. "beim Start von BE-32")

//  cEventID  : Numerische ID und Name des Events (z.B.: "2: beim Start von BE-32")

// nEventTyp  : 2 = Allg.Parameter Formel (z.B. "Formel Auftrags-Sperre")

//  cEventID  : Feldname in DABPAR (z.B.: "AUF_SPERR")

// oException : Exception-Object, entspricht Rückgabe von GetErrorObj()

// lHandled   : Vorgabe, ob der Fehler bereits gehandled wird (Sprich: das keine Exception mehr ausgelöst wird)

//              True   = bereits gehandled, keine Exception

//              False  = nicht gehandled, Exception auslösen

// Rückgabe   : True   = Fehler WURDE in diesem Events gehandled, KEINE Exception auslösen

//              False  = Fehler wurde NICHT in diesem Events gehandled, Exception AUSLÖSEN

//              <leer> = Vorgabe von lHandled übernehmen

// HINWEIS: Fehler in diesem Event werden ignoriert!

// Test-Werte für Programmeditor

if EditorMode() then

   nEventTyp := 0,

   cEventID  := '999: bei Ereignis',

   oException:= CreateObject('TComponent'),

   lHandled  := False,

   startseq,

     SetError('Fehler in Funktion xxx()'),

   onerror,

   stopseq,

endif,

// Typ im Klartext

case nEventTyp

   of 0 :: cTyp := "Tabellen/Feld-Recht",

   of 1 :: cTyp := "BE-Event",

   of 2 :: cTyp := "Allg.Parameter Formel",

otherwise

   cTyp := "Unbekannt"

endcase,

nRes := MessageDlg('FEHLER IN BE-EVENT:' + crlf + crlf +

                   'Event-Typ:    '   + cTyp + crlf +

                   'Fehler-Typ:   '   + ClassName(oException) + crlf +

                   'Fehler-Text:  '   + GetErrorText(oException) + crlf + crlf +

                   'Event-ID:       ' + cEventID + crlf + crlf +

                   'Programmausführung wird per Default ' + iif(not lHandled, 'NICHT ', '')

                   + 'fortgesetzt!' + crlf + 'Programmausführung fortsetzen?',

                   mtError, mbYes + mbNo + mbCancel, 0 ),

if nRes = mrYes then

   lHandled := True,

else

   if nRes = mrNo then

      lHandled := False,

   endif,

endif,

lHandled


Event "bei Import der Sachkontenbuchungsdatei"

Event "bei Import der Sachkontenbuchungsdatei"

Beschreibung

Der Event wird zwischen dem Einlesen der CSV-Datei im Formular 'Import Sachkontenbuchungen' und dem Einfügen der Buchungsimporte in die DFSKB.

Er dient zur Flexibilisierung der Importschnittstelle.

Nach Ausführung des Events werden in der MemTable, die im Weiteren benutzt werden soll, folgende Felder erwartet:

- S/H: Inhalt 'H' kennzeichnet, dass Buchungsrichtung umzukehren ist

- Konto

- Gegenkonto

- Umsatz

- Datum: im Datumsformat!

- KOST1

- Belegfeld 1

- Buchungstext

Parameter

nEventNo | integer | Nummer des Events
oImportedFileTable: | TBeMemTable | eingelesene Datei in einer MemTable
oResultingMemTable | TBeMemTable | Rückgabe-MemTable, wenn neue Felder hinzugefügt werden. Dann muss Rückgabewert auf True gesetzt werden!
cHeaderLine | string | abgetrennte Headerzeile falls die eingelesene Datei DATV-Format hat

Rückgabewert

Logisch - Rückgabe-MemTable erfolgreich gefüllt? Wenn True, wird Inhalt von oResultingMemTable weiterverarbeitet, sonst die ursprüngliche oImportedFileTable.

Beispiel

// Beispiel prüft die Notwendigkeit der Anpassung und führt diese für einen DATEV-Buchungsstapel an

//################################################################################

// Dieser Event wird beim Einlesen der Datei zum Import von Sachkontenbuchungen

// ausgeführt. Nach erfolgreicher Ausführung des Events werden in

// oResultingMemTable die Spalten erwartet:

//   S/H

//   Konto

//   Gegenkonto

//   Umsatz

//   Datum (ftDate)

//   KOST1

//   Belegfeld 1

//   Buchungstext

//

// Parameter:

//   oImportedFileTable: MemTable mit der eingelesenen Datei

//   oResultingMemTable: diese MemTable wird nach dem Event zum Import verwendet

//   cHeaderLine:        Headerzeile aus Datei bei DATEV Format; sonst leer

//

// Rückgabe: die Rückgabe-MemTable erfolgreich erstellt?

//

//################################################################################

| nEvtNo:P1, oImportedFileTable:P2, oResultingMemTable:P3, cHeaderLine:P4, cYear, oField, cDateString, bModificationDone, cBelegDatum |

//Browse(, oImportedFileTable),

bModificationDone := False,

// prüfen, ob Anpassung notwendig

if not Empty(oImportedFileTable.CbFieldByName('Gegenkonto')) and not Empty(oImportedFileTable.CbFieldByName('Datum')) then

   // keine Anpassung notwendig

   bModificationDone := False,

else

  // wenn die Datei DATEV-Format hat, wurde vor dem Einlesen der Header abgetrennt und ist als cHeaderline verfügbar

  if not Empty(cHeaderLine) then

     cYear := SubStr(Token(cHeaderline, ';', 15), 1, 4),

  endif,

  if Empty(cYear) then

     cYear := Str(Year(Date())),

     MessageDlg('Achtung: Buchungsjahr konnte nicht sicher bestimmt werden. Es wird auf das aktuelle Jahr gesetzt.', mtInformation, mbOK),

  endif,

  oResultingMemTable.CbBorrowFromDataSet(oImportedFileTable),

  oResultingMemTable.CbAddField('Gegenkonto', ftInteger, 0),

  oResultingMemTable.CbAddField('Datum', ftDate, 0),

  oResultingMemTable.CbOpen(),

  oResultingMemTable.CbLoadFromDataset(oImportedFileTable, True),

  oImportedFileTable.CbFirst(),

  oResultingMemTable.CbFirst(),

  while not oImportedFileTable.CbEof

  do

    oResultingMemTable.CbEdit(),

    oField := oImportedFileTable.CbFieldByName('Gegenkonto (ohne BU-Schlüssel)'),

    oResultingMemTable:Gegenkonto := AsVariant(oField),

    // berücksichtigen, dass dem  Belegdatum eine führende Null fehlt

    cBelegDatum                   := oImportedFileTable:Belegdatum,

    if Len(cBelegDatum) = 3 then

      cDateString                   := SubStr(oImportedFileTable:Belegdatum, 1, 1) + '.' + SubStr(oImportedFileTable:Belegdatum, 2, 2) + '.' + cYear,

    else

      cDateString                   := SubStr(oImportedFileTable:Belegdatum, 1, 2) + '.' + SubStr(oImportedFileTable:Belegdatum, 3, 2) + '.' + cYear,

    endif,

    oResultingMemTable:Datum      := StrToDateTime(cDateString),

    oResultingMemTable.CbPost(),

    oImportedFileTable.CbNext(),

    oResultingMemTable.CbNext(),

  end,

  bModificationDone := True,

  //Browse(, oResultingMemTable),

endif,

bModificationDone


Event "bei Initialisierung der Lagerbuchung"

Event "bei Initialisierung der Lagerbuchung"

Der Aufruf erfolgt unmittelbar bei der Initialisierung einer Lagerbuchung (bevor die Platzvorgabe-Automatik und das anschließende "vor Lagerbuchung"-Event ausgeführt wird). Der Event wird sowohl bei einer Zubuchung als auch einer Abbuchung ausgeführt.

Es können per Array-Rückgabe die beiden Buchungsparameter "Größenklasse" und "Reservierungs-ID" verändert werden (siehe entspr. Memos).

Beispiel

| nEvtNo:P1, oDab010:P2, oDab020:P3, oDab100:P4, oDab000:P5,

  cBuart:P6, cBelegNr:P7, dDatum:P8, nPersNr:P9, cArtNr:P10,

  nMenge:P11, cText:P12, nKostSt:P13, cMemo:P14, cLager:P15,

  nMengeAlt:P16, cProgID:P17, nGroeKlasse:P18, nReservID:P19, aRes |

// Rückgabe : leer  = keine Änderung

// Rückgabe : Array mit veränderten Parameter

//            = { nGroeKlasse, nReservID }

if nMenge > 0 then

  aRes := { Val(InputBox('Eingabe','Größenklasse:', Str(nGroeKlasse))),

            Val(InputBox('Eingabe','Reservierungs-ID:', Str(nReservID))) }

else

  aRes := NULL(),

endif,

aRes


Event "bei Kopplung Vertreter/PLZ"

Event "bei Kopplung Vertreter/PLZ"

Dieser Event wird aufgerufen, sobald die automatische Zuweisung der Vertreternummer stattfindet (bei einer Änderung der Haupt- bzw. Lieferanschrift im Kundenstamm/Auftragskopf).

Der Event wird nur bei vorhandener Lizenz für das Vertreter-Modul sowie aktiver PLZ-Automatik aufgerufen (Allg. Parameter - Kunden/Vertrieb - Seite 1).

Beispiel

| nEvtNo:P1, nMode:P2, oTable:P3, nAddressMode:P4, cAgentField:P5,

  nOldAgentNo:P6, nNewAgentNo:P7, lShowMsg:P8, oForm, oCmb_action, oChk_msg,

  oEdt_vertnr, oBtn_ok, oEdt_info, cRes |

// nMode        : Modus zeigt an, in welcher Tabelle die Änderung erfolgt

//                1 = DAB000 (Kunden-Stamm)

//                2 = DAB050 (Kunden Auftrags-Kopfsatz)

// oTable       : Tabellenobjekt (je nach nMode DAB000 oder DAB050)

// nAddressMode : Modus zeigt an, für welche PLZ/Ort die Vertreter-Zuweisung erfolgt

//                1 = Hauptanschrift

//                2 = Lieferanschrift

// cAgentField  : Feldname in welchem die Vertreter-Nr. gespeichert ist

//                in DAB000 möglich "VERTRETER", "VERTRETER1" bis "VERTRETER9"

//                in DAB050 möglich "VERTRETER"

// nOldAgentNo  : Vertreter-Nr. vor der Änderung (nur lesend)

// nNewAgentNo  : neue Vertreter-Nr. welche automatisch ermittelt wurde

// lShowMsg     : Nachricht über Änderung der Vertreter-Nr. ausgeben?

function CreateForm()

  oForm                 := CreateObject('TFormEx', '', Application),

  oForm.OrigCapt        := 'Event: "bei Kopplung Vertreter/PLZ" ',

  oForm.Width           := 220,

  oForm.Height          := 260,

  oForm.Position        := PoMainFormCenter,

  oCmb_action           := CreateObject('TBeCombo', '', oForm, oForm),

  oCmb_action.Left      := 6,

  oCmb_action.Top       := 6,

  oCmb_action.Width     := 200,

  oCmb_action.Items     := {'Automatik',

                            'Keine Änderung zulassen (alte Vert.Nr)',

                            'Vertreter-Nr. aus Eingabefeld übernhemen'},

  oCmb_action.ItemIndex := 0,

  oEdt_vertnr           := CreateObject('TBeEdit', '', oForm, oForm),

  oEdt_vertnr.Left      := 6,

  oEdt_vertnr.Top       := 35,

  oEdt_vertnr.Width     := 200,

  oEdt_vertnr.Text      := '2006',

  oChk_msg              := CreateObject('TCheckBox', '', oForm, oForm),

  oChk_msg.Left         := 6,

  oChk_msg.Top          := 63,

  oChk_msg.Width        := 200,

  oChk_msg.Caption      := 'Meldung anzeigen',

  oChk_msg.Checked      := lShowMsg,

  oBtn_ok               := CreateObject('TBitBtn', '', oForm, oForm),

  oBtn_ok.Left          := 6,

  oBtn_ok.Top           := 87,

  oBtn_ok.Width         := 200,

  oBtn_ok.Kind          := 1,

  oEdt_info             := CreateObject('TBeEdit', '', oForm, oForm),

  oEdt_info.AutoSize    := false,

  oEdt_info.WantReturns := true,

  oEdt_info.WordWrap    := true,

  oEdt_info.Align       := alBottom,

  oEdt_info.Height      := 110,

  oEdt_info.Font.Name   := 'Courier New',

end,

//******************************************************************************

StartSeq

   // Formular erzeugen

   CreateForm(),

   // Parameter auslesen

   oEdt_info.text := 'nEvtNo:       ' + str(nEvtNo)       + crlf +

                     'nMode:        ' + str(nMode)        + crlf +

                     'nAddressMode: ' + str(nAddressMode) + crlf +

                     'cAgentField:  ' + cAgentField       + crlf +

                     'nOldAgentNo:  ' + str(nOldAgentNo)  + crlf +

                     'nNewAgentNo:  ' + str(nNewAgentNo)  + crlf +

                     'lShowMsg:     ' + str(lShowMsg),

   // Formular anzegeigen

   ShowModal(oForm),

   // Aktion auswerten

   case oCmb_action.ItemIndex

     of 0 :: cRes := nNewAgentNo,

     of 1 :: cRes := nOldAgentNo,

     of 2 :: cRes := val(oEdt_vertnr.text),

   otherwise

     cRes := nNewAgentNo,

   endcase,

   // Meldung anzeigen ja/nein?

   cRes := {cRes,oChk_msg.checked},

Always

   DestroyObject( oForm ),

StopSeq,

cRes


Event "bei Rundung Vorschlagsmenge (EK/Prod)"

Event "bei Rundung Vorschlagsmenge (EK/Prod)"

Der Event wird bei der Rundung einer Bestellvorschlagsmenge auf ganze Bestelleinheiten des Artikels aufgerufen.

Als numerische Rückgabe wird eine neue Bestellvorschlagsmenge erwartet.

Mit Hilfe dieses Events kann eine eigene Rundungslogik für Artikel-Bestelleinheiten implementiert werden (z.B. eine Mindest-Bestelleinheit, siehe Beispiel).

Liefert der Event nichts (NULL) zurück, wird die Originial-Vorschlagsmenge verwendet.

Beispiel

| nEvtNo:P1, oDab010:P2, nBedarf:P3, nVorschlag:P4, nMulti |

// nBedarf    : Aktuelle Bedarfsmenge (nicht gerundet)

// nVorschlag : Aktueller Bestellvorschlag (aufgerundet auf Bestelleinheit)

// Rückgabe   : leer = nVorschlag verwenden, sonst eigene Vorschlagsmenge

// Beispiel: Mindestbestellmenge und Bestelleinheit

// Es soll immer mindestens einmal die Bestelleinheit (DAB010:BESTELLEH)

// des Artikel vorgeschlagen werden, die darüber hinaus gehende Menge

// soll auf einen bestimmten Multiplikator aus dem Artikelstamm aufgerundet

// werden (DAB010:NONSTD_001)

// Formel: Vorschlag = 1 x Best.EH + n x Multiplikator

if (oDab010:NONSTD_001 <= 1) then

   // Kein Multi, also Vorschlag bei behalten

else

  if (nBedarf > oDab010:BESTELLEH) then

     nMulti := oDab010:NONSTD_001,

     nVorschlag := oDab010:BESTELLEH

                   + UpRound( (nBedarf - oDab010:BESTELLEH) / nMulti, 0 )

                     * oDab010:NONSTD_001,

  else

     nVorschlag := oDab010:BESTELLEH,

  endif,

endif,

nVorschlag


Event "bei WebService-Anforderung"

Event "bei WebService-Anforderung"

Der Aufruf erfolgt auf Anforderung des IBeCBService-WebService durch eine externe Applikation.

Der Event ist nur verfügbar, wenn BE im WebSevice-Server (WSS) Modus gestartet wurde (Parameter: /WebService).

Der cServiceID-Parameter ist alphanumerisch und wird von der externen Applikation zur Identifizierung des konkret angeforderten WebService übergeben.

Der uParam-Parameter wird von der externen Applikation zur Übergabe beliebiger Parameter verwendet.

Er kann somit einen beliebigen Codeblock-kompatiblen Wert enthalten (Alphanumerisch, Numerisch, Integer, Datum, Logisch, Array).

Die Rückgabe des Events darf ein beliebiger Codeblock-kompatibler Wert sein und wird entsprechend dem uParam-Parameter an die externe Applikation zurückgegeben.

Achtung: Es ist nicht zulässig Objekte als Rückgabe zu verwenden (d.h. Tabellen, Datenmodule, Fenster, etc. sind nicht erlaubt)!

Achtung: Die Verwendung des BeDataItem-Typs (mittels Methode ExecuteService) funktioniert nicht einwandfrei. Die Verwendung des Types String (mittels Methode ExecuteServiceStr) macht dagegen keine Probleme.

Hinweise für die Entwicklung der externen Applikation:

Die Übergabe an den WebService (Param) bzw. Rückgabe des WebService wird über folgende Interface-Klasse transportiert:

Klasse: TBeDataItem

Eigenschaften:

DataType : je nach Inhalt (1 Zeichen, string), wird eine der unten aufgeführten

Eigenschaften zum Transport der Daten verwendet: C, N, I, L, D, A

DtCharacter : string

DtNumeric : double

DtInteger : integer

DtLogical : boolean

DtDate : date (NICHT time)

DtArray : array of TBeDataItem

Beispiel

| nEvtNo:P1, cServiceID:P2:='', uParam:P3, cRes |

// Ausführen einer BE-WebService Anfrage

// cServiceID : Individuelle Event-ID

// uParam     : Parameter (Typ frei wählbar)

cRes := 'ID: ' + cServiceID + crlf,

if not Empty(uParam) then

  if not Empty(uParam) and ALen(uParam) > 0 then

     cRes := 'Data: ' + ArrToStr(uParam)

  else

     cRes := 'Data: ' + cRes

  endif,

endif,

// { 'A', 1, True, 1.23, STOD('20071231'), { 'B', 1 } } // würde in o.a. Datentyp umgewandelt. Kann evtl. in Java nicht korrekt ausgewertet werden.

// alternativ kann auch einfach nur ein String zurück gegeben werden

'Rückgabe'


Event "beim Auflösen der Stückliste"

Event "beim Auflösen der Stückliste"

Der Event ermöglicht es, an diversen Stellen der Stücklisten-Auflösung eine von der Stamm-Stückliste abweichende Bauteil-Nr und eine evtl. abweichende Menge anzugeben.

Beispiel

| nEvtNo:P1, nMode:P2, nPlId:P3, cArtNo:P4, nAmount1:P5, nAmount2:P6, oDataMod:P7 |

// nMode   : Modus zeigt an, aus welchem Programm der Aufruf erfolgt

//           0 = Generierung Grobplanung "Abgang in Produktion" (DAB280:ARTNR2)

//           1 = Generierung Produktions Dispo-Planung (DAB220->DAB215, Änderung

//               DAB280:Workarea)

//           2 = Generierung temporäre Reservierungs-Tabelle Bedarfsrechnung ->

//               Dispovorschläge (DABDV...:ARTNR)

//           3 = Erstellung einer Stücklisten-Kalkulation

//           4 = Generierung Fertigungs-Auftrag /  Aktualisierung einer Prod.Stückliste

//               aus der Stücklisten-Verwaltung (DAB240:ARTNR_E)

// nPlId   : DAB210:ID bzw. Dab160:ID = aktuelle Stücklisten-Position

// cArtNo  : Vorgabe - Artikel-Nr

// nAmount1: gerechnete Menge Rüst.

// nAmount2: gerechnete Menge Stück

// oDab210 : Datensatz der Stückliste

// Rückgabe: Array { cArtNo, nAmount1, nAmount2 }

{ cArtNo, nAmount1, nAmount2 }


Event "beim Aufruf der Onlinehilfe"

Event "beim Aufruf der Onlinehilfe"

Beschreibung

Der Event wird aufgerufen, bevor die Standard-Online-Hilfe gestartet wird. Es können zusätzlich oder stattdessen andere Inhalte angezeigt werden.

Parameter

nEventNo:

integer Nummer des Events

oParams:

TBeCBHelpEventParam Parameter-Objekt zur Steuerung des Events

alle Eigenschaften nur lesen! |
CbKeyword: string | das ermittelte Schlagwort für die Online-Hilfe
CbOwnerName: string | OwnerName der aktiven Applikation
CbActiveFormName: string | Klassenname des aktiven Formulars
CbWorkArea: integer | WorkArea, falls auf einem Datenbank-Feld positioniert
CbDataFieldName: string | Feldname, falls auf einem Datenbank-Feld positioniert

Rückgabewert

Logisch - falls die Standard-Online-Hilfe aufgerufen werden soll, muss der Event TRUE zurückgeben.

Beispiel

//################################################################################

// Dieser Event wird ausgeführt, wenn die Online-Hilfe aufgerufen wird.

// Es kann entschieden werden, ob die Standard-Hilfe ausgeführt wird oder

// eine individuelle Funktion ausgeführt wird

// Felder der Klasse TBeCBHelpEventParam:

//  CbKeyword

//  CbOwnerName

//  CbActiveFormName

//  CbWorkArea

//  CbDataFieldName

//

// Rückgabe: Standardhilfe ausführen?

//################################################################################

|

  nEvtNo:P1,

  oHelpEventParam:P2,

  m_bStartStandardHelp

|

m_bStartStandardHelp := true,

if oHelpEventParam.CbDataFieldName = 'FIBULINR' then

  IOHU_ShowOnlineHelpGUI("MEMO_ID = 3"),

  m_bStartStandardHelp := false,

endif,

if oHelpEventParam.CbDataFieldName = 'UST_IDNR' then

   ShellExecute(, 'open', 'M:\TRANSFER\Team DATEV\eu_umsatzsteuer.pdf'),

  m_bStartStandardHelp := false,

endif,

if (oHelpEventParam.CbWorkArea = 5) and (oHelpEventParam.CbDataFieldName = 'X_MEMO') then

   ShellExecute(, 'open', 'M:\TRANSFER\Team DATEV\DATEV Infos\DATEV Untersammelfunktionen für Debitoren Kreditoren.docx'),

  m_bStartStandardHelp := false,

endif,

if Upper(oHelpEventParam.CbActiveFormName) = 'TF_PROGMAIN' then

   m_bStartStandardHelp := true,

endif,

m_bStartStandardHelp


Event "beim Laden einer Browser-Definition"

Event "beim Laden einer Browser-Definition"

Beschreibung

Dieser Event wird zu Beginn des Laden der Browser-Definition aufgerufen. Durch den Event kann die standardmäßige Definition des Browsers übersteuert werden.

Verwendungsmöglichkeiten:

- CbUserNo und/oder CbBrowserID verändern, damit wird der entsprechend andere Datensatz aus der DabBRO gelesen

- CbUseData setzen und in den CbBrowserData die gesamte Browserdefinition als String angeben, durch z.B. Einlesen der entsprechenden BEB-Datei

In beiden Fällen hat die Browser-Definition, die für den User und die BrowserID des Event-Aufrufs in der DabBRO gespeichert sind, keine Wirkung mehr.

Mit dem Flag CbDoNotStoreBrowser kann verhindert werden, dass DabBRO-Datensätze angelegt/gespeichert werden, somit werden Browser-Änderungen nicht mehr gespeichert.

Bleibt der Inhalt der Parameter unverändert, erfolgt das Laden der Browser-Definition wie bisher.

Hinweise

- Beim Laden der Default-Einstellungen wird der Event mit CbUserNo = 0 aufgerufen. Zusätzlich ist das Flag CbDefaultsLoading auf True gesetzt. In diesem Fall hat eine Änderung der CbUserNo keine Wirkung.

- Werden die Daten vom Event geliefert (CbBrowserData <> '' und CbUseData = True), wird keine Übersetzung der Browser-Überschriften ausgeführt.

- Werden CbUserNo und/oder CbBrowserID verändert, bezieht sich die Übersetzung der Browser-Überschriften auf die geänderten Werte.

- Wird beim Defaults laden vom Event die BrowserID verändert, wird anschließend nicht mehr die zugehörige Resource geladen und in die DabBRO geschrieben, sondern nur noch der vorhandene Datensatz der DabBRO gelesen.

Parameter

nEventNo:

integer Nummer des Events

oParams:

TBeCbLoadBrowserParam Parameter-Objekt zur Steuerung des Events

Eigenschaften (nur lesen) |
CbDefaultsLoading: boolean | Flag, ob der Event beim Laden der Defaults aufgerufen wird
Eigenschaften (lesen und schreiben) |
CbBrowserID: string | ID des Browsers, dessen Datensatz aus der DabBRO gelesen werden soll
CbUserNo: integer | UserNo, dessen Datensatz aus der DabBRO gelesen werden soll
Eigenschaften (nur schreiben) |
CbBrowserData: string | alternativ zum Lesen der Browser-Daten aus der DabBRO kann hier die komplette Definition angegeben werden.
CbUseData: boolean | muss auf True gesetzt werden, damit die Browser-Daten aus CbBrowserData verwendet werden.
CbDoNotStoreBrowser: boolean | dieses Flag steuert, ob für die ursprüngliche BrowserID und UserNo, die Daten in der DabBRO gespeichert werden soll.

Rückgabewert

keine - der Parameter oParams wird direkt verwendet.

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung

// Dieser Event wird zu Beginn des Laden der Browser-Definition aufgerufen.

// Durch den Event kann die standardmäßige Definition des Browsers übersteuert werden.

//

// Verwendungsmöglichkeiten:

// - CbUserNo und/oder CbBrowserID verändern, damit wird der entsprechend andere Datensatz aus der DabBRO gelesen

// - CbUseData setzen und in den CbBrowserData die gesamte Browserdefinition als String angeben, durch z.B. Einlesen der

//   entsprechenden BEB-Datei

//

// In beiden Fällen hat die Browser-Definition, die für den User und die BrowserID des Event-Aufrufs in der DabBRO

// gespeichert sind, keine Wirkung mehr.

// Mit dem Flag CbDoNotStoreBrowser kann verhindert werden, dass DabBRO-Datensätze angelegt/gespeichert werden, somit

// werden Browser-Änderungen nicht mehr gespeichert.

//

// Bleibt der Inhalt der Parameter unverändert, erfolgt das Laden der Browser-Definition wie bisher.

//

// Hinweis

// - beim Laden der Default-Einstellungen wird der Event mit CbUserNo = 0 aufgerufen. Zusätzlich ist das Flag CbLoadDefaults auf True gesetzt.

// - Werden die Daten vom Event geliefert (CbBrowserData <> '' und CbUseData), wird keine Übersetzung der Browser-Überschriften ausgeführt.

// - Werden CbUserNo und/oder CbBrowserID verändert, bezieht sich die Übersetzung der Browser-Überschriften auf die geänderten Werte.

//

// Parameter

// - nEventNo: integer               - Nummer des Events

// - oParams: TBeCbLoadBrowserParam  - Parameter-Objekt zur Steuerung des Events

//

//   Eigenschaften (nur lesen)

//   - CbDefaultsLoading: boolean    - Flag, ob der Event beim Laden der Defaults aufgerufen wird

//

//   Eigenschaften (lesen und schreiben)

//   - CbBrowserID: string           - ID des Browsers, dessen Datensatz aus der DabBRO gelesen werden soll

//   - CbUserNo: integer             - UserNo, dessen Datensatz aus der DabBRO gelesen werden soll

//

//   Eigenschaften (nur schreiben)

//   - CbBrowserData: string         - alternativ zum Lesen der Browser-Daten aus der DabBRO kann hier

//                                     die komplette Definition angegeben werden.

//   - CbUseData: boolean            - muss auf True gesetzt werden damit die Browser-Daten aus CbBrowserData verwendet werden.

//   - CbDoNotStoreBrowser: boolean  - dieses Flag steuert, ob für die ursprüngliche BrowserID und UserNo,

//                                     die Daten in der DabBRO gespeichert werden soll.

//

//##############################################################################

//##############################################################################

|

   nEventNo:P1, oParams:P2

   , cPath, cFileName

|

//***** verschiedene Beispiele zur Nutzung des Events ************

// Browser durch Individual-Browser ersetzen

// in der DabBRO wird die Definition aber unter dem Original-Browser-ID gespeichert

if oParams.CbBrowserID = 'StoreFi   ' then

   oParams.CbBrowserID := '@StoreFi  ',

endif,

// immer die Defaults laden und kein Speichern in DabBRO

if (oParams.CbBrowserID = 'SUP_DI  ') then

   if not oParams.CbDefaultsLoading then

      oParams.CbDoNotStoreBrowser := True,

   endif,

   oParams.CbUserNo := 0,

endif,

// Browser-Definition aus Datei laden

if oParams.CbUserNo = 65 then

   cPath               := mbedefault,

   cFilename           := cPath + Trim(oParams.CbBrowserID) + '.BEB',

   if File(cFilename) then

      oParams.CbBrowserData       := MemoRead(cFilename),

      oParams.CbUseData           := (oParams.CbBrowserData <> ''),

      oParams.CbDoNotStoreBrowser :=  oParams.CbUseData,

   endif,

endif,


Event "beim Start von BE32"

Event "beim Start von BE32"

Dieser Event wird beim Start des Hauptprogramms ausgeführt, unmittelbar bevor die Arbeitsoberfläche geladen wird. Außerdem wird der Event auch beim Start des Reportgenerators, der Finanzbuchhaltung, des Printmanagers und der Programmierung ausgeführt, sprich bei jedem Start eines eigenständigen BE-Tasks (wozu z.B. auch die automatische Dispositions-Planung gehört).

Beispiel

| nEvtNo:P1 |

if not DirectoryExists("c:\temp\be") then

  ForceDirectories("c:\temp\be"),

endif,


Event "Browser - Export/Druck erlaubt"

Event "Browser - Export/Druck erlaubt"

Der Event wird aufgerufen, direkt bevor das Popup-Menü des Browsers erscheint.

Mit dem Event kann für einzelne und/oder alle Browser selektiv das Drucken bzw. das Exportieren erlaubt oder verhindert werden (siehe Beispiel).

Hinweis: Die Browser-ID kann beim Testen eines Spalten-Codeblocks im Browser mit der Rückgabe BROWSER.ID oder aber beim Speichern des Browsers als Dateiname in Erfahrung gebracht werden.

Beispiel

| nEvtNo:P1, oBrowser:P2, nModus:P3, lResult:L |

// oBrowser.ID : ID des Browsers

// nModus      : 0 = Druck, 1 = (Excel-)Export

// Rückgabe    : TRUE = Menü-Punkt anzeigen, FALSE = nicht anzeigen

lResult := TRUE,

// Export der Artikel-Gruppen nur erlaubt, wenn Supervisor

if Alltrim(oBrowser.ID) = "ART_GRP" and nModus = 1 then

   lResult :=  mBeSupervisor,

endif,

lResult // Rückgabe ob erlaubt oder nicht ...


Event "Formular - nach Erstellung"

Event "Formular - nach Erstellung"

Der Event wird unmittelbar nach dem Erstellen eines be-Fensters (Formulars) aufgerufen.

Zur Zeit geschieht dies nur im Haupt-Fenster der Warenwirtschaft, der Finanzbuchhaltung,

des Printmanageres, des Reportgenerators sowie in der Rechnungskontrolle

und der Programmierung (siehe Beispiel).

Dieses Event kann verwendet werden um beispielsweise ein Individual-Haupt-Menü zu integrieren.

Beispiel

| nEvtNo:P1, oForm:P2, oMenu |

// Aufruf erfolgt nach dem Erstellen des Formulars

// Formularname kann über ClassName(oForm) eindeutig abgefragt werden

// Ein TBeCustomMenuPanel (Individual-Menu) kann mit oForm als Owner erstellt werden

if Empty(oForm) then

   // Falls kein Paramter angegeben wird Menü-Editor anzeigen

   oMenu    := CreateObject("TBeCustomMenuPanel","MyMenuPanel",oForm),

   oMenu.ID := 815, // dummy

   oMenu.ShowMenuEditor,

else

  // Ansonsten je nach Haupt-Fenster Indiv.Menü-Panel erzeugen, um das

  // Haupt-Menü zu ergänzen

   case ClassName(oForm)

      of "TF_ProgMain" :: // Programmierung

         oMenu    := CreateObject("TBeCustomMenuPanel", "MyMenuPanel", oForm),

         oMenu.ID := 815,

         oMenu.ShowMenu,

      of "TFormMain"   :: // BE-Hauptfenster

         oMenu    := CreateObject("TBeCustomMenuPanel", "MyMenuPanel", oForm),

         oMenu.ID := 816,

         OMenu.InsertAt := FindObject(oForm, "mnuDatev"),

         oMenu.ShowMenu,

   endcase,

endif,

Siehe auch:

LoadForm()

CallPersist()


Event "Intrastat Pos.-Aufbereitung"

Event "Intrastat Pos.-Aufbereitung"

Dieser Event wird bei der Erstellung der Intrastat-Meldung für Einfuhr bzw. Versendung aufgerufen, bei jeder aufbereiteten Position.

Hinweis: Ist der Rückgabewert kein passendes Array oder tritt während des Events eine Exception auf wird DAB020 neu positioniert und alle Änderungen am Array werden verworfen.

Nur Änderungen an oIntraStat bleiben erhalten.

Beispiel

| nEvtNo:P1, nTyp:P2, nMonat:P3, nJahr:P4, oIntraStat:P5, oDab020:P6,

  oDebKred:P7, oDab010:P8, oDia010:P9, oDia020:P10, oDia030:P11, aParams:P12 |

// Der Aufruf erfolgt vor dem Schreiben von oIntraStat,

// nTyp ist 0 für Ausfuhr bzw. 1 für Einfuhr.

// Das Array aParams beinhaltet folgende Werte:

// 1.  Dab010-Satz wurde gefunden (L)

// 2.  DIA010-Satz wurde gefunden (L)

// 3.  DIA020-Satz wurde gefunden (L)

// 4.  Ursprungsland (C) (nur Einfuhr)

// 5.  Land (C)

// 6.  Region (C)

// 7.  Geschäftsart (C)

// 8.  Verfahren (C)

// 9.  Verkehrsart (C)

// 10. Hafen (C)

// 11. Gewicht (N)

// 12. Zollnummer (C)

// 13. BME (C)

// 14. BME-Faktor (N)

// 15. Rechnungswert (N)

// 16. Statistischer Wert (N)

// 17. Zolltext (C)

// Der Rückgabewert sollte aParams mit Änderungen sein.

ShowMessage(ArrToStr(aParams)),

aParams


Event "Kapazitätsanalyse: vor Anzeige eines Element-Hints"

Event "Kapazitätsanalyse: vor Anzeige eines Element-Hints"

Dieser Event ist veraltet und wird nicht mehr ausgelöst.

Siehe auch:

Event "Kapazitätsanalyse: vor Darstellung eines Elements"

Event "Kapazitätsanalyse: bei Berechnung Auftrags-Priorität"


Event "Kapazitätsanalyse: vor Darstellung eines Elements"

Event "Kapazitätsanalyse: vor Darstellung eines Elements"

Dieser Event wird beim Einlesen der einzelnen Anzeige-Elemente der Kapazitätsanalyse aufgerufen und ermöglicht es, das Erscheinungsbild (Text, Farbe) zu verändern.

Beispiel

| nEvtNo:P1, oTermin:P2 |

// Aufruf erfolgt vor dem zeichnen eines einzelnen Termins im Planungs-Chart.

// Alle Eigenschaften von oTermin können angepasst werden und haben

// sofort Einfluss auf die Darstellung des Termins.

// Rückgabe = keine

oTermin.Font.Name        := 'Arial',

oTermin.Font.Size        := 10,

oTermin.Font.Color       := clLime,

oTermin.AlphaValue       := 50,

oTermin.Visible          := True,

oTermin.ShowHint         := True,

oTermin.Color            := clBlue,

oTermin.Selectable       := False,

oTermin.Caption          := 'Event Text',

oTermin.CBDrawPatterns   := 4,

Siehe auch:

Event "Kapazitätsanalyse: vor Anzeige eines Element-Hints"

TBePlanningItem

Event "Kapazitätsanalyse: bei Berechnung Auftrags-Priorität"


Event "Kapazitätsanalyse: bei Berechnung Auftrags-Priorität"

Event "Kapazitätsanalyse: bei Berechnung Auftrags-Priorität"

Das Ereignis kann genutzt werden, um eine unternehmensspezifische Einlastungspriorität umzusetzen und damit die Eintaktungsreihenfolge der Aufträge individuell zu ändern.

Der Event wird aufgerufen, nachdem die Auftrags-Priorität durch den Standard berechnet wurde.

Dem Event wird ein Info-Objekt der Klasse "TBeCbPCProdOrderInfo" übergeben, welches die wichtigsten (berechneten) Auftrags-Werte enthält

Die Priorität kann durch Setzen der Eigenschaft "CbOrderCalcedPriority" individuell übersteuert werden, um eigene Eintaktungs-Logiken zu implementieren.

Hinweis:

Dieser Event muss zusätzlich in den Analyse-Optionen in der Kapazitätsanalyse aktiviert werden

Beispiel

| nEvtNo:P1, oProdOrderInfo:P2 |

// oProdOrderInfo: Info-Objekt der Klasse 'TBeCbPCProdOrderInfo'

//                 Das Info-Objekt enthält alle wichtigen (berechneten)

//                 Auftrags-Werte, die zur Berechnung der Auftrags-Priorität

//                 notwendig sind.

//                 Die Auftrags-Priorität kann über die Eigenschaft

//                 'CbOrderCalcedPriority', welche mit der durch den

//                 Standard berechneten Priorität vorbelegt ist, modifiziert

//                 werden.

// Rückgabe: keine

// Aufträge mit gefüllter Kommissions-Nr. haben einen höhere Priorität

if not empty(oProdOrderInfo.CbOrderCommissNo) then

   oProdOrderInfo.CbOrderCalcedPriority := Trunc(oProdOrderInfo.CbOrderCalcedPriority / 2)

endif,

Siehe auch:

Event "Kapazitätsanalyse: vor Anzeige eines Element-Hints"

Event "Kapazitätsanalyse: vor Darstellung eines Elements"

TBeCbPCProdOrderInfo


Event "Kd.Auftr.Pos Versand-Mengen-Kalkulation"

Event "Kd.Auftr.Pos Versand-Mengen-Kalkulation" (ab V4.4)

Dieser Event stellt folgende Möglichkeiten zur Verfügung:

a) Kalkulation einer Vorgabe-Versandmenge bei Pos.Erfassung in der Auftragsbearbeitung (nModus = 0)

b) Kalkulation einer verfügbaren Versandmenge, welche zur Validierung bzw. Freigabe einer Menge an folgenden Programmstellen verwendet wird (nModus = 1):

1) Bei manueller Eingabe einer Versandmenge, bzw. bei Aufruf von AufPosPost()

2) Bei der manuellen Lieferfreigabe aus der Auftragsverwaltung

3) Bei der automatischen Lieferfreigabe

4) Bei der Lieferfreigabe nach Wareneingang

Beispiel

// =============================================================================

// Event zur Berechnung einer eigenen Versand-Menge (DAB055:VMENGE)

// je nach Aufruf entweder als Vorbelegung in der Eingabemaske oder als

// maximal verfügbare Menge

// =============================================================================

// =============================================================================

// Variablen Deklarationen

// =============================================================================

| nEvtNo:P1, oDab000:P2, oDab050:P3, oDab055:P4, oDab010:P5,

  oOld055:P6, nModus:P7, nVMenge:P8, x,

  cTest:C:="", oCalc055:DB:='waDAB055, DAB057', nPrioDays:N:=0, nPMenge:N:=0 |

// oOld050, oOld055 enthalten alte Versionen der Datensätze (vor dem Editieren)

// nVMenge    : Errechnete VMenge (Vorgabe bzw. verfügbar)

// nModus = 0 : Rückgabe = Vorgabe VMenge

// nModus = 1 : Rückgabe = Verfügbare VMenge

// Rückgabe   : leer = keine Änderung, sonst Vorgabe- bzw. verfügbare VMenge

// =============================================================================

// Vorgaben zum Testen in Programmierung ...

//oDab000 := DBOpen(waDAB000),

//oDab010 := DBOpen(waDAB010),

//oDab050 := DBOpen(waDAB050),

//oDab055 := DBOpen(waDAB055),

//oOld055 := DBOpen(waDAB055),

//

//nModus := 0,

//nVMenge:= 99,

//

//DbSeek( {100287},        oDab000 ),

//DbSeek( {"100211"},      oDab050 ),

//DbSeek( {"100211  1"},   oDab055 ),

//DbSeek( {"100211  1"},   oOld055 ),

//DbSeek( {oDab055:ARTNR}, oDab010 ),

// =============================================================================

// Beginn Hauptprogramm

// =============================================================================

startseq

  if (mAbteilung = oDab055:LAGER) and // Abt = LAGER (sollte immer der Fall sein)

     (oDab055:AUF_LAG = "J") and      // Auftr.Pos. lagerwirksam

     (oDab055:LAGER   >  0) and       // Lager 1-9

     (oDab055:LAGER   <= 9) and

     (oDab055:BMENGE  >  0) and       // Bestell-Menge > 0

     (oDab010:ARTTYP  = "T") then     // Kaufteil

     // Prioritäts-Vorschau-Tage ermitteln (Allg.Param)

     nPrioDays := 0,

     DbRefresh(dabpar),

     if not Empty(DabPar:PRIOR_TAGE) then

        nPrioDays := Eval( "| Dab010 | " + DabPar:PRIOR_TAGE, oDab010 ),

     endif,

     // Filter auf Dab055 setzten auf Auftr.Pos. nur mit

     // - jeweils bis oder ohne Prioritäts-Vorschau-Tage

     // - Priotitäts-Menge größer 0

     // - Priorität größer Prio. der aktuellen Pos.

     // - nur aktuelles Lager berücksichtigen

     //   (===> Abweichung von BE-Standard-Logik <===)

     if nPrioDays > 0 then

        oCalc055.Filter := 'artnr<>"' + oDab055:ARTNR + '" .or. ('

           + 'TERM_INDEX <= "' +

             FormatDateTime( 'yyyymmdd', mBDatum + nPrioDays ) + '" '

           + ' .and. PMENGE >0 '

           + ' .and. PRIORI > "' + oDab055:PRIORI + '") '

           + ' .and. LAGER = ' + Str(oDab055:LAGER),

     else

        oCalc055.Filter := 'artnr<>"' + oDab055:ARTNR + '" .or. ('

           + 'PMENGE >0 '

           + ' .and. PRIORI > "' + oDab055:PRIORI + '") '

           + ' .and. LAGER = ' + Str(oDab055:LAGER),

     endif,

     // Filter aktivieren

     oCalc055.Filtered := True,

     // oCalc055 auf aktuellen Artikel filtern

     DBScope( oDab055:ARTNR, oDab055:ARTNR, oCalc055 ),

     DBGotop( oCalc055 ),

     // offene Mengen mit höherer Priorität kumulieren

     nPMenge := 0,

     while not Eof(oCalc055) do

        nPMenge := nPMenge + max(min(oCalc055:PMENGE, oCalc055:BMENGE

                   - oCalc055:VMENGE - oCalc055:LMENGE ), 0),

        DbSkip( 1, oCalc055 ),

     end,

     // Kum.Prio.Mengen von Lagerbestand subtrahieren

     nVMenge := Lager( Str(oDab055:LAGER), oDab010 ),

     nVMenge := nVMenge - nPMenge,

     // Bereits freigegebene Menge wieder addieren

     nVMenge := Min( oDab055:BMENGE, nVMenge + oOld055:VMENGE ),

     oCalc055.Filtered := False,

     DBScope( , , oCalc055 ),

  endif,

onerror

  MessageDlg( 'Event : '+ 'Events\Kd.Auftr.Pos. VMengen-Kalk.' + crlf +

              'Fehler: '+ GetErrorText() + crlf +

              'Zeile : '+ Str(GetErrorLine()) + crlf +

              'Info  : '+ Classname(GetErrorObj()), mtError, mbOK, 0 ),

stopseq,

// =============================================================================

// Ende Hauptprogramm

// =============================================================================

// Rückgabe der (ggf. neuen) Vorgabe/Verfügbarkeit

nVMenge

// =============================================================================

// Ende

// =============================================================================


Event "Kd.Auftr.Pos. Preis-Kalk.Reihenfolge"

Event "Kd.Auftr.Pos. Preis-Kalk.Reihenfolge"

Der Event wird an verschiedenen Stellen im Programm zur Ermittlung der Kd.Nr.-Reihenfolge der Kundensonderpreisermittlung (-anzeige, -druck, -suche, -validierung, usw., ...) aufgerufen.

Die bis zu drei Kd.Nr. in Original-Reihenfolge werden als Array (aKdNrReihe) übergeben.

Im Event besteht die Möglichkeit ein Array als Ergebnis zurückzugeben, welches eine beliebige(!) Zahl von Kd.Nr. (oder auch das Original-Array in anderer Reihenfolge) enthalten kann, eine leere Rückgabe (NICHT: ein leeres Array) behält die Original-Reihenfolge bei.

Eine Änderung des Reihenfolge-Arrays hat u.a. auf folgende BE-Bereiche Auswirkungen:

- Sonderpreiskalkulation (Auf.Pos, Codeblock-Funks, Kunden-Artikel, Staffel-Anzeige, usw, ...)

- Sonderpreisartikel-Liste in Auf.Pos.

- Eingabe Kd.Art.Nr. in Auf.Pos.

- Anzeige Kd.Art.Nr. / -Bezeichnung in Auf.Pos.

- pvKdArtNr-Variable in Belegen (Proformarechnung und Mietrücknahmeschein erst ab V5.0)

- Prüfung auf Listung eines Art. für Kd.

- Art.Gruppen-Sonderpreiskalkulation

Beispiel

| nEvtNo:P1, oDab000:P2, oDab050:P3, oDab055:P4, oDab010:P5,

  nDBState:P6, aKdNrReihe:P7, cProgID:P8, i, aRes |

// oDAB055 befindet sich im Edit- oder Einfügemodus!

// oDAB050 Datensatz ist gesperrt!

// -> aKdNrReihe ist ein Array welches die drei zu untersuchenden Sonderpreis-Kundennr.

//       in der Original-Reihenfolge enthält.

// -> Rückgabe = leer oder neues aKdNrReihe-Array

//       (darf eine andere Reihenfolge, andere Kd.Nr. und/oder

//        auch mehr bzw. weniger als drei Einträge enthalten!)

// Event befindet sich u.U. innerhalb einer Transaktion!

// Dieses Beispiel kehrt die Reihenfolge der Kundennr. im Array um ...

// ( aus 1-2-3 wird 3-2-1 )

aRes := {},

for i := Len(aKdnrReihe) downto 1 do

   AAdd( aRes, aKdnrReihe[i] ),

next,

aRes // Rückgabe des veränderten Arrays


Event "Kunden.Auftr.Pos. Preiskalkulation"

Event "Kunden.Auftr.Pos. Preiskalkulation"

Dieser Event wird z.B. nach dem Anlegen einer Auftragsposition oder nach dem Ändern der Bestellmenge in der Auftragsbearbeitung aufgerufen.

Beispiel

| nEvtNo:P1, oDab000:P2, oDab050:P3, oDab055:P4, oDab010:P5, nDBState:P6,

  oObject, cName |

// oDAB055 befindet sich im Edit- oder Einfügemodus!

// oDAB050 Datensatz ist gesperrt!

// Event befindet sich innerhalb einer Transaktion!

cName := "",

oObject := GetOwner(odab055),

if !Empty(oObject) then

   cName := oObject.name,

endif,

if oDab055:ARTGRUPPE >=100 and oDab055:ARTGRUPPE < 300 and

   oDab055:ME = "MIN" and cName <> "FormImportOrdAct" then

   SuspendEx(odab055,true),

   oDab055:ME_PE := "STD",

   oDab055:ME := "STD",

   oDab055:ME_VE := "STD",

   oDab055:PE := 1,

   oDab055:VE := 1,

endif,


Event "Memo - vor dem Setzen der internen Notiz"

Event "Memo - vor dem Setzen der internen Notiz"

Der Event wird unmittelbar vor dem Setzen der internen Notiz beim Versand einer Email aufgerufen.

Dem Event wird die DAB065 und der Default-Text der Notiz übergeben.

Als Rückgabe ist es möglich, einen neuen Text als interne Notiz zurück zu geben.

Hinweis:

Dieser Event wurde durch den Business Object Event "vor dem Setzen der internen Notiz" abgelöst und sollte auf diesen umgestellt werden

Siehe auch:

Event "vor Email-Versand"

Business Object Event "vor dem Setzen der internen Notiz"


Event "nach Aktualisierung Produktions-Stückliste"

Event "nach Aktualisierung Produktions-Stückliste"

Der Aufruf erfolgt unmittelbar nach der Aktualisierung einer Produktionsstückliste aus dem Stücklistenfenster (Funktion: "Fertigungsaufträge aktualisieren").

Info:

Beim zugrunde liegenden Datenmodul handelt es sich um die Klasse TDM_SuppOrders.

Hinweis:

Der Event wird auch ausgeführt, wenn der Standort eines Produktionsauftrags geändert wird (Funktion "Auftrags-Standort ändern"). Einmal im Quell- und einmal im Zielstandort.

Beispiel

| nEvtNo:P1, oDab035:P2, oDab240:P3, nMengeAlt:P4 |

// Aufruf erfolgt unmittelbar nach automatischer Aktualisierung einer Produktionsstückliste

// aus dem Stücklisten-Festenster heraus (Funktion: Fertigungsaufträge aktualisieren)

// Die Transaktion ist noch aktiv!

// oDab035/oDab240 : Aktuell veränderter Prod.Auftrag

Meld( oDab035:bestposnr + ' / ' + odab240:B_pos_lfd )


Event "nach Auftragskopf speichern"

Event "nach Auftragskopf speichern"

Der Event wird direkt nach dem Speichern eines Auftragskopfes aus einem BE-Fenster aufgerufen.

Bei Ausführung des Events ist die Transaktion in der der Kopf gespeichert wird und ggf. Positionen umgerechnet wurden noch aktiv!


Event "nach dem Belegdruck"

Event "nach dem Belegdruck"

Dieser Event wird nach dem erfolgreichen Druck eines Beleges aufgerufen und lässt sich auf bestimmte Ereignisgruppen festlegen:

- Alle

- Auftragsbestätigung

- Lieferschein

- Rechnung

- Mahnung

- Angebot

- Bestellung

- Paketaufkleber

- Versandpapiere

- Kommissionierschein

- Preisanfrage

- Fertigungs-Auftrag

- Abrufeinteilung

- Bestellmahnung

- Versandanzeige

- Proformarechnung
- Vermiet-Lieferschein

- Rückgabe Vermietung

- Miet-Zwischenrechnung

- Service-Anforderung

Hinweis: Bei Sammelbelegen im Verkauf entspricht der Parameter nKeyNo:P4 die der Kunden-Nummer. Ansonsten entspricht dieser Parameter in Einzelbelegen im Verkauf der Auftragsnummer.

Beispiel

//------------------------------------------------------------------------------

// Nach Lieferschein-Druck wird die Rechnung freigegeben!

//------------------------------------------------------------------------------

| nEvtNo:P1, nDocArchType:P2, nDocNo:P3, nKeyNo:P4:=7770, nPersNo:P5,

  nDocSubType:P6, oDab050, oDab055|

 // Beleg ist komplett verarbeitet und befindet sich bereits im Archiv

 // Beispiel für Belegdruck Lieferschein

// prüfen, ob alle Positionen komplett

//==============================================

function CheckPosKomplett()

   result := true,

   DBScope({oDab050:anummer},{oDab050:anummer+"999"},oDab055),

   DBFilter("abs(bmenge)>0.and.abs(bmenge)-abs(fmenge)>0",oDab055),

   DBGoTop(oDab055),

   while !EoF(oDab055) do

      if oDab055:bmenge<>oDab055:lmenge then

         result := false,  // min. einen Datensatz gefunden, der nicht komplett ist

         break,

      endif,

      DBSkip(1,oDab055),

   end,

end,

// Status des Feldes FAKTFREI (Fakturafreigabe) prüfen

//==============================================

function CheckFreigabe()

   result := true,

   if oDab050:faktfrei = "N" then

      result := false,

      //messagedlg("Auftrag " + oDab050:anummer + ": Freigabe nicht erlaubt - Freigabe im Auftrag gesperrt!",0,4),

      exit,

   endif,

   if odab050:faktfrei = "A" then

      result := false,

      //messagedlg("Auftrag " + oDab050:anummer + ": Freigabe nicht erlaubt - Nur Abschlagsrechnungen möglich!",0,4),

      exit,

   endif,

   if oDab050:faktfrei = "V" then

      if .not. CheckPosKomplett() then

         result := false,

         //messagedlg("Auftrag " + oDab050:anummer + ": Freigabe nur für kompletten Auftrag erlaubt!",0,4),

         exit,

      endif,

   endif,

end,

function main()

   oDab050 := MyGetTable(GL_oDM,waDAB050,),

   oDab055 := MyGetTable(GL_oDM,waDAB055,),

   oDab050.indexname := "DAB051",

   oDab055.indexname := "DAB056",

   startseq,

      if !DBSeek({Str(nKeyNo,6)},oDab050) then

         SetError("Auftrag wurde nicht gefunden!"),

      endif,

      if CheckFreigabe() then

         SuspendEx(oDab050,true),

         if not oDab050:fakt then

            MyEdit(oDab050),

            oDab050:fakt := true,

            MyPost(oDab050),

         endif,

      endif,

   onerror,

      //messagedlg("Auftrag " + oDab050:anummer + ": Freigabe nicht möglich - Auftrag wahrscheinlich gesperrt!",0,4),

      Meld("Fehler im Event 'nach Lfs-Druck' " + GetErrorText()),

      Meld("Auftrag wurde für Faktura NICHT freigegeben! Bitte manuell freigeben!"),

   stopseq,

   SuspendEx(oDab050,false,true),

end,

main(),


Event "nach dem Setzen der Druckeinstellungen"

Event "nach dem Setzen der Druckeinstellungen"

Das Event wird direkt nach dem be-seitigen Setzen der Druckeinstellungen und vor dem Beginn des Druckes eines Beleges (in das Archiv) aufgerufen.

Mit Hilfe der übergebenen Parameter ist es z.B. möglich ein anderes Layout (als das Standardlayout) zu wählen.

Das Objekt oPrintDeviceRec ermöglicht außerdem das Ändern folgender Einstellungen:

Eigenschaften
pdDeviceName:C | Name des Druckers mit dem gedruckt werden soll
pdDeviceTpye:N | Art des Drucks; 0 = pdPrinter; 1 = pdFax; 2 = pdEmail; 3 = pdBackground, 4 = pdCustom
pdArchiveOnly:L | Archiv-Druck ohne anschließende Druck-Ausgabe
pdOrgPrinterName:C | Name des Druckers für den Original-Druck
pdOrgBinP1:N | Papierschachtschacht für die 1. Seite des Original-Drucks
pdOrgBinPx:N | Papierschachtschacht für alle Folgeseiten des Original-Drucks
pdOrgCount:N | Anzahl der Originale die gedruckt werden sollen
pdCopyPrinterName:L | Name des Druckers für Kopien
pdCopyBinP1 | Papierschacht für die 1. Seite des Drucks der Kopie
pdCopyBinPx | Papierschacht für alle Folgeseiten des Drucks der Kopie
pdCopyCount:N | Anzahl der Kopien die gedruckt werden sollen
pdNoArchive:L | Keine Ausgabe ins Archiv
pdEMailCB:C | Batchmail-Codeblock als String
pdAlwaysPrint:L | Zusätzliche Druckausgaben, wenn der Beleg per E-Mail oder Fax versendet wird.

Beispiel

//##############################################################################

// Hinweis: Das Event wird direkt vor dem Drucken (in das Archiv) aufgerufen,

//          sowohl im Stapel- wie auch beim Einzel-Druck.

// oReport :        TBeReport-Objekt - mit der Eingenschaft

//                  "oReport.ReportNo"

//                  kann ein anderes Layout gewählt werden

// oPrintDeviceRec: Mit diesem Objekt können einige Drucker-

//                  Eigenschaften, wie die Anzahl der Kopien, ob der

//                  Beleg archiviert wird usw. gesetzt werden.

//##############################################################################

|

  nEvtNo:P1, lStapelDruck:P2, lTestDruck:P3, oReport:P4, oPrintDeviceRec:P5,

  oDataMod:P6, nBelegTyp:P7, nBelegNr:P8, nAuftragNr:P9, nPersNr:P10

|

// Beim Stapeldruck von Rechnungen ein anderes Layout wählen

if lStapelDruck and (nBelegTyp = 160) then

   oReport.ReportNo := 1,

endif

// Druckereinstellungen setzen

oPrintDeviceRec.pdAlwaysPrint := True  // Beleg immer drucken

oPrintDeviceRec.pdOrgCount    := 2,    // 2 Kopien drucken

oPrintDeviceRec.pdDeviceType  := 0,    // Beleg per E-Mail versenden

oPrintDeviceRec.pdNoArchive   := True, // Beleg wird nicht archiviert


Event "nach dem Setzen EKP beim Buchen auftragsbezogener WE"

Event "nach dem Setzen EKP beim Buchen auftragsbezogener WE"

Der Aufruf erfolgt direkt beim Buchen eines auftragsbezogenen Wareneingangs nachdem die reservierte Menge und der EKP der zugehörigen Auftragsposition (oDAB055) gesetzt wurden.

oDab055 befindet sich im Editmodus. Transaktion ist aktiv!


Event "nach Erfassen Prüfschritt"

Event "nach Erfassen Prüfschritt"

Der Aufruf erfolgt nach Erfassen eines Prüfschritts aber noch bevor dieser gespeichert ist (QS-Prüfung Prüfvorgang).

Beispiel

| nEvtNo:P1, nModus:P2, nAction:P3, oDabPPV:P4, oDabPPE:P5, oDab250:P6, oDab255:P7,

  oDab035:P8, oDab240:P9 |

// Berechnung nächste Prüfergebnis-Aktion

// nModus   : Prüfplan-Vorlage für

//            1 - Wareneingangs-Position

//            2 - Produktionsauftrags-Position

// nAction  : vorberechnete nächste Aktion

//            1 - Prüfung ist abgeschlossen

//            2 - Prüfung fortsetzen

//            3 - Prüfung abbrechen

//            4 - Gesamtprüfung starten

//            5 - Neustart

// oDabPPV  : Tabelle Prüfvorgänge   im Editmodus

// oDabPPE  : Tabelle Prüfergebnisse im Einfügemodus

// oDab250  : Tabelle Wareneingang-Kopfdaten         bei nModus=1 ansonsten leer

// oDab255  : Tabelle Wareneingang-Positionsdaten    bei nModus=1 ansonsten leer

// oDab035  : Tabelle Produktion-Bestellrückstände   bei nModus=2 ansonsten leer

// oDab240  : Tabelle Produktion-Auftragsstücklisten bei nModus=2 ansonsten leer

//

// Rückgabe : nAction

// HINWEIS  : - Transaktion aktiv!

//            - Rückgabe von 5 führt zur Neuberechnung der nächsten Aktion und löst

//              den Codeblock erneut aus. VORSICHT Endlosschleife möglich!

// Meldung ausgeben, dass die Prüfung beendet ist

if nAction = 1 then

  Meld('Prüfung ist abgeschlossen!'),

endif,

nAction

Siehe auch:

Event "bei Auswahl Prüfplan-Vorlage"


Event "nach Inventurübernahme"

Event "nach Inventurübernahme"

Der Event wird während der Inventurübernahme je Inventureintrag aufgerufen, nachdem die Daten aus der Inventurdatei (DAB810) in die Bestandsdaten (DAB010, usw.) übernommen wurden und noch bevor der Inventursatz gelöscht und die Transaktion abgeschlossen wird.

Beispiel

| nEvtNo:P1,  oDab810:P2, oDab010:P3, oDab610:P4, oDab710:P5, oDab730:P6,

  oDab020:P7, dUebernDatum:P8 |

// Aufruf erfolgt nach der Übernahme eines Artikels mittels der Inventur.

// Event befindet sich innerhalb einer Transaktion!

// Inventurabwertung durchführen

// ======================================================================

StartSeq,

suspendex(oDab010, true),

oDab010.writeprotocol := true,

   if oDab010:durchschek <> oDab810:x_ekp then

      MyEdit(oDab010),

      oDab010:durchschek := oDab810:x_ekp,

      oDab010:ekp        := oDab810:x_ekp,

      MyPost(oDab010),

   endif,

OnError

   Meld(GetErrorText()),

stopseq,

oDab010.writeprotocol := false,

suspendex(oDab010, false),


Event "nach Kd.Auftr. entsperren"

Event "nach Kd.Auftr. entsperren"

Der Event wird aufgerufen, nachdem ein Kundenauftrag im Auftragsverwaltungsfenster entsperrt wurde (ähnlich der Kalkulation der Gruppen-Rabatte für einen Auftrag).

Beispiel

//==============================================================================

// Feld 'TYP' in Kundenstamm autom. auf 'K' setzen

//==============================================================================

| nEvtNo:P1, nKdNr:P2, nANummer:P3, oDM, oDAB000, oDAB050 |

// Aufruf erfolgt nach dem Entsperren eines Kunden-Auftrags in der Auftragsverwaltung

//******************************************************************************

//Kundentyp ändern

//******************************************************************************

function ChangeDAB000Typ()

   startseq,

      MyEdit(oDAB000),

      oDAB000:TYP := 'K',

      MyPost(oDAB000),

   onerror,

      SetError("Fehler in Funktion 'ChangeKundTyp()':" + CRLF + GetErrorText()),

   stopseq,

end,

//******************************************************************************

//Hauptprogramm

//******************************************************************************

startseq,

   // DM und  Tabelle aufmachen

   if Empty(oDM) then

      oDM     := CreateObject('TBeDBGet',,,,true),

      oDab000 := DBGetTable(oDM,waDAB000),

      oDab050 := DBGetTable(oDM,waDAB050),

   endif,

   // Tabellen richtig positionieren

   if !DBSeek({Str(nANummer)},oDAB050) then

      SetError("Auftrag "+Str(nANummer)+" wurde nicht gefunden!"),

   endif,

   if !DBSeek({nKdNr},oDAB000) then

      SetError("Kunde "+Str(nKdNr)+" wurde nicht gefunden!"),

   endif,

   // Kundentyp aktualisieren

   if oDAB050:TYP <> 'A' and oDAB000:TYP == 'I' then

      ChangeDAB000Typ(),

   endif,

onerror,

   MessageDlg("Fehler in Event 'Nach Kd.Auftr. Entsperren - Kundentyp ändern': " +

              CRLF + GetErrorText()),

stopseq,


Event "nach Kd.Auftr.Kopf speichern"

Event "nach Kd.Auftr.Kopf speichern"

Dieser Event wird aufgerufen, nachdem in der Auftragsbearbeitung der Auftragskopf erfolgreich gespeichert wurde.

Beispiel

| nEvtNo:P1, oDab000:P2, oDab050:P3, oDab055:P4, oDab010:P5, nWasDBState:P6, oOldDab050:P7 |

// Auftrags-Kopf wurde vollständig gespeichert,

// oDab055 und oDab010 sind nicht(!) positioniert und dürfen editiert werden,

// Transaktion ist noch aktiv!

// nWasDBState - gibt DBState() der oDab050 vor Speicherung an

// oOldDab050  - MemoryTable mit Zustand der oDab050 vor Speicherung

startseq,

   if oDab050:TYP <> 'A' then

      if oDab000:MWSTKZ and Empty(oDAB000:UST_IDNR) then

         if empty(oDab000:LANDNR) then

            MessageDlg("Achtung: Für den aktuellen Kunden wurde das Export-Kennzeichen gesetzt" +

                       " und kein Land eingetragen!", mtwarning),

         else

            if oDab000:LANDNR='004' then

               MessageDlg("Achtung: Für den aktuellen Kunden wurde das Export-Kennzeichen" +

                          " gesetzt und 'Deutschland' als Land eingetragen!", mtwarning),

            else

               if lookup(waDIA020, 'DIA021', {{oDab000:LANDNR}}, "EG_KZ") = "J" then

                  MessageDlg("Achtung: Für den aktuellen Kunden wurde das Export-Kennzeichen gesetzt" +

                              " und ein EU-Land eingetragen, aber keine UST-ID hinterlegt!", mtwarning),

               endif,

            endif,

         endif,

      endif,

   endif,

onerror,

   MessageDlg("Fehler in Programm '" + ProgName() + "': " + crlf + crlf + GetErrorText(), mterror),

stopseq,


Event "nach Kd.Auftr.Pos. Art.Nr. Validierung"

Event "nach Kd.Auftr.Pos. Art.Nr. Validierung"

Der Event wird nach der Eingabe einer Artikel-Nr. in der Auftragsposition bzw. während des Aufrufs von AufPosNeu() ausgelöst.

Bei Aufruf des Events sind sämtliche System-Vorgaben von Auftr.Pos.Felder bereits ausgefüllt, außerdem wird der Event nur genau einmal (nach Eingabe einer Art.Nr.) aufgerufen.

Beispiel

| nEvtNo:P1, oDab000:P2, oDab050:P3, oDab055:P4, oDab010:P5 |

// oDAB055 befindet sich im Einfügemodus!

// oDAB050 Datensatz ist gesperrt!

// Event befindet sich innerhalb einer Transaktion!

// Rückgabe = True/False, Artikel-Nr. gültig/ungültig

if c_usr = "073" then

   oDab055:LAGER := 2,

endif,

True


Event "nach Kd.Auftr.Pos. speichern"

Event "nach Kd.Auftr.Pos. speichern"

Dieser Event wird aufgerufen, nachdem in der Auftragsbearbeitung eine Auftragsposition erfolgreich gespeichert wurde.

Beispiel

| nEvtNo:P1, oDab000:P2, oDab050:P3, oDab055:P4, oDab010:P5, nWasDBState:P6, oOldDab055:P7 |

// Auftragsposition wurde vollständig gespeichert,

// es ist keine Transaktion aktiv!

// nWasDBState - gibt DBState() der oDab055 vor Speicherung an

// oOldDab055  - MemoryTable mit Zustand der oDab055 vor Speicherung

if nWasDBState = dsinsert and oDab000:SOLL > oDab000:KREDLIM then

   MessageDlg("Achtung: Kunde hat das Kreditlimit überschritten!", 2),

endif,


Event "nach Lagerbuchung"

Event "nach Lagerbuchung"

Das Event berücksichtigt die selben Rückgaben wie der Event "vor Lagerbuchung", d.h. es ist möglich "2" zurückzugeben, um eine Buchung nachträglich abzubrechen.

Hinweis: Das Event wurde früher vor jedem Druck eines Lagerscheins aufgerufen, dies geschieht jetzt nicht mehr! Es wird auch nur für lagerwirksame Artikel aktiv. Ebenso ist zu beachten, dass es bei einer manuellen Lagerbuchung (Inventurkorrektur/Produktionsverbrauch) über den Artikelstamm keine Unterscheidung der Buchungsart (cBuart:P7) erfolgt. Die Buchungsart (cBuart:P7) ist in den Fällen immer = "E".

Beispiel

| nEvtNo:P1,     oDab010:P2,    oDab020:P3,  oDab100:P4,      oDab000:P5,

  oMemPlaces:P6, cBuart:P7,     cBelegNr:P8, dDatum:P9,       nPersNr:P10,

  cArtNr:P11,    nMenge:P12,    cText:P13,   nKostSt:P14,     cMemo:P15,

  cLager:P16,    nMengeAlt:P17, cProgID:P18, nGroeKlasse:P19, nReservID:P20,

  nContType:P21, cKommiss |

// Verfügbare Felder in Tabelle oMemPlaces:

//   StoreQuantity   -> Menge auf Lager/Platz/Kommission

//   AccQuantity     -> Buchungsmenge für Lager/Platz/Kommission

//   PlaceNo         -> Lager-Platz

//   Container       -> Behälter-Nr

//   CommissNo       -> Chargen-/Ser#

//   Date            -> Buchungsdatum

//   OldAccQuantity  -> Menge vor der Buchung

//   OldPlaceNo      -> Platz vor der Buchung

//   OldCommissNo    -> Kommission vor der Buchung

//   OldContainer    -> Behälter-Nr vor der Buchung

// Rückgabe = leer oder 0 -> fortfahren

// Rückgabe = 1           -> ohne Buchungsfenster fortfahren

// Rückgabe = 2           -> Buchung sofort, komplett abbrechen

if cBuart = 'E' and nMenge > 0 then

   if JN('Etiketten drucken?') then

      DBGoTop(oMemPlaces),

      Browse(,oMemPlaces),

      while !EoF(oMemPlaces) do

         cKommiss := AllTrim(oMemPlaces:COMMISSNO),

         Meld(oMemPlaces:Commissno),

         Call('Lager\EtiCharge', cKommiss),

         DBSkip(1, oMemplaces),

      end,

   endif,

endif,


Event "nach Lieferschein-Löschung"

Event "nach Lieferschein-Löschung"

Der Aufruf erfolgt nach dem erfolgreichen Löschen eines Lieferscheins. Eine Transaktion ist nicht mehr aktiv!

Beispiel

| nEvtNo:P1, nLFNummer:P2, dLFDatum:P3, nKdNr:P4,

  oDM, oDab750, odab755, oDab050, cAnummer, oQuery755, oQuery750 |

// Sendungskopf löschen

// ============================================================

Function Delete750(nSendung)

   startseq,

      oQuery750 :=CreateObject('TBeADSQuery',,,,true),

      oQuery750.SQL :='delete from "DAB750.ADT" where '+"sendung="+Str(nSendung),

      DBExecSQL(oQuery750),

      result := true,

   onerror,

      Meld("Löschen Sendungskopf fehlgeschlagen "+GetErrorText()),

   stopseq,

end,

// Sendungspositionen löschen

// ============================================================

Function Delete755(nSendung)

   startseq,

      oQuery755 :=CreateObject('TBeADSQuery',,,,true),

      oQuery755.SQL :='delete from "DAB755.ADT" where '+"sendung="+Str(nSendung),

      DBExecSQL(oQuery755),

      result := true,

   onerror,

      Meld("Löschen Sendungspositionen fehlgeschlagen "+GetErrorText()),

   stopseq,

end,

// Nach Lieferschein-Löschung LF-Nummer aus Versandvorgang löschen

// =============================================================================

Function DeleteLFNummer()

   PRS("Event LS löschen","Delete LfNr"),

   cAnummer := Str(Val(oDab750:anummer),6),

   if DBSeek({cAnummer},oDab050) then

      DBStartTrans(oDM.AdsConnection),

      startseq,

         MyEdit(oDab750),

         oDab750:lf_nummer := "",

         oDab750:flag := 0,

         MyPost(oDab750),

         DBCommit(oDM.AdsConnection),

      onerror,

         DBRollBack(oDM.AdsConnection),

         DBCancelAll(oDM),

         Meld("Fehler beim Löschen der LS-Nummer "+CRLF+GetErrorText()),

      stopseq,

   endif,

end,

// Hauptprogramm

// ============================================================================

startseq,

   if Empty(oDM) then

      oDM := Createobject("TBeDBGET",,,,true),

      oDab050 := MyGetTable(oDM,waDAB050,),

      oDab750 := MyGetTable(oDM,waDAB750,),

      oDab755 := MyGetTable(oDM,waDAB755,),

      oDab750.indexname := "LF_NUMMER",

      oDab750.performupdates := false,

   endif,

   if mAbteilung = 2 then

      if DBSeek({Str(nLfNummer)},oDab750) then

         DeleteLfNummer(),

         if Empty(oDab750:lf_nummer) then         // wenn Haupt-Lf-Nr. gelöscht ist

            if JN("Soll der zugehörige Versandvorgang Nr. "+Str(oDab750:sendung)+

               " komplett gelöscht werden?") then

               if Delete755(oDab750:sendung) then

                  Delete750(oDab750:sendung),

               endif,

            endif,

         endif,

      endif,

   endif,

onerror,

   Meld(GetErrortext()),

stopseq,

oDab750.performupdates := true,


Event "nach Neuanlage/Editieren Auftragsstückliste"

Event "nach Neuanlage/Editieren Auftragsstückliste"

Der Event wird nach der Neuanlage, dem Editieren und der Anzeige einer Auftragsstückliste (Setartikel oder Variante) aufgerufen.

Der Aufruf erfolgt, nachdem der Einzelpreis (DAB055:EPREIS) neu berechnet wurde.

Hinweis: Auch wenn über die lokalen Parameter das Editieren der Auftragsstückliste nicht erlaubt ist, wird der Event aufgerufen.

Beispiel

| nEvtNo:P1, oDab000:P2, oDab050:P3, oDab055:P4, oDab010:P5, oDab160:P6 |

// oDAB055 befindet sich im Einfüge- oder Editmodus!

// oDAB050 Datensatz ist gesperrt!

// Einzelpreis (DAB055:EPREIS) wurde bereits neu gerechnet.

// Event befindet sich innerhalb einer Transaktion!

// Rückgabe = keine

Meld('Set Preis Kalk.'),

oDab055:EPREIS := 11.2,


Event "nach PDF-Export (Festlegen des PDF-Dateinamens)"

Event "nach PDF-Export (Festlegen des PDF-Dateinamens)"

Dieser Event wird nach dem Export eines Beleges zu einer PDF-Datei aufgerufen (z.B. im Belegarchiv mittels der "Speichern unter ..."-Funktion) und kann genutzt werden, um den Speicherort sowie den Dateinamen der zu exportierenden Datei zu manipulieren.

Hinweis

Nicht mehr verwenden, stattdessen die interne PDF-Erzeugung verwenden, siehe entsprechend verlinkten Event.

Beispiel

| nEvtNo:P1, cPDFFileName:P2 |

// (Event nur aktiv, falls Export über externen Druckertreiber)

// Rückgabe = neuer Wert für cPDFFileName, leer("") bedeutet cPDFFileName beibehalten

cPDFFileName := "C:\be_test.pdf",

cPDFFileName

Siehe auch:

Event "vor PDF-Export (intern)"


Event "nach Prod.Fertigmeldung"

Event "nach Prod.Fertigmeldung"

Dieser Event wird aufgerufen, nachdem in den offenen Aufträgen der Produktionsverwaltung ein Produktiosauftrag teilweise oder komplett fertiggemeldet wird.

Beispiel

| nEvtNo:P1, oDab035:P2, nFertig:P3, nAusschuss:P4, lEndfertigmeldung:P5,

  oDab720:DB := 'waDAB720, DAB721', oDab730:DB := 'waDAB730, DAB731', nRecNo, cBestPos |

// oDab035 befindet sich auf dem aktuell fertiggemeldeten Auftrag

// Versions-Nr. aus der dab035 in die SerNr Tabelle speichern

startseq,

   if LookUp(waDAB010, 'DAB011',{{oDab035:artnr}}, "platz_ver") = "S" then

      cBestPos := SubStr(oDab035:bestposnr, 1, 6),

      PRS("Event Fertig", cBestPos),

      DBScope({"F", oDab035:artnr, cBestPos}, {"F", oDab035:artnr, cBestPos}, oDab720),

      DBGoTop(oDab720),

      PRS("Event Fertig 720", {oDab720:artnr, oDab720:kommiss}),

      if DBSeek({oDab720:artnr, oDab720:kommiss}, oDAb730) then

         PRS("Event Fertig 730", {oDab730:kommiss}),

         DBStartTrans(),

         startseq,

            MyEdit(oDab730),

            oDab730:version := e2v(oDab035:x_version, lookup(wadAB010, 'DAB011', {{oDab035:artnr}}, "nonstd_012")),

            MyPost(oDab730),

            DBCommit(),

         onerror,

           DBRollBack(),

         stopseq,

      endif,

   endif,

onerror,

  Meld("Fehler im Event 'nach Fertigmeldung'" + " " + GetErrorText()),

stopseq,


Event "nach Proj.Allocation-Erstellung"

Event "nach Proj.Allocation-Erstellung"

Der Event wird nach Erstellung einer neuen Allocation im Planning-Chart aufgerufen.

Als Parameter erhält diese Funktion die neue Allocation.

Beispiel

| nEvtNo:P1, oAllocation:P2 |

// Der Aufruf erfolgt direkt nach Erstellung eines Allocation-Objekts

oAllocation.Color := clGreen,


Event "nach Proj.Ressourcen-Erstellung"

Event "nach Proj.Ressourcen-Erstellung"

Der Event wird nach Erstellung einer neuen Resource im Planning-Chart aufgerufen.

Als Parameter erhält diese Funktion die neue Resource.

Beispiel

| nEvtNo:P1, oResource:P2 |

// Der Aufruf erfolgt direkt nach Erstellung eines Resourcen-Objekts

oResource.Color := clGreen,


Event "Nach Rechnungskontrolle Lieferant"

Event "Nach Rechnungskontrolle Lieferant"

Der Event wird unmittelbar nach der Buchung (Transaktion ist abgeschlossen) einer Rechnungskontrolle beim Lieferanten ausgeführt.

Beispiel

| nEvtNo:P1, oDab100:P2, oDabDF:P3 |

// oDab100 befindet sich auf dem Original-Lieferanten

// oDabDF  beinhaltet alle Infos der Buchung,

//         u.a. Fibu-Liefnr., Rech.Nr., -Datum, Buchungstext, usw.

Meld('Original-Lief: ' + Str(oDab100:LINR,8) + crlf +

     'Fibu-Lief:'      + Str(oDabDF:LINR,8) + crlf +

     'Rech.Nr.:'       + oDabDF:NUMMER + crlf +

     'Rech.Datum:'     + DToC(oDabDF:DATUM) + crlf +

     'Int.Beleg-Nr.:'  + oDabDF:BELEGNRINT + crlf +

     'Buchungstext:'   + oDabDF:BUCHTEXT),


Event "nach Rechnungs-Löschung"

Event "nach Rechnungs-Löschung"

Dieser Event wird nach dem erfolgreichen Löschen einer Rechnung über die Menüfunktion "Rechnung löschen" ausgeführt.

Beispiel

| nEvtNo:P1, nReNummer:P2, dReDatum:P3, nKdNr:P4, oKDN710, nRecNo, oDM, oDab055 |

// Stückzahlen zurücksetzen

startseq,

   oDM     := CreateObject("TBeDBGet"),

   oDab055 := DBGetTable(oDM,waDAB055,),

   oKDN710 := DBGetTable(oDM,waKDN710,),

   oDab055.indexname := "DAB056",

   oKDN710.indexname := "RE_NUMMER",

   DBScope({nRENummer,nKDNR}, {nRENummer,nKDNR}, oKDN710),

   DBGoTop(oKdn710),

   DBStartTrans(oDM.ADSConnection),

   while !EoF(oKdn710) do

      nRecNo := DBRecNo(oKDN710),

      if Empty(oKDN710:LF_NUMMER) then

      DBDelete(oKDN710),

   else,

      MyEdit(oKDN710),

      oKDN710:re_nummer := 0,

      MyPost(oKDN710),

   endif,

      if nRecNo = DBRecNo(oKDN710) then

      DBSkip(1,oKDN710),

      endif,

   end,

   DBCommit(oDM.ADsConnection),

onerror,

   Meld("Fehler im Event 'nach Rechnung löschen ' " + GetErrorText()),

   DBRollBack(oDM.ADSConnection),

stopseq,


Event "nach Stammdatensatz speichern"

Event "nach Stammdatensatz speichern"

Der Event wird direkt nach dem Speichern eines Stammdatensatzes aus einem BE-Fenster aufgerufen, d.h. nach Speichern des Artikels, Kunden, Zulieferers oder Vertreters.

Bei Ausführung des Events ist keine Transaktion mehr aktiv!

Erweiterung ab V5.0 Build 18:

Dem Event wird als weiterer Parameter die Original-Artikel-/Kunden-/Lieferanten-Nr. übergeben, falls bei der entsprechenden Neuanlage das Kopieren eines Datensatzes gewählt wurde.

Beispiel

| nEvtNo:P1, oDabMaster:P2, cCopyFrom:P3, oDab010, oDab510, oDM |

// Stammdatensatz (Artikel,Kunde,Zulief.,Vertr.) wurde vollständig gespeichert,

// es ist keine Transaktion aktiv!

// cCopyFrom enthält ggf. als String die Art./Kd./Lief.-Nr. des Original-Datensatzes.

// Zulieferer EK als Standard-EK abspeichern

startseq,

   if oDabMaster.workarea = waDAB510 then

      if Empty(oDM) then

         oDM := Createobject("TbeDBGet",,,,true),

         oDab010 := DBGetTable(oDM,waDAB010,),

         oDab510 := DBGetTable(oDM,waDAB510,),

         oDab010.writeprotocol := true,

      endif,

      if Lookup(waDAB510, 'DAB511',{{oDabMaster:artnr}},"LINR") = oDabMaster:Linr then //wenn Hauptlieferant

         if DBseek({oDabMaster:artnr},oDab010) then

            PRS("Event Stammsatz","Edit"),

            MyEdit(oDAb010),

            oDab010:ekp := EKPEw(oDabMaster:ekpfw,oDabMaster:rabatt1,oDabMaster:rabatt2,

                                 0,false,oDab010:bestelleh,

                                 {oDabMaster:z_kost1,oDabMaster:z_kost2,oDabMaster:z_kost3},

                                 {oDabMaster:z_mode1,oDabMaster:z_mode2,oDabMaster:z_mode3},

                                 true,true,oDab010,oDab510),

            PRS("Event Stammsatz",{"EKP",oDab010:ekp}),

            MyPost(oDab010),

         endif,

      endif,

   endif,

onerror,

   Meld("Fehler im Event 'nach Stammsatz speichern' " + GetErrorText()),

stopseq,


Event "nach Vorab-Vergabe Ser# in Fertigung"

Event "nach Vorab-Vergabe Ser# in Fertigung"

Der Event wird nach der Vorab-Vergabe jeder einzelnen Ser# in der Fertigung aufgerufen.

Mit Hilfe der übergebenen Parameter und dem Rückgabewert ist es möglich, eine eigene Ser#-Vergabe-Logik zu implementieren (siehe Beispiel).

Beispiel

| nEvtNo:P1, oDab035:P2, cKommiss:P3, nLfd:P4, nWiederh:P5, nGesamt:P6, nFehlerVerh:P7 |

// Aufruf erfolgt nach jeder Vorab-Vergabe einer Ser#

// cKommiss   : Ser#-Vorschlag

// nLfd       : Lfd.Nr. in Gesamtvergabe

// nWiederh   : Wiederholungsversuch-Nr. für Ser# nLfd

// nGesamt    : Gesamtzahl der Ser# für Auftrag

// nFehlerVerh: 0 = Default-Verhalten,

//              1 = Ser# ignorieren, falls bereits vorhanden, erhöht ggf. nLfd und nGesamt,

//              2 = Fehler auslösen, falls Ser# bereits vorhanden

// Rückgabe   : Char  = cKommiss                  => Neue Ser#

//              Array = { cKommiss, nFehlerVerh } => { Neue Ser#, Neues Ferhlerverhalten }

StrZero(Val(Left(oDab035:BESTPOSNR,6)),6) + StrZero(nLfd + nWiederh,4)


Event "nach Wareneingangs-Buchung"

Event "nach Wareneingangs-Buchung"

Der Aufruf erfolgt nach dem Buchen eines Wareneingangs über das WE-Modul, allerdings erst nachdem alle Folge-Buchungen (Auflösen Auftragsrückstände, Produktionsrückstände, etc.) durchlaufen wurden. Eine Transaktion ist nicht mehr aktiv!


Event "nach Wareneing.Buchung über Einkauf"

Event "nach Wareneing.Buchung über Einkauf"

Der Aufruf erfolgt unmittelbar nach der Wareneingangsbuchung über das Einkaufsmodul.

Die Transaktion ist nicht mehr aktiv. Kd./Prod.Rückstände sind noch nicht verbucht worden.

Beispiel

| nEvtNo:P1, oDab035:P2, oDab020:P3, lRueckstLoesch:P4 |

// Aufruf erfolgt unmittelbar nach der Buchung eines Wareneingangs über den Einkauf.

// Transaktion ist nicht mehr aktiv. Automatische Verbuchung Kd./Prod.Aufträge

// ist noch nicht erfolgt.

// oDab035, oDab020 : Sind auf aktuellen Sätzen positioniert

// lRueckstLoesch   : True = oDab035-Rückstand wird im Anschluss gelöscht

Meld( oDab035:BESTPOSNR + ' / ' + oDab020:APNUMMER + ' / ' + iif(lRueckstLoesch,'Lösch','') )


Event "Telefonie - nach Erstellen eines Anzeige-Panels"

Event "Telefonie - nach Erstellen eines Anzeige-Panels"

Dieser Event wird aufgerufen, nachdem durch einen eingehenden Anruf ein Anzeige-Panel in der be - Anruferliste erstellt wurde.

Über den Parameter nCallType kann die Art des Anruferlisten-Eintrags ermittelt werden.

Mögliche Werte von nCallType sind:

0 - alter eingehender Anruf

1 - neuer eingehender Anruf (Eintrag hat farbliche Hervorhebung im Anruferlisten-Dialog)

2 - automatischer Rückruf

3 - Ruf-Erinnerung

Beispiel

| nEvtNo:P1, cTelNummer:P2, oPanel:P3, aElement:P4, oDab000:P5, oDab100:P6, oDab062:P7,   oDab005:P8, nCallType:P9 |

// aElement - {Typ, Kd/Z/V.Nummer, Kontakt-ID}

// Es können beliebige Eigenschaften von oPanel verändert werden (z.B. Größe, Farbe, Schrift, Caption)

// und auch neue Controls mit oPanel als Parent erstellt werden (z.B. ein Rückruf-Button)

//******************************************************************************

// erzeugt einen Button auf dem TAPI-Panel für Demo-Zwecke

//******************************************************************************

function CreateDemoButton()

  | oParent, myNewButton, cCodeBlock |

   oParent := GetParentForm(oPanel),

   if not empty(oParent) then

      prs('', ClassName(oParent) + '/' + oParent.Name),

      // den Button nur dann erzeugen, wenn es sich um ein Panel mit Kontaktperson-Bezug handelt

      if (not empty(aElement)) and (aElement[3] <> 0) then // Inahalt von aElement ist z.B. {"V", 999, 86276}

         myNewButton := CreateObject('TBeBlockBtn',, oPanel, oPanel),

         myNewButton.ImageIndex.IndexNormal := 642,

         // Button dynamisch rechts ausrichten

         myNewButton.Width  := 66,

         myNewButton.Align  := alRight,

         myNewButton.AlignWithMargins := True,

         myNewButton.Margins.Top    := 1,

         myNewButton.Margins.Left   := 1,

         myNewButton.Margins.Right  := 5,

         myNewButton.Margins.Bottom := 0,

         myNewButton.Caption    := 'Demo',

         myNewButton.Hint       := 'dieser Knopf demonstriert den Einsatz des Events ' + crlf + crlf +

                                   '"Telefonie - nach Erstellen eines Anzeige-Panels"',

         myNewButton.ShowHint   := True,

         myNewButton.Font.Name  := 'Arial',

         myNewButton.Font.Style := myNewButton.Font.Style + 3,

         cCodeBlock := "MessageDlg(lookup(waDAB005, 'DAB008', {{" + Str(aElement[3]) + "}}, 'NAME', 'FEHLER'))",

         myNewButton.BlockStr := cCodeBlock,

      endif,

   endif,

end,

//##############################################################################

// Hauptprogramm

//##############################################################################

startseq,

   CreateDemoButton(),

onerror,

   MessageDlg('Es ist ein Fehler im Programm "Telefonie - nach Erstellen eines Anzeige-Panels" aufgetreten: '

              + crlf + crlf + GetErrorText(), mtError),

stopseq,

Siehe auch:

Event "Telefonie - vor Auswertung des Anrufes"

Event "Telefonie - bei Klick auf ein Anzeige-Panel"

Event "Telefonie - nach Auswertung des Anrufes"


Event "Telefonie - vor Auswertung des Anrufes"

Event "Telefonie - vor Auswertung des Anrufes"

Der Event wird bei einem eingehenden Anruf ausgeführt, bevor die BE-eigene Auswertung der Tel.Nr. beginnt. In diesem Event ist es möglich die eingehende Nummer zu verändern und zurückzugeben, damit BE die Auswertung mit der veränderten Nummer fortsetzt.

Diese Funktion kann z.B. genutzt werden, um die eigene Orts-Vorwahl einer Tel.Nr. hinzuzufügen oder aber (sofern diese von der Anlage übergeben wird) sie zu entfernen.

Beispiel

| nEvtNo:P1, cTelNummer:P2, cEigLandesCode:P3, cEigCityCode:P4,

  cTKVorwahlLand:P5, cTKVorwahlCity:P6, nCallType:P7 |

// optionale Rückgabe = veränderte Telefon-Nr.

//      oder Array mit Telefon-Nr. Alternativen

//      erstes gefundenes Element wird als eingehende Nummer angenommen,

//      falls kein Element gefunden wird, gilt letztes Element eingehende Nummer

// Achtung: cTelNummer ist die Original-Nummer inkl. TK-Vorwahl u.ä.,

//          das ist in diesem Beispiel nicht berücksichtig !

// Falls Anruf ohne Vorwahl, eigene (Windows-)Vorwahl hinzufügen

if Left(cTelNummer,1) <> '0' then

   cTelNummer := cEigCityCode + cTelNummer

endif,

// Falls Anruf mit Vorwahl der Zentrale (hier "089"), dann Alternative ohne

// Vorwahl zur Verfügung stellen, falls im Datenbestand City-eigene Nummern ohne

// Vorwahl hinterlegt wurden

if Left(cTelNummer,3) = '089' then

   cTelNummer := { cTelNummer, Substr(cTelNummer,4) }

endif,

cTelNummer

Siehe auch:

Event "Telefonie - bei Klick auf ein Anzeige-Panel"

Event "Telefonie - nach Auswertung des Anrufes"

Event "Telefonie - nach Erstellen eines Anzeige-Panels"


Event "Validierung - Rechnungskontroll-Abschluss"

Event "Validierung - Rechnungskontroll-Abschluss"

Dieser Event wird ausgeführt, sobald man im Rechnungsfreigabe-Fenster der Rechnungskontrolle mittels des OK-Buttons alle Werte bestätigt.

Beispiel

| nEvtNo:P1, oDab100:P2, nFiBuLiNr:P3, dRechDatum:P4, cRechNr:P5, cBelegIntern:P6,   cBuchText:P7 |

// oDab100   - befindet sich auf dem Original-Lieferanten

// nFiBuLiNr - Kreditoren-Nr. in Finanzbuchh.

// dRechDatum, cRechNr, cBelegIntern, cBuchText - beinhalten die

// entsprechenden Werte aus dem Buchungsdialog.

// -> False als Rückgabe für Abbruch.

// Rückfrage wenn Buchungsmonat <> Rechnungsmonat

Function CheckDatum()

   result := true,

   if dRechDatum < Date() and Month(dRechDatum) <> Month(Date()) then

      if not JN("Rechnungsmonat <> Buchungsmonat - Trotzdem weiter ?") then

         result := false,

      endif,

   endif,

end,

CheckDatum()


Event "Versions-Verwaltung: Status-Änderung"

Event "Versions-Verwaltung: Status-Änderung"

Der Aufruf erfolgt abhängig von dem Parameter

nModus =

6. nachdem der neue Versions-Artikel angelegt wurde, noch vor der Anzeige des selben im Artikelstamm

7. nachdem der Versions-Wechsel abgeschlossen wurde aber noch vor Beendigung der Transaktion

8. bei der "Freigabe von technischen Änderungen" - nach der Archivierung der 'aktuellen Version' (assoziierte Stammdaten wurden noch nicht verschoben)

9. bei der "Freigabe von technischen Änderungen" - nach Übernahme der Daten von der 'künftigen Version' auf die 'aktuellen Version' (assoziierte Stammdaten wurden noch nicht verschoben)

Beispiel

| nEvtNo:P1, nModus:P2, oDab010Quell:P3, oDab010Ziel:P4, aPost |

// nModus      : 1 - Neuanlage Artikel "als neue Version"

//               2 - Release-Wechsel - Neue Version freigeben

//               3 - Freigabe technische Änderungen - Archivierung

//               4 - Freigabe technische Änderungen - Übernahme

// oDab010Quell: Tabelle Artikelstamm positioniert auf der 'Quell-Version'

// oDab010Ziel : Tabelle Artikelstamm positioniert auf der 'Ziel-Version'

// HINWEIS     : Transaktion aktiv!

aPost := False,

if (DbState(oDab010Ziel) <> dsEdit) and (DbState(oDab010Ziel) <> dsInsert) then

   DbEdit(oDab010Ziel),

   aPost := True,

endif,

// 1 - Neuanlage Artikel "als neue Version"

//     - oDab010Quell = 'aktuelle Version'

//     - oDab010Ziel  = Neuer Artikel

if nModus = 1 then

   oDab010Ziel:VERS_INFO := 'Neue Version!' + CRLF +

                            'Kopiert von Artikel: ' + oDab010Quell:ARTNR + CRLF +

                            'Datum/Zeit:          ' + DateTimeToStr(Now()),

else

   // 2 - Release-Wechsel - Neue Version freigeben

   //     - Kunden-Sonderpreise und Absatzplanung wurden (ggf.) bereits verschoben

   //     - Feld DAB010:VERS_STAT wurde bereits geändert

   //     - oDab010Quell = vormals 'aktuelle Version'

   //     - oDab010Ziel  = vormals 'künftige Version'

   if nModus = 2 then

      oDab010Ziel:VERS_INFO := oDab010Ziel:VERS_INFO + CRLF +

                               'Freigegeben am: ' + DateTimeToStr(Now()),

   else

      // 3 - Freigabe technische Änderungen - Archivierung

      //     - assoziierte Stammdaten wurden noch nicht verschoben, nur Feldinhalte

      //       DAB010!

      //     - oDab010Quell = 'aktuelle Version'

      //     - oDab010Ziel  = Archiv-Version

      if nModus = 3 then

         oDab010Ziel:VERS_INFO := oDab010Ziel:VERS_INFO + CRLF +

                                  'Freigabe technischer Änderungen -------------' + CRLF +

                                  'Archiviert am: ' + DateTimeToStr(Now()) + CRLF +

                                  'von Artikel: '  + oDab010Quell:ARTNR,

      else

         // 4 - Freigabe technische Änderungen - Übernahme

         //     - assoziierte Stammdaten wurden noch nicht verschoben, nur Feldinhalte

         //       DAB010!

         //     - oDab010Quell = 'künftige Version'

         //     - oDab010Ziel  = 'aktuelle Version'

         if nModus = 4 then

            oDab010Ziel:VERS_INFO := oDab010Ziel:VERS_INFO + CRLF +

                                     'Freigabe technischer Änderungen --------------' +

                                     CRLF + 'am: ' + DateTimeToStr(Now()) + CRLF +

                                     'Daten-Übernahme von Artikel: ' + oDab010Quell:ARTNR,

         endif,

      endif,

   endif,

endif,

if aPost then

   DbPost(oDab010Ziel),

endif,


Event "vor Beendigung von business express"

Event "vor Beendigung von business express"

Der Aufruf erfolgt unmittelbar vor der Abfrage "business express beenden" beim Schließen von business express.

Beispiel

| nEvtNo:P1, oModul:P2 |

// oModul  : Haupt-Formular der Anwendung, welche geschlossen werden soll

//           ( für spätere Erweiterung des Events auf alle BE-Hauptfenster )

//           ( z.B. im ERP-Hauptfenster: ClassName(oModul) = "TFormMain" )

// Rückgabe: 0 - Rückfrage-Dialog Ja/Nein erscheint ganz normal

//           1 - BE wird nicht beendet (ohne Rückfrage)

//           2 - BE wird beendet (ohne Rückfrage)

// BE immer ohne Rückfrage beenden falls ERP-Hauptfenster

iif(ClassName(oModul) = "TFormMain", 2, 0)


Event "vor Bestands-Berichtigung"

Event "vor Bestands-Berichtigung"

Der Event wird in folgenden Prozessen (nMode) aufgerufen:

1+ 2: Rechnungskontrolle, jeweils nachdem DAB020 (WE-Zugangs-Satz) / DAB235 (Rechnungs-Kontroll-Satz) korrigiert wurden, aber bevor die Wertberichtigung auf den Bestand (Dab010:DURSCHEK) umgelegt wird (also innerhalb der Transaktion):

- Bei der Berichtigung einer Position (Menge / Preis / Preiseinheit / Umrechungsfaktor / Zusatzkosten etc.)

- Beim Rechnungsabschluss (Korrektur aller Positionen, falls Nebenkosten vorhanden)

3: Anonyme Produktions-Verbrauchs-Buchung (aus der Lager-Verwaltung heraus, gleiches Fenster wie Inventur-Einzelbuchung)

4+ 5: Inventur-Buchung (Einzel- und Stapel), vor Ende der Transaktion

6+ 7: Fertigmeldung (Teil und End), vor Ende der Transaktion

Beispiel

| nEvtNo:P1, nMode:P2, oDataMod:P3, cArtNo:P4,

  cDispoNo:P5, nQuantity:P6, uValue:P7, nCorrValue:P8 |

// nMode     : Modus zeigt an, aus welchem Programm der Aufruf erfolgt

//             1 = Re.Kontrolle Pos.Berichtigung

//             2 = Re.Kontrolle Freigabe

//             3 = Produktions-Verbrauch anonym

//             4 = Inventur-Korrektur manuell

//             5 = Inventur-Korrektur Stapel

//             6 = Produktion Teil-Fertigmeldung

//             7 = Produktion End-Fertigmeldung

// oDataMod  : Datenmodul oder AdsConnecton

// cArtNo    : Artikel-Nummer

// cDispoNo  : Dispo-Nummer (Dab020)

// nQuantity : Buchungs-Menge +/- (in Modus 1 und 2 = Differenzmenge)

// uValue    : Modus 1-2: gesamter Umlagebetrag der Korrektur (+/-)

//             Modus 3-5: gesamter Buchungswert (+/-)

//             Modus 6-7: Array mit detaillierten Informationen über die Zusammensetzung des

//                        Gesamt-Zugangswertes der Fertigmeldung. Struktur des Arrays:

//                        { {B_POS_LFD, ARTNR_E, Gesamtwert (ohne Zuschlag), Zuschlagswert}, {...}, ... }

// nCorrValue: umlagefähiger Betrag (nur verfügbar in Modus 1 und 2)

// Rückgabe  : nCorrValue (Vorzeichen darf nicht umgekehrt werden, absoluter Wert darf nicht erhöht werden)

// HINWEIS   : Transaktion aktiv!

//******************************************************************

// Dieses Beispiel dient dazu, die Funktionsweise des Events und die

// zur Verfügung stehenden Informationen zu demonstrieren

//******************************************************************

function GetLockInfo(aTable)

|aLock|

  Result := 'Trans: ',

  if DbInTrans(aTable.AdsConnection) then

     Result := Result + 'aktiv'

  else

     Result := Result + 'inaktiv'

  endif,

  Result := Result + crlf + '        Lockname: ' + DbGetLockClientName(aTable),

  aLock  := AdsGetUserLocks(aTable),

  if empty(aLock) then

     Result := Result + crlf + '        Locks: ',

  else

     Result := Result + crlf + '        Locks: ' + ArrToStr( aLock ),

  endif

end,

function ModusAsString()

  case nMode

     of 1 :: Result := '1 = Re.Kontrolle Pos.Berichtigung',

     of 2 :: Result := '2 = Re.Kontrolle Freigabe',

     of 3 :: Result := '3 = Produktions-Verbrauch anonym',

     of 4 :: Result := '4 = Inventur-Korrektur manuell',

     of 5 :: Result := '5 = Inventur-Korrektur Stapel',

     of 6 :: Result := '6 = Produktion Teil-Fertigmeldung',

     of 7 :: Result := '7 = Produktion End-Fertigmeldung',

  otherwise

     Result := 'unbekannter Modus',

  endcase,

end,

function FormatArrayOutput(aArray)

| i, aItem |

  Result := '',

  startseq,

     for i := 1 to ALen(aArray) do

        Result += if(empty(Result), '', crlf),

        aItem := aArray[i],

        Result += replicate(' ', 2) + padl(aItem[1],13) + '|' + padl(aItem[2],20) + '|' + padl(aItem[3],10) + '|' + padl(aItem[4],10),

     next,

  onerror,

     Result := 'Fehler',

  stopseq,

end,

startseq,

   aInfo := 'Modus:                ' + ModusAsString()            + crlf +

            'Typ Datenmodul:       ' + ClassName(oDataMod)        + crlf +

            'Artikel:              ' + cArtNo                     + crlf +

            'DispoNummer:          ' + cDispoNo                   + crlf +

            'Buchungs-Menge +/-:   ' + Str(nQuantity)             + crlf +

              if( nMode < 6,

                  '  Zu-/Abgangs-Wert:   ' + Str(uValue),

                  if(valtype(uValue) = 'A' ,

                     '  Werte-Array:        ' + crlf + FormatArrayOutput(uValue),

                     'kein Array'))

                                                                    + crlf +

            if(nMode <= 2, '  Umlagefäh. Betrag:  ' + Str(nCorrValue), ''),

onerror,

   aInfo := 'Fehler bei der Ermittlung',

stopseq,

if not empty(oDataMod) and ((nMode = 2) or (nMode = 1)) then

  aD010 := DBGetTable(oDataMod, waDAB010),

  aD020 := DBGetTable(oDataMod, waDAB020),

  aD235 := DBGetTable(oDataMod, waDAB235),

  aD055 := DBGetTable(oDataMod, waDAB055),

  aD240 := DBGetTable(oDataMod, waDAB240),

  aInfo := aInfo + crlf + crlf + crlf +

           'Dab010: ' + GetLockInfo(aD010) + crlf +

           'Dab020: ' + GetLockInfo(aD020) + crlf +

           'Dab055: ' + GetLockInfo(aD055) + crlf +

           'Dab240: ' + GetLockInfo(aD240),

endif,

aForm := CreateObject('TFormEx'),

startseq

   aForm.Width    := 500,

   aForm.Height   := 300  + 100,

   aForm.OrigCapt := 'Event "vor Bestand-Berichtigung"',

   aForm.Top      := 400,

   aForm.Left     := 300,

   aBtn := CreateObject('TBeBitBtn', '', aForm, aForm),

   aBtn.Caption := 'Ändern',

   aBtn.Images  := FindObject(FindObject(Application, 'DM_ImageList'), 'ImageListMain'),

   aBtn.ImageIndex.IndexNormal := 7,

   aBtn.Width   := 100,

   aBtn.Left    := 140,

   aBtn.Top     := 240 + 95,

   aBtn.ModalResult := mrOK,

   aBtn := CreateObject('TBeBitBtn', '', aForm, aForm),

   aBtn.Caption := 'Abbrechen',

   aBtn.Images  := FindObject(FindObject(Application, 'DM_ImageList'), 'ImageListMain'),

   aBtn.ImageIndex.IndexNormal := 8,

   aBtn.Width   := 100,

   aBtn.Left    := 240,

   aBtn.Top     := 240 + 95,

   aBtn.ModalResult := mrCancel,

   aLabel  := CreateObject('TLabel', '', aForm, aForm),

   aLabel.Width    := 150,

   aLabel.Left     := 20,

   aLabel.Top      := 205 + 100 + 3,

   aLabel.Caption  := 'umlagefähiger Betrag: ',

   aEdit := CreateObject('TBeEdit', '', aForm, aForm),

   aEdit.Width    := 250,

   aEdit.Left     := 150,

   aEdit.Top      := 205 + 100,

   aEdit.Text     := FloatToStr(nCorrValue),

   aEdit.ReadOnly := not ( nMode = 2 or nMode = 1),

   aMemo := CreateObject('TMemo', '', aForm, aForm),

   aMemo.Align     := altop,

   aMemo.Width     := 380,

   aMemo.Height    := 200 + 100,

   aMemo.Left      := 0,

   aMemo.Top       := 0,

   aMemo.Font.Name := 'Courier New',

   aMemo.Font.Size := 10,

   CollAdd(aMemo.Lines, aInfo),

   aRes := ShowModal(aForm),

   if aRes = 1 then

      nCorrValue := StrToFloat(aEdit.Text),

   endif,

always

   DestroyObject(aForm),

stopseq,

nCorrValue


Event "vor dem Belegdruck"

Event "vor dem Belegdruck"

Der Event wird direkt vor dem Druck eines Beleges aufgerufen. Er liegt außerhalb der Transaktion, die Haupttabelle ist noch nicht gesperrt.

Bei Rückgabe von .F. wird der jeweilige Beleg nicht gedruckt; jeder andere Wert bleibt unberücksichtigt.

Hinweis: Bei Sammelbelegen im Verkauf entspricht der Parameter nKeyNo:P4 die der Kunden-Nummer. Ansonsten entspricht dieser Parameter in Einzelbelegen im Verkauf der Auftragsnummer.

Parameter:

nDocSubType:P6

Während nDocArchType den Belegtyp bezeichnet, der im Archiv abgelegt wird, liefert

nDocSubType den Formulartyp des Belegs. nDocSubType weicht immer dann von nDocArchType

ab, wenn mehrere Belegvarianten im Archiv zusammengefasst werden.

Beispiel:

nDocArchType nDocSubType

____________________________________________

Rechnung: DT_RECH DT_RECH

Sammelrechnung: DT_RECH DT_SARE

Bitte nie mit festen Werten für Belegtypen arbeiten, sondern immer die definierten

Codeblock-Konstanten verwenden (nicht alle def. Konst. sind für das Archiv bestimmt):

Codeblock-Konstante Belegtyp

__________________________________________________________________

DT_ANGE Angebot

DT_AUFB Auftragsbestätigung

DT_PRRE Proforma-Rechnung

DT_KOMM Kommissionierschein

DT_PACK Packliste

DT_LIEF Lieferschein

DT_VALI Vorab-Lieferschein

DT_SALI Sammel-Lieferschein

DT_VMLI Vermiet-Lieferschein

DT_VMRU Vermietungs-Rückgabeschein

DT_VSPA Versandpapiere

DT_FRBR Frachtbriefe

DT_PAAK Paketaufkleber

DT_VSAZ Versandanzeige

DT_RECH Rechnung

DT_TLRE Teilrechnung

DT_ABRE Abschlags-Rechnung

DT_SARE Sammel-Rechnung

DT_VMZW Miet-Zwischenrechnung

DT_MAHN Mahnung

DT_MARE Mahnung auf Rechnungskopie

DT_PRAN Preisanfrage

DT_BEST Bestellung

DT_ABEI Abruf-Einteilung

DT_BEMA Bestell-Mahnung

DT_FEAU Fertigungs-Auftrag

DT_SRFO WE Formular

DT_SRET WE Etikett

DT_QSFO QS Formular

DT_KBET Kommissionierbox-Etikett

DT_SRAR Archivmuster-Etikett

DT_ARET Artikel-Etikett

DT_PRPL Produktions-Pickliste

DT_SHNO Shippment Notes

DT_AEIS Ausfuhrerklärung

DT_ISIV Intrastat-Versendung

DT_ISIE Intrastat-Einfuhr

DT_BVUS Barverkauf Umsatzstatistik

DT_BVJS Barverkauf Journal / Tages-Summen

DT_BVBD Barverkauf Belegdruck

Beispiel

| nEvtNo:P1, nDocArchType:P2, nDocNo:P3, nKeyNo:P4, nPersNo:P5, nDocSubType:P6 |

// Keine Transaktion aktiv

// Rückgabe .F. verhindert den Druck des Belegs

// kein Rechnunsgdruck bei EG-Kunden ohne UID-Nr.

Function Main()

   | cLandNr, cUstIdnr |

   result := true,

   if .not. StrZero(nDocSubType,3) $ "160/190" then   // Rechnung,Sammelrechnung

      exit,

   endif,

   // Rechnung

   if nDocSubType = 160 then

      cLandNr := LookUp(waDAB050, 'DAB052',{{nPersNo,Str(nKeyNo,6)}},"LLANDNR"),

   endif,

   // Sammelrechnung

   if nDocSubType = 190 .or. Empty(cLandNr) then

      cLandNr := LookUp(waDAB000, 'DAB001', {{nPersNo}}, "LANDNR"),

   endif,

   // Land = Deutschland

   if cLandNr = "004" then

      exit,

   endif,

   // EG ??

   if LookUp(waDIA020, 'DIA021',{{cLandnr}},"EG_KZ") <> "J" then

      exit,

   endif,

   // EG ??

   if .not. (Empty(Lookup(waDIA020,'DIA021',{{cLandnr}},"EG_AB")) .or.

      Lookup(waDIA020, 'DIA021',{{cLandnr}},"EG_AB") <= Date()) then

      exit,

   endif,

   // Ust-IdNr

   cUstIdNr := Lookup(waDAB000, '1',{{nPersNo}},"UST_IDNR"),

   if "99999" $ cUstIdNr .or. "FRAGEN" $ cUstIdnr .or. Empty(cUstIdnr) .or.

      "." $ cUstIdnr .or. "?" $ cUstIdnr then

      MessageDlg("Rechnungsdruck für Kunde "+Str(nPersNo) +

                 "  nicht möglich - EG-Kunde ohne gültige Ust-IdNr: "+cUstIdnr,0,4),

      result := false,

   endif,

end,

main()


Event "vor der Proforma-Rechnung"

Event "vor der Proforma-Rechnung"

Der Event wird vor dem Erscheinen des Eingabefensters für die Proforma-Rechung aufgerufen. Als Parameter erhält diese Funktion eine Kopie des Auftragskopfs (mDab050) und der Auftragspositionen (mDab055).

Beispiel

| nEvtNo:P1, mDab050:P2, mDab055:P3 |

// Der Aufruf erfolgt vor dem Öffnen des Eingabefensters 'Proforma-Rechnung'.

// mDAB050, mDAB055 sind Kopien der Originaltabellen:

// mDab050 darf ggf. geändert werden,

// Ändern, Löschen und Hinzufügen von Datensätzen ist für mDab055 erlaubt.

// Rückgabe: Logisch => False schließt das Fenster ohne weitere Anzeige.

While not EoF(mDab055) do

   DBSkip(mDab055, 1),

   WriteLn('Mach was ... '),

end,

.t.


Event "vor Eintrag Beleghistorie"

Event "vor Eintrag Beleghistorie"

Der Event wird aufgerufen, direkt bevor in die Historie eines Beleges im Belegarchiv ein Eintrag gemacht wird.

Hinweis: Der Event kann dazu verwendet werden, die Löschung von Belegen zu verhindern (siehe Beispiel).

Beispiel

| nEvtNo:P1, nHistTyp:P2, dDatum:P3, nUser:P4, cInfo:P5,

  oDab700:P6, aRes |

// Rückgabe im Falle von nHistTyp = 3 (Beleg-Löschung!):

//   leer, TRUE = Löschung erlaubt

//   FALSE      = Löschung nicht erlaubt

aRes := True,

if nHistTyp = 3 then

   aRes := JN( 'Beleg-Löschung erlauben ?' + crlf +

               '(' + Str(nHistTyp,3) + ', ' + DToC(dDatum) +

               ', ' + Str(nUser,3) + ', ' + cInfo + ')' )

endif,

aRes


Event "vor Email-Versand"

Event "vor Email-Versand"

Der Event wird unmittelbar vor dem Versand einer Email aufgerufen.

Dem Event wird ein Array mit Empfänger-Typen, -Arten, -Emailadressen und Betreffs übergeben, welches im Event verändert werden kann. Auf diese Weise ist es z.B. möglich Kunden-Emails, die als Kopie an interne Mitarbeiter gehen, den Kunden-Matchcode voran zu stellen.

Dieses Event steht zunächst nur bei Versand via SMTP zur Verfügung!

siehe auch Event "Memo - vor dem Setzen der internen Notiz"

Beispiel

| nEvtNo:P1, aInfo:P2, aText:P3, aNote:P4, oBatchMail:P5, i |

// Aufruf erfolgt vor dem Versenden jeder Email

// ACHTUNG: Änderungen an Email-Adressen haben keine(!) Auswirkungen auf den

//          Header der Email !

// aInfo = { { <Type>, <IntExt>, <Emailadresse>, <Betreff> }, {...}, ... }

// Type   : "TO", "CC", "BCC"

// IntExt : "EXT"ern, "INT"ern

// Betreff, Emailadresse und IntExt können geändert werden

// Änderungen an Type, aText, aNote wedern ignoriert

// Für Änderungen an aNote steht der Event "Memo - vor dem Setzen der internen Notiz" zur Verfügung

// Array-Elemente können hinzugefügt/gelöscht werden

for i := 1 to ALen(aInfo) do

   if aInfo[i, 1] = "CC" then

      aInfo[i, 4] := "KOPIE: " + aInfo[i, 4],

   endif,

   if aInfo[i, 2] = "INT" then

      aInfo[i, 4] := "INTERN: " + aInfo[i, 4],

   endif,

   if "DONTENWILL" $ Upper(aInfo[i, 3]) then

      aInfo[i, 4] := "DOWI: " + aInfo[i, 4],

   endif,

next,

aInfo // Rückgabe des neuen Arrays


Event "vor Fertigungs-AKA-Abbuchung"

Event "vor Fertigungs-AKA-Abbuchung"

Der Event wird vor der Abbuchung der Rohwaren beim Arbeitskartendruck in der Fertigung aufgerufen.

Als Parameter wird das aktuelle Datenmodul, die Vorgabe-Lagerliste, sowie die abzubuchende Menge übergeben.

Rückgabe ist ggf. eine neue Lagerliste; optional mit maximal abzubuchender Menge je Lager.

Hinweis: Ist die Rückgabe NULL() (nicht leer!), so erfolgt keine Abbuchung von Ware für diese Fertigungsposition!

Beispiel

| nEvtNo:P1, oDM:P2, aLager:P3, nMenge:P4,

  nTray, cTrayLag, i |

// Der Aufruf erfolgt direkt vor Beginn der Abbuchung einer Fertigungsauftragsposition.

// Auf alle aktuellen Tabellen kann über das Datenmodul oDM über die Standard-Aliase zugegriffen werden.

// Rückgabe : Lagernummern-/Max.Mengen-Array

//  { { <Lager-Nr.-String>, <Max.Menge> }, <Lager-Nr.-String>, ... } oder Leer bzw. NULL() = keine Abbuchung.

//  Das <Max.Menge>-Element stellt die max. abzubuchende Menge dar.

//  Wird das <Max.Menge>-Element nicht angegeben, wird die gesamte verfügbare Lager-Menge verwendet.

// Lager "10" wird als Tray-Lager angenommen

cTrayLag := "10",

// Tray-Lager präventiv aus Lager-Array löschen

for i := 1 to Alen(aLager) do

   if aLager[i] = cTrayLag then

      ADelete( aLager, i ),

   endif,

next,

// Verfügbare Tray-Menge wird auf Vielfaches von 12 abgerundet

nTray := Min(nMenge, Lager(cTrayLag, DBGetTable(oDM,waDAB010))),

nTray := Int(nTray / 12) * 12,

// Dem aLager-Array als erstes Element mit einer Max.Menge von nTray hinzufügen

if nTray > 0 then

   AInsert(aLager, 1, { cTrayLag, nTray } ),

endif,

aLager


Event "vor Lagerbuchung"

Event "vor Lagerbuchung"

Dieser Event wird direkt vor einer Lagerbuchung aufgerufen, also z.B. bei einer Inventurbuchung oder beim Setzen einer Versand-Menge (und Speichern der Position) in der Auftragsbearbeitung.

Beispiel

| nEvtNo:P1,     oDab010:P2,    oDab020:P3,  oDab100:P4,  oDab000:P5,

  oMemPlaces:P6, cBuart:P7,     cBelegNr:P8, dDatum:P9,   nPersNr:P10,

  cArtNr:P11,    nMenge:P12,    cText:P13,   nKostSt:P14, cMemo:P15,

  cLager:P16,    nMengeAlt:P17, cProgID:P18 |

// Verfügbare Felder in Tabelle oMemPlaces:

//   StoreQuantity   -> Menge auf Lager/Platz/Kommission

//   AccQuantity     -> Buchungsmenge für Lager/Platz/Kommission

//   PlaceNo         -> Lager-Platz

//   CommissNo       -> Chargen-/Ser#

//   Date            -> Buchungsdatum

//   OldAccQuantity  -> Menge vor der Buchung

//   OldPlaceNo      -> Platz vor der Buchung

//   OldCommissNo    -> Kommission vor der Buchung

// Rückgabe = leer oder 0 -> fortfahren

// Rückgabe = 1           -> ohne Buchungsfenster fortfahren

// Rückgabe = 2           -> Buchung sofort, komplett abbrechen

if cBuart = 'E' and nPersNr <> 0 and nMenge > 0 then

   MyEdit(oMemPlaces),

   oMemPlaces:CommissNo := cBelegNr,

   MyPost(oMemPlaces),

endif,


Event "vor Menüausführung"

Event "vor Menüausführung"

Der Event wird vor der Ausführung eines Menüpunktes aufgerufen.

Als logische Rückgabe muss festgelegt werden, ob die Original-Funktion noch ausgeführt werden soll (TRUE) oder nicht (FALSE).

Wenn von einem "Menüpunkt" gesprochen wird sind immer gleichzeitig zugeordnete Buttons, Shortcuts und die interne Ausführung der entsprechenden Funktion gemeint.

Der Event ist u.a. für die folgenden Operationen geeignet (siehe Beispiele unten):

- Sperren eines Menüpunktes per Codeblock

- Ersetzen der Funktion eines Menüpunktes durch einen Codeblock

- Ergänzen der Funktion eines Menüpunktes durch einen Codeblock

- Umleiten der Funktion eines Menüpunktes durch einen Codeblock

Hinweis:

Der Event darf niemals generell FALSE zurückliefern, da das gesamte System sonst unwiderruflich gesperrt würde.

Es erfolgt zwar eine entsprechende Validierung des Ereignisses beim ersten Aufruf, diese ist jedoch auf Grund der möglichen Komplexität nicht 100%-ig sicher.

Beispiel

| nEvtNo:P1, oAction:P2, oForm:P3,

  aResult, oDab050, oDab055, oMyAct, oMainTable |

// Aufruf erfolgt vor der Ausführung einer Aktion (Menüpunkt, Button, o.ä.)

// Rückgabe = True/False, Aktion ausführen/nicht ausführen

// =============================================================================

// BSP 1: Klassennamen und Actionnamen zur Identifikation eines Menüpunktes

//        ermitteln und später anwenden

// =============================================================================

Meld(Classname(oForm) + ': ' + oAction.Name,),

// =============================================================================

// BSP 2: Funktion "Lieferfreigabe" in der Auftragsverwaltung komplett ersetzen

// =============================================================================

if Classname(oForm) = 'TFormMainProcessOrders' and

   oAction.Name     = 'A_DelivRelease' then

   Meld('Lieferfreigabe über eigene Funktion erledigt...'),

   aResult := False,

else

   aResult := True,

endif,

// =============================================================================

// BSP 3: oForm als Container (Datenmodul) verwenden und z.B. DAB050, DAB055 der

//        Auftragsbearbeitung ermitteln.

//        Funktioniert mit fast allen Fenstern, es sollte aber überprüft werden,

//        ob die rückgelieferte Tabelle tatsächlich die gewünschte ist...

// =============================================================================

if Classname(oForm) = 'TFormMainProcessOrders' and

   oAction.Name     = 'A_New_Pos' then //-> Neue Auftragsposition

   // Dab050, DAB055 ermitteln

   oDab050 := DBGetTable( oForm, waDAB050, 'DAB050' ),

   oDab055 := DBGetTable( oForm, waDAB055, 'DAB055' ),

   // Eigene Verarbeitung

   Meld('Schritt 1: ' + oDab050:ANUMMER),

// =============================================================================

// BSP 4: Origininal Funktion eines Menüpunktes bzw. Fensters ausführen !

// =============================================================================

   // ACHTUNG!!! Der Aufruf der Action (oAction), so wie er hier steht würde zu einer

   // einer Rekursion führen!!! (A_New_Pos würde wieder dieses Event aufrufen und so fort)

   // Hier müsste also eine entsprechende globale Variable eingesetzt wurden,

   // die das verhindert !!!

   // ActionExecute(oAction),

   // ALTERNATIVE: (für abweichende Action des Fensters):

   // BSP: Aus "Neue Position" wird "Position Löschen"...

   startseq

      oMyAct := FindObject(oForm,'A_Delete_Pos'),

      ActionExecute(oMyAct),

   onerror

   stopseq,

   // Eigene Verarbeitung

   Meld('Schritt 2: Aktuelle Auftr.Pos: ' + oDab055:APNUMMER),

   aResult := FALSE, // Keine weitere, interne Ausführung des Menüpunktes

endif,

// =============================================================================

// BSP 5: Alternative Methode, um die Haupttabelle eines Fensters zu ermitteln.

//        Funktioniert mit den meisten dockbaren Fenstern, z.B. Kontaktpersonen

// =============================================================================

if Classname(oForm) = 'TFormEditContacts' and

   oAction.Name     = 'A_Delete' then //-> Löschen

   // Haupttabelle ermitteln

   oMainTable := FindObject(oForm,'MainTable'),

   Meld('Maintable alias: ' + oMainTable.AliasName ),

   Meld('Löschen verboooooten ...'),

   aResult := FALSE, // Keine weitere, interne Ausführung des Menüpunktes

endif,

// =============================================================================

// WICHTIG: Immer ein definiertes Ergebnis zurückliefern !!!

// =============================================================================

aResult


Event "vor PDF-Export (intern)"

Event "vor PDF-Export (intern)"

Der Event wird vor dem Export eines Dokuments aufgerufen, das im PDF-Format ausgegeben werden soll.

Es tritt nur ein, wenn der Parameter 'InternPDF' auf True gesetzt ist.

Der 2. Parameter des Events ist ein Objekt vom Typ 'TBePDFDevice' , über dessen Eigenschaft 'PDFPrinter' Einstellungen für die PDF-Ausgabe vorgenommen werden können:

1) PDFPrinter.Info (zu finden im Adobe-Reader -> Eigenschaften -> Register Beschreibung)

- Title

Titel der PDF-Ausgabe; der Defaultwert ist 'be PDF-Export'

- Author

Urheber des PDF-Dokuments; kein Defaultwert

- Subject

Thema / Betreff des PDF-Dokuments; normal kein Defaultwert; beim Druck aus dem Archiv ein Text zur Belegart (ggf. mit Belegnummer)

2) PDFPrinter.JPEGQuality

Diese Eigenschaft legt die Qualität von eingebetteten JPEG-Bildern fest.

Eine starke JPEG-Kompression (pdfJPEG_10) erzeugt eine kleinere PDF-Ausgabedatei, vermindert aber die Qualität der Bilder.

'pdfJPEG_100' ist die beste Qualitätsstufe, aber auch hier findet noch eine Quantisierung statt, die bei für JPEG ungeeigneten Bildern zu

Qualitätsverlusten führen kann.

'pdfNoJPEG' verhindert die Kompression vollständig.

Es stehen die folgenden Konstanten zur Verfügung:

- pdfJPEG_10 sehr geringe JPEG-Qualität

- pdfJPEG_25 geringe JPEG-Qualität

- pdfJPEG_50 mittlere JPEG-Qualität

- pdfJPEG_75 gute JPEG-Qualität; dies ist die Default-Einstellung

- pdfJPEG_100 sehr gute JPEG-Qualität

- pdfNoJPEG keine Formatumwandlung in JPEG

3) oPDFDevice.PDFPrinter.FontMode

   - 0 = wpUseTrueTypeFonts               (Keine Schriftarten einbetten, kleine Dateigrösse, die Schriftarten müssen auf den Clients vorhanden sein)

   - 1 = wpEmbedTrueTypeFonts             (Alle TTF vollständig einbinden, sehr große Dateigröße, bei PDF-A Verwendung Standard-Modus)

   - 2 = wpEmbedSymbolTrueTypeFonts

   - 3 = wpUseBase14Type1Fonts

   - 4 = wpEmbedSubsetTrueType_Charsets   (Vollständige Charsets der verwendeten TTFs einbinden, große Dateigröße)

   - 5 = wpEmbedSubsetTrueType_UsedChar   (Bettet nur die verwendeten Charsets der TTFs ein. Normaler Standard-Modus )

4) PDF-A

siehe interne Dokumentation in Confluence

Beispiel

| nEvtNo:P1, oPDFDevice:P2 |

if !Empty(oPDFDevice) then

   oPDFDevice.PDFPrinter.Info.Title := 'Mein PDF-Titel',

   oPDFDevice.PDFPrinter.JPEGQuality:= PdfJpeg_100,      // Qualität einstellen

endif


Event "vor PDF-Export (extern)"

Event "vor PDF-Export (extern)"

Das Ereignis "vor PDF-Export" tritt direkt vor der Aufforderung an den Druckertreiber die Ausgabe zu erzeugen auf.

Hier wäre es beispielsweise möglich in der Windows-Registry Werte zu setzen, welche der Drucktreiber berücksichtigt (z.B. einen Ausgabedateinamen, der die aktuelle BE-Benutzernummer enthält o.ä.)

Hinweis

Nicht mehr verwenden, stattdessen die interne PDF-Erzeugung verwenden, siehe entsprechend verlinkten Event.

Siehe auch:

Event "vor PDF-Export (intern)"


Event "Vor Stammdaten-Suche"

Event "Vor Stammdaten-Suche"

Beschreibung

Der Event wird vor der Anzeige einer Stammdaten-Suche ausgelöst.

Hinweis

Dieser Event steht aktuell nur für die Artikel-Suche zur Verfügung.

Parameter

nEventNo

Event-Nummer

oParams

TBeMasterdataSearchEventParam

Eigenschaften (nur lesen)

CbMode: TBeMasterdataSearchMode

Modus der Suche (mdsmArticle = Artikelsuche)

CbForm: TCustomForm

Formular, welches den Suchdialog aufgerufen hat

CbControl: TControl

Control, welches den Suchdialog aufgerufen hat

CbCurrentValue: string

Aktueller Wert, der in dem Feld/Control eingetragen ist

CbTable: TDataSet

Tabelle, welche den Suchdialog aufgerufen hat

CbFieldName: string

Name des Feldes, welches den Suchdialog aufgerufen hat

Eigenschaften (lesen und schreiben)

CbShowDefaultSearch: boolean

Standard Suchdialog anzeigen (default True)

CbCancelSearch: boolean

Suchvorgang abbrechen (default False)

CbResultValue: string

Ergebnis der Suche (default leer)

Falls CbShowDefaultSearch = True, wird dieser Wert in den Standard-Suchdialog als Vorbelegung verwendet.

Falls CbShowDefaultSearch = False, wird dieser Wert als Ergebnis der Suche verwendet ohne den Standard-Suchdialog anzuzeigen

z.b. kann hier die Artikelnummer über einem individuellen Suchdialog ausgewählt werden

Rückgabewert

keine - der Parameter oParams wird direkt verwendet.

Beispiel

//##############################################################################

//##############################################################################

// Beschreibung:

//    Dieses Event wird vor dem Ausführen einer Stammdaten-Suche ausgeführt.

//    Dadurch kann der Standard-Such-Dialog durch eine eigene Logik

//    ausgetauscht werden.

//

// Hinweise:

//    Aktuell ist der Event nur für die Artikel-Suche verfügbar.

//

// Parameter:

// - nEventNo: integer                       - Nummer des Events.

// - oParams:  TBeMasterdataSearchEventParam - Parameter-Objekt welches Information und

//                                             Steuereigenschaften der Suche zur Verfügung stellt.

//   Eigenschaften (nur lesen):

//   • CbMode:         TBeMasterdataSearchMode - Modus der Suche (mdsmArticle = Artikelsuche).

//   • CbForm:         TCustomForm             - Formular welches den Suchdialog aufgerufen hat.

//   • CbControl:      TControl                - Control welches den Suchdialog aufgerufen hat.

//   • CbCurrentValue: string                  - Aktueller Wert der in dem Feld/Control eingetragen ist.

//   • CbTable:        TDataSet                - Tabelle welche den Suchdialog aufgerufen hat.

//   • CbFieldName:    string                  - Name des Feldes welches den Suchdialog aufgerufen hat

//

//   Eigenschaften (lesen und schreiben):

//   • CbShowDefaultSearch: boolean - Standard Suchdialog anzeigen. (default True)

//   • CbCancelSearch:      boolean - Suchvorgang abbrechen. (default False)

//   • CbResultValue:       string  - Ergebnis der Suche. (default leer)

//                                    Falls CbShowDefaultSearch = True, wird dieser Wert in den Standard-Suchdialog

//                                    als Vorbelegung verwendet.

//                                    z.b. die Artikelnummer die in einem individuellen Suchdialog ausgewählt wurde

//##############################################################################

//##############################################################################

|

   nEventNo:P1, oParams:P2

|

oParams.CbShowDefaultSearch := True,

oParams.CbResultValue       := 'VORAUSWAHL_ARTIKEL',


Event "vor Stapel-Aktualisierung"

Event "vor Stapel-Aktualisierung"

Der Event wird aufgerufen, bevor die Liste der zu druckenden Dokumente im Stapel aktualisiert wird.

Dies geschieht beispielsweise für den Stapel der Lieferscheine über den Printmanager mittels dem Menüpunkt "Verkauf -> Lieferscheine -> Lieferscheine".

Der Event kann sowohl für alle Ereignisgruppen wie auch für einzelne Ereignisgruppen (wie z.B. Auftragsbestätigung, Lieferschein, Rechnung, ...) festgelegt werden.

Beispiel

// Beispiel für eine Eventsteuerung in der Ereignisgruppe Lieferschein:

| nEvtNo:P1, nDocArchType:P2, nDocSubType:P3, aDocArray:P4, aText, i |

// Tip: Empty(aDocArray)                 -> Druck aus Printmanager, sonst Hauptfenster

// BePrintDoc(DT_LIEF, 0, .t., .t.)      -> hier aDocArray wie im Printmanager

// BePrintDoc(DT_LIEF, 341095, .t., .t.) -> hier aDocArray wie im Hauptfenster

//

// nDocArchType = 60 -> Lieferschein

//

// Werte für nDocSubType:

// normaler Lfs.: 60

// Sammel-Lfs.  : 80

// Vermiet-Lfs. : 90

if !Empty(aDocArray) then

   aText := 'aus dem Hauptfenster (',

   for i := 1 to ALen(aDocArray) do

       aText:= aText + Trim(aDocArray[i]) + iif(i < ALen(aDocArray), ', ', ')')

   next

else

   aText := 'aus dem Printmanager'

endif,

ShowMessage('Lieferschein '  + aText + Chr(13) +

            'nDocArchType: ' + Str(nDocArchType) + Chr(13) +

            'nDocSubType : ' + Str(nDocSubType))


Event "vor Transaktions-Bestätigung (Commit)"

Event "vor Transaktions-Bestätigung (Commit)"

Der Aufruf erfolgt vor Abschluss (Commit) jeder Datenbank-Transaktion in BE.

Mit DBRollBack() können an dieser Stelle die Änderungen explizit rückgängig gemacht werden.

Durch Rückgabe von "False", kann dann eine Exception ausgelöst werden.

Wichtig:

Die Rückgabe von "False" bzw. ein DBRollBack() sollte nur mit äußerster Vorsicht eingesetzt und ausführlich getestet werden, da es zu Folge-Programmfehlern auf Grund eines bewussten Abbruchs kommen könnte.

Beispiel

| nEvtNo:P1, oConnection:P2,

  oOwner, aTables, aLocks, oTable, i, k, cText |

// Vor Bestätigung der Transaktion (vor Commit)

// Rückgabe   : True, <Leer> = Transaktion bestätigen (Commit)

//              False        = Transaktion abbrechen (Rollback) und Fehler auslösen!

cText   := '',

aTables := AdsGetConnectTables(oConnection),

// rein informativ: Owner-Klassen-Hierarchie ermitteln

oOwner := oConnection,

while not Empty(oOwner) do

   cText := ClassName(oOwner) + '.' + cText,

   oOwner:= GetOwner(oOwner),

end,

cText += crlf,

// Alle an der Transaktion beteiligten Tabellen ermitteln

for i := 1 to ALen(aTables) do

   oTable := aTables[i],

   // Alle potenziell veränderten Sätze jeder Tabelle ermitteln

   aLocks := AdsGetUserLocks(oTable),

   if ALen(aLocks) > 0 then

     cText  += oTable.AliasName + crlf,

     for k := 1 to ALen(aLocks) do

        cText  += '     Satz-Nr.: ' + Str(aLocks[k]) + crlf,

     next,

   endif,

next,

// Ggf. Exception (kein direktes RollBack!) auslösen

Jn( 'Transaktion fortsetzen ?' + crlf + crlf + cText )


Event "WebBrowser - Darstellung von gesperrten externen HTML-Inhalten erlauben"

Event "WebBrowser - Darstellung von gesperrten externen HTML-Inhalten erlauben"

Dieser Event wird aufgerufen, wenn geprüft wird, ob das Nachladen externer HTML-Inhalte erlaubt ist. Er wird nur ausgeführt, wenn das Nachladen nicht bereits durch andere EInstellungen erlaubt ist, wie z.B. durch die Einstellung Festwerte--> lokale Parameter --> User --> Tab-Karte Kommunikation --> Tab-Karte Web-Browser --> Option Extern HTML-Inhalte erlauben.

Beispiel

//################################################################################

// Dieser Event wird ausgeführt, wenn geprüft wird, ob über http externe

// Inhalte nachgeladen werden dürfen. Der Event wird nur aufgerufen, wenn

// das Nachladen nicht bereits anderweitig erlaubt ist, wie z.B. durch die

// Einstellung:

// Festwerte--> lokale Parameter --> User --> Tab-Karte Kommunikation

// --> Tab-Karte Web-Browser --> Option Extern HTML-Inhalte erlauben.

//

// Der Aufruf erfolgt mit der kompletten Url, die in der Prüfung verwendet wird

// Rückgabe: Nachladen erlaubt?

//################################################################################

|nEvtNo:P1, cUrl:P2, lAllowed|

lAllowed := False,

// laesst das Nachladen von Markern fuer das GoogleMapsAPI zu

if At('http://chart.googleapis.com/', cUrl) > 0 then

   lAllowed := True,

endif,

lAllowed