<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.bergau.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Heibutzki</id>
	<title>OBS Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bergau.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Heibutzki"/>
	<link rel="alternate" type="text/html" href="https://wiki.bergau.de/Spezial:Beitr%C3%A4ge/Heibutzki"/>
	<updated>2026-10-01T06:55:50Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Branchenspezifische_Module/Lebensmittelproduktion&amp;diff=58285</id>
		<title>OBS/Branchenspezifische Module/Lebensmittelproduktion</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Branchenspezifische_Module/Lebensmittelproduktion&amp;diff=58285"/>
		<updated>2020-09-16T08:06:58Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: Die Seite wurde neu angelegt: „{{Branchenspezifische Module}}  ===Neuen Kunden pflegen=== # Personenstamm - Einfügen  # Zusatzdaten pflegen (Anlieferzeit)  ===Neue normale Artikel einfügen…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Branchenspezifische Module}}&lt;br /&gt;
&lt;br /&gt;
===Neuen Kunden pflegen===&lt;br /&gt;
# Personenstamm - Einfügen &lt;br /&gt;
# Zusatzdaten pflegen (Anlieferzeit)&lt;br /&gt;
&lt;br /&gt;
===Neue normale Artikel einfügen===&lt;br /&gt;
# Artikelstamm - Einfügen &lt;br /&gt;
# Zusatzdaten pflegen (MHD, MHD-Rest-Vorgabe bei Auslieferung)&lt;br /&gt;
# Artikel als personenbezogenen Artikel bei den gewünschten Kunden hinterlegen&lt;br /&gt;
&lt;br /&gt;
===Neue Spedition definieren===&lt;br /&gt;
# Stammdaten - Weitere Stammdaten - Absatzspediteure - Einfügen&lt;br /&gt;
&lt;br /&gt;
===Neue Speditionslagerartikel definieren===&lt;br /&gt;
# Stammdaten - Weitere Stammdaten - Absatzspediteure - F6&lt;br /&gt;
# Einfügen: Artikel auswählen&lt;br /&gt;
# Kundennamen eingeben, Zusatzeinstellungen vornehmen&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Branchenspezifische_Module&amp;diff=58284</id>
		<title>OBS/Branchenspezifische Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Branchenspezifische_Module&amp;diff=58284"/>
		<updated>2020-09-16T08:02:00Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Branchenspezifische Module}}&lt;br /&gt;
Auf dieser Seite finden Sie die Dokumentation diverser Funktionen, die speziell für bestimmte Kunden oder Branchen entwickelt wurden. Wenn Sie Interesse an einer dieser Funktionalitäten haben, wenden Sie sich an den OBS-Support.&lt;br /&gt;
==Module==&lt;br /&gt;
[[OBS/Branchenspezifische Module/Messeverwaltung]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[[OBS/Branchenspezifische Module/Segel Modul/Segel Stammdaten]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[[OBS/Branchenspezifische Module/Lebensmittelproduktion|Lebensmittelproduktion]]&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Branchenspezifische_Module&amp;diff=58283</id>
		<title>OBS/Branchenspezifische Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Branchenspezifische_Module&amp;diff=58283"/>
		<updated>2020-09-16T08:01:44Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Branchenspezifische Module}}&lt;br /&gt;
Auf dieser Seite finden Sie die Dokumentation diverser Funktionen, die speziell für bestimmte Kunden oder Branchen entwickelt wurden. Wenn Sie Interesse an einer dieser Funktionalitäten haben, wenden Sie sich an den OBS-Support.&lt;br /&gt;
==Module==&lt;br /&gt;
[[OBS/Branchenspezifische Module/Messeverwaltung]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[[OBS/Branchenspezifische Module/Segel Modul/Segel Stammdaten]]&lt;br /&gt;
[[OBS/Branchenspezifische Module/Lebensmittelproduktion|Lebensmittelproduktion]]&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=Datei:Projectmagi.jpg&amp;diff=58222</id>
		<title>Datei:Projectmagi.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=Datei:Projectmagi.jpg&amp;diff=58222"/>
		<updated>2020-09-04T07:43:06Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58069</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize xForms</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58069"/>
		<updated>2020-07-24T09:55:14Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
==Allgemeine Funktionen==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnXCreate&lt;br /&gt;
OnXVisible&lt;br /&gt;
OnXClose&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Form wird als &#039;&#039;&#039;Frm&#039;&#039;&#039; übergeben.&lt;br /&gt;
&lt;br /&gt;
==Spezielle Zusatzaufrufe==&lt;br /&gt;
===Beispiel: Rechnung per Mail/Fax===&lt;br /&gt;
&lt;br /&gt;
Zusatzfunktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnEdInit&lt;br /&gt;
OnEdSave&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdSave():string;&lt;br /&gt;
begin &lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
var oAutoMail         : TxCheckBox;&lt;br /&gt;
    oFaxEMailDrucken  : TxCheckBox;&lt;br /&gt;
    oOldDate          : TxCheckBox;&lt;br /&gt;
begin &lt;br /&gt;
   oAutoMail         := NIL;&lt;br /&gt;
   oFaxEMailDrucken  := NIL; &lt;br /&gt;
   oOldDate          := NIL;&lt;br /&gt;
&lt;br /&gt;
   if (Assigned(FrmEdit)) then begin&lt;br /&gt;
       oAutoMail        := TxCheckBox(Frm.FindComponent(&#039;cb_automail&#039;)); &lt;br /&gt;
       oFaxEMailDrucken := TxCheckBox(Frm.FindComponent(&#039;cb_FaxEMailDrucken&#039;)); &lt;br /&gt;
       oOldDate         := TxCheckBox(Frm.FindComponent(&#039;cb_OldDate&#039;)); &lt;br /&gt;
   end;&lt;br /&gt;
    &lt;br /&gt;
   if (Assigned(oAutoMail)) then begin&lt;br /&gt;
       oAutoMail.checked := True;&lt;br /&gt;
       Meldung(&#039;oAutoMail&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oFaxEMailDrucken)) then begin&lt;br /&gt;
       oFaxEMailDrucken.checked := True;   &lt;br /&gt;
       Meldung(&#039;oFaxEMailDrucken&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oOldDate)) then begin&lt;br /&gt;
       oOldDate.checked := True;   &lt;br /&gt;
       Meldung(&#039;oOldDate&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58068</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize xForms</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58068"/>
		<updated>2020-07-24T09:55:06Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Allgemeine Funktionen==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnXCreate&lt;br /&gt;
OnXVisible&lt;br /&gt;
OnXClose&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Form wird als &#039;&#039;&#039;Frm&#039;&#039;&#039; übergeben.&lt;br /&gt;
&lt;br /&gt;
==Spezielle Zusatzaufrufe==&lt;br /&gt;
===Beispiel: Rechnung per Mail/Fax===&lt;br /&gt;
&lt;br /&gt;
Zusatzfunktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnEdInit&lt;br /&gt;
OnEdSave&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdSave():string;&lt;br /&gt;
begin &lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
var oAutoMail         : TxCheckBox;&lt;br /&gt;
    oFaxEMailDrucken  : TxCheckBox;&lt;br /&gt;
    oOldDate          : TxCheckBox;&lt;br /&gt;
begin &lt;br /&gt;
   oAutoMail         := NIL;&lt;br /&gt;
   oFaxEMailDrucken  := NIL; &lt;br /&gt;
   oOldDate          := NIL;&lt;br /&gt;
&lt;br /&gt;
   if (Assigned(FrmEdit)) then begin&lt;br /&gt;
       oAutoMail        := TxCheckBox(Frm.FindComponent(&#039;cb_automail&#039;)); &lt;br /&gt;
       oFaxEMailDrucken := TxCheckBox(Frm.FindComponent(&#039;cb_FaxEMailDrucken&#039;)); &lt;br /&gt;
       oOldDate         := TxCheckBox(Frm.FindComponent(&#039;cb_OldDate&#039;)); &lt;br /&gt;
   end;&lt;br /&gt;
    &lt;br /&gt;
   if (Assigned(oAutoMail)) then begin&lt;br /&gt;
       oAutoMail.checked := True;&lt;br /&gt;
       Meldung(&#039;oAutoMail&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oFaxEMailDrucken)) then begin&lt;br /&gt;
       oFaxEMailDrucken.checked := True;   &lt;br /&gt;
       Meldung(&#039;oFaxEMailDrucken&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oOldDate)) then begin&lt;br /&gt;
       oOldDate.checked := True;   &lt;br /&gt;
       Meldung(&#039;oOldDate&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58067</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize xForms</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58067"/>
		<updated>2020-07-24T09:19:19Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Beispiel: Rechnung per Mail/Fax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Allgemeine Funktionen==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnXCreate&lt;br /&gt;
OnXVisible&lt;br /&gt;
OnXClose&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Form wird als &#039;&#039;&#039;Frm&#039;&#039;&#039; übergeben.&lt;br /&gt;
&lt;br /&gt;
==Spezielle Zusatzaufrufe==&lt;br /&gt;
===Beispiel: Rechnung per Mail/Fax===&lt;br /&gt;
&lt;br /&gt;
Zusatzfunktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnEdInit&lt;br /&gt;
OnEdSave&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdSave():string;&lt;br /&gt;
begin &lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
var oAutoMail         : TxCheckBox;&lt;br /&gt;
    oFaxEMailDrucken  : TxCheckBox;&lt;br /&gt;
    oOldDate          : TxCheckBox;&lt;br /&gt;
begin &lt;br /&gt;
   oAutoMail         := NIL;&lt;br /&gt;
   oFaxEMailDrucken  := NIL; &lt;br /&gt;
   oOldDate          := NIL;&lt;br /&gt;
&lt;br /&gt;
   if (Assigned(FrmEdit)) then begin&lt;br /&gt;
       oAutoMail        := TxCheckBox(Frm.FindComponent(&#039;cb_automail&#039;)); &lt;br /&gt;
       oFaxEMailDrucken := TxCheckBox(Frm.FindComponent(&#039;cb_FaxEMailDrucken&#039;)); &lt;br /&gt;
       oOldDate         := TxCheckBox(Frm.FindComponent(&#039;cb_OldDate&#039;)); &lt;br /&gt;
   end;&lt;br /&gt;
    &lt;br /&gt;
   if (Assigned(oAutoMail)) then begin&lt;br /&gt;
       oAutoMail.checked := True;&lt;br /&gt;
       Meldung(&#039;oAutoMail&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oFaxEMailDrucken)) then begin&lt;br /&gt;
       oFaxEMailDrucken.checked := True;   &lt;br /&gt;
       Meldung(&#039;oFaxEMailDrucken&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oOldDate)) then begin&lt;br /&gt;
       oOldDate.checked := True;   &lt;br /&gt;
       Meldung(&#039;oOldDate&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58066</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize xForms</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58066"/>
		<updated>2020-07-24T09:18:07Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Beispiel: Rechnung per Mail/Fax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Allgemeine Funktionen==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnXCreate&lt;br /&gt;
OnXVisible&lt;br /&gt;
OnXClose&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Form wird als &#039;&#039;&#039;Frm&#039;&#039;&#039; übergeben.&lt;br /&gt;
&lt;br /&gt;
==Spezielle Zusatzaufrufe==&lt;br /&gt;
===Beispiel: Rechnung per Mail/Fax===&lt;br /&gt;
&lt;br /&gt;
Zusatzfunktionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnEdInit&lt;br /&gt;
OnEdSave&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdSave():string;&lt;br /&gt;
begin &lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
var oAutoMail         : TxCheckBox;&lt;br /&gt;
    oFaxEMailDrucken  : TxCheckBox;&lt;br /&gt;
    oOldDate          : TxCheckBox;&lt;br /&gt;
begin &lt;br /&gt;
   oAutoMail         := NIL;&lt;br /&gt;
   oFaxEMailDrucken  := NIL; &lt;br /&gt;
   oOldDate          := NIL;&lt;br /&gt;
&lt;br /&gt;
   if (Assigned(FrmEdit)) then begin&lt;br /&gt;
       oAutoMail        := TxCheckBox(FrmEdit.FindComponent(&#039;cb_automail&#039;)); &lt;br /&gt;
       oFaxEMailDrucken := TxCheckBox(FrmEdit.FindComponent(&#039;cb_FaxEMailDrucken&#039;)); &lt;br /&gt;
       oOldDate         := TxCheckBox(FrmEdit.FindComponent(&#039;cb_OldDate&#039;)); &lt;br /&gt;
   end;&lt;br /&gt;
    &lt;br /&gt;
   if (Assigned(oAutoMail)) then begin&lt;br /&gt;
       oAutoMail.checked := True;&lt;br /&gt;
       Meldung(&#039;oAutoMail&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oFaxEMailDrucken)) then begin&lt;br /&gt;
       oFaxEMailDrucken.checked := True;   &lt;br /&gt;
       Meldung(&#039;oFaxEMailDrucken&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oOldDate)) then begin&lt;br /&gt;
       oOldDate.checked := True;   &lt;br /&gt;
       Meldung(&#039;oOldDate&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58065</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize xForms</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_xForms&amp;diff=58065"/>
		<updated>2020-07-24T09:17:40Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: Die Seite wurde neu angelegt: „==Allgemeine Funktionen==  &amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt; OnXCreate OnXVisible OnXClose &amp;lt;/syntaxhighlight&amp;gt;  Die Form wird als &amp;#039;&amp;#039;&amp;#039;Frm&amp;#039;&amp;#039;&amp;#039; übergeben.  ==Speziel…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Allgemeine Funktionen==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnXCreate&lt;br /&gt;
OnXVisible&lt;br /&gt;
OnXClose&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Form wird als &#039;&#039;&#039;Frm&#039;&#039;&#039; übergeben.&lt;br /&gt;
&lt;br /&gt;
==Spezielle Zusatzaufrufe==&lt;br /&gt;
===Beispiel: Rechnung per Mail/Fax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
OnEdInit&lt;br /&gt;
OnEdSave&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdSave():string;&lt;br /&gt;
begin &lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
var oAutoMail         : TxCheckBox;&lt;br /&gt;
    oFaxEMailDrucken  : TxCheckBox;&lt;br /&gt;
    oOldDate          : TxCheckBox;&lt;br /&gt;
begin &lt;br /&gt;
   oAutoMail         := NIL;&lt;br /&gt;
   oFaxEMailDrucken  := NIL; &lt;br /&gt;
   oOldDate          := NIL;&lt;br /&gt;
&lt;br /&gt;
   if (Assigned(FrmEdit)) then begin&lt;br /&gt;
       oAutoMail        := TxCheckBox(FrmEdit.FindComponent(&#039;cb_automail&#039;)); &lt;br /&gt;
       oFaxEMailDrucken := TxCheckBox(FrmEdit.FindComponent(&#039;cb_FaxEMailDrucken&#039;)); &lt;br /&gt;
       oOldDate         := TxCheckBox(FrmEdit.FindComponent(&#039;cb_OldDate&#039;)); &lt;br /&gt;
   end;&lt;br /&gt;
    &lt;br /&gt;
   if (Assigned(oAutoMail)) then begin&lt;br /&gt;
       oAutoMail.checked := True;&lt;br /&gt;
       Meldung(&#039;oAutoMail&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oFaxEMailDrucken)) then begin&lt;br /&gt;
       oFaxEMailDrucken.checked := True;   &lt;br /&gt;
       Meldung(&#039;oFaxEMailDrucken&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oOldDate)) then begin&lt;br /&gt;
       oOldDate.checked := True;   &lt;br /&gt;
       Meldung(&#039;oOldDate&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=Vorlage:Makros_und_Scripting&amp;diff=58064</id>
		<title>Vorlage:Makros und Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=Vorlage:Makros_und_Scripting&amp;diff=58064"/>
		<updated>2020-07-24T09:14:45Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-left:2px; padding:0px; background:#FFFFFF; width:19em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:none;margin-top:0pt;padding:0pt;&amp;quot; id=&amp;quot;navigation&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;top:-20pt;color:#000000;background:#ffffff; border: 3pt double #cfcfcf; padding: 5pt; margin: 0pt;margin-bottom:-20pt; z-index:1;border-top-right-radius:7pt;-moz-border-radius-topright:7pt;-webkit-border-top-right-radius:7pt;border-bottom-left-radius:7pt;-moz-border-radius-bottomleft:7pt;-webkit-border-bottom-left-radius:7pt;box-shadow: 3px 3px 4px #c0c0c0;-webkit-box-shadow: 3px 3px 4px #c0c0c0;-moz-box-shadow: 3px 3px 4px #c0c0c0;&amp;quot;&amp;gt;[[Hauptseite|Wiki]] » [[OBS/Makros und Scripting|Makros und Scripting]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Vorlage:Textbox-Blau|1=Makros und Scripting|2=&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros_und_Scripting#Allgemeines|&#039;&#039;&#039;Allgemeines&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Syntax|Syntax]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Funktionen|Übersicht Funktionen]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Prozeduren|Übersicht Prozeduren]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Konstanten|Übersicht Konstanten]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Globale Variablen|Übersicht Globale Variablen]]&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros und Scripting/Allgemeines/Klassen|&#039;&#039;&#039;Klassen&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge|&#039;&#039;&#039;Vorgangsgenerierung&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Angebot|Angebot]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Auftrag|Auftrag]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Reparaturauftrag|Reparaturauftrag]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Produktionsauftrag|Produktionsauftrag]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Lieferschein|Lieferschein]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Rechnung|Rechnung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Bestellung|Bestellung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Einkaufslieferschein|Einkaufslieferschein]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Einkauf|Einkauf]]&lt;br /&gt;
}}&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros und Scripting/Allgemeines/Klassen/Importdatei|&#039;&#039;&#039;Import-Dateien&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Importdatei/TxImportFile|TxImportFile]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Importdatei/TxImportFileCSV|TxImportFileCSV]]&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Script Library|Script Bibliothek]]&lt;br /&gt;
}}&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros_und_Scripting#Anwendungsbereiche|&#039;&#039;&#039;Anwendungsbereiche&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Drucke|Drucke]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Makrodateien|Sonstige Makrodateien]]&lt;br /&gt;
{{Vorlage:Klapptext|kopf=Customizing|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize|Übersicht]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen|Listen]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits|Edits]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen|Select-Listen]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize xForms|Übrige Fenster (xForm)]]&lt;br /&gt;
}}&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Preislisten|Preislisten]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Bildverwaltung|Bildverwaltung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Artikelpflege|Artikelpflege]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Positionserfassung|Positionserfassung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/DataInOut|Data In/Out]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Wiederkehrende Aufgaben|Wiederkehrende Aufgaben]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/OFML-Kalkulation|OFML-Kalkulation]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Zugriff auf externe Datenquellen|Zugriff auf externe Datenquellen (ODBC)]]&lt;br /&gt;
}}&lt;br /&gt;
[[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|Benutzerdefinierte Datenbanktabellen]]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Folgender Code muss in die jeweils gewünschte Seite hinzugefügt werden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Makros und Scripting}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
[[Kategorie:Templates/Navigationen]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=58058</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=58058"/>
		<updated>2020-07-23T07:45:15Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Beispielscript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Eingabemaske==&lt;br /&gt;
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnEdFormInit || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnEdInit || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnEdVorb || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|OnEdShow || OnF4&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF5&lt;br /&gt;
|-&lt;br /&gt;
|OnEdReadDirect || OnF6&lt;br /&gt;
|-&lt;br /&gt;
|OnEdRead || OnF7&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF8&lt;br /&gt;
|-&lt;br /&gt;
|OnEdCheck || OnF9&lt;br /&gt;
|-&lt;br /&gt;
|OnEdqSQL || OnF10&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSaveDirect || OnF11&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSave || OnF12&lt;br /&gt;
|-&lt;br /&gt;
|CheckIfChanged || OnPGDN&lt;br /&gt;
|-&lt;br /&gt;
|OnEdClose || OnPGUP&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
Die hier aufgeführten &#039;&#039;&#039;internen Funktionen&#039;&#039;&#039; sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.&lt;br /&gt;
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039; gegeben werden. Für Tastatur-Funktionen gilt dies nur für &#039;&#039;&#039;OnESC&#039;&#039;&#039;.}}&lt;br /&gt;
==Zugriff auf Komponenten==&lt;br /&gt;
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen &#039;&#039;&#039;xGet&#039;&#039;&#039; (Daten lesen) und &#039;&#039;&#039;xSet&#039;&#039;&#039; (Daten schreiben) verwenden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Auslesen einer Komponente&lt;br /&gt;
cName := FrmEdit.xGet(&#039;a_name&#039;);&lt;br /&gt;
//Setzen einer Komponente&lt;br /&gt;
FrmEdit.xSet(&#039;a_name&#039;,&amp;quot;Meier&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Globale Variablen der Eingabemaske==&lt;br /&gt;
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property&#039;s stehen zu Verfügung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Property !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|lEditMode || True  = Insertmodus False = Editmodus&lt;br /&gt;
|-&lt;br /&gt;
|lDataUpdate || True = Daten des Edits wurden verändert&lt;br /&gt;
|-&lt;br /&gt;
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)&lt;br /&gt;
|-&lt;br /&gt;
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen&lt;br /&gt;
|-&lt;br /&gt;
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf&lt;br /&gt;
|-&lt;br /&gt;
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)&lt;br /&gt;
|}&lt;br /&gt;
==Beispiele Eingabemaske==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aufruf von weiteren Macros innerhalb des Macros===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
var oParams: TStringlist; //Parameter für Aufruf&lt;br /&gt;
begin&lt;br /&gt;
    //Aufruf ohne Parameter&lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;);&lt;br /&gt;
&lt;br /&gt;
    //Aufruf mit Parameter&lt;br /&gt;
    oParams := TStringlist.Create;&lt;br /&gt;
    oParams.Add(&#039;TEST456&#039;);      &lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;, frmEdit, oParams);  &lt;br /&gt;
    MyFreeAndNil(oParams);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingaben prüfen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdCheck():string;&lt;br /&gt;
var oSte     : TEdit;&lt;br /&gt;
    cEdit    : String;&lt;br /&gt;
    cVorname : String;&lt;br /&gt;
begin&lt;br /&gt;
    if (FrmEdit.lEditMode) then begin&lt;br /&gt;
        Meldung(&#039;Edit Mode True&#039;);&lt;br /&gt;
    end else begin&lt;br /&gt;
        Meldung(&#039;Edit Mode False&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
    Meldung(FrmEdit.stred_db_a_name.Text);&lt;br /&gt;
    oSte := FrmEdit.FindComponent(&#039;stred_db_a_name&#039;);&lt;br /&gt;
    Meldung(oSte.Text);&lt;br /&gt;
    cVorname:= FrmEdit.xGet(&#039;a_vorname&#039;);&lt;br /&gt;
    Meldung(cVorname);&lt;br /&gt;
    if (Empty(cVorname)) then begin&lt;br /&gt;
        FrmEdit.lCheckOk := False;&lt;br /&gt;
        Meldung(&#039;Bitte Vorname eingtragen&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Positionen in Vorgängen blockieren===&lt;br /&gt;
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Name: AN_VORGANG_EDIT Function OpenClose&lt;br /&gt;
{{Hinweis| Der Prefix &amp;quot;AN&amp;quot; steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;&lt;br /&gt;
begin&lt;br /&gt;
   //DebugLine(&#039;cVgNr&#039;+cVgNr);&lt;br /&gt;
&lt;br /&gt;
    //02 = Möbel&lt;br /&gt;
    Result := oOBS.cBenutzergruppe &amp;lt;&amp;gt; &#039;02&#039;;  &lt;br /&gt;
    &lt;br /&gt;
    if (Result) then begin  &lt;br /&gt;
        //Wenn Positionen vorhanden dann kein Positions-Edit&lt;br /&gt;
        if (DB_LSeek(oDB,&#039;ANGPOS&#039;,&#039;az_nr=&#039;+DB_SqlVal(cVGNr))) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
                          &lt;br /&gt;
    if (Result) then begin&lt;br /&gt;
                &lt;br /&gt;
        //DebugLine(iif(lInsertMode,&#039;True&#039;,&#039;False&#039;));&lt;br /&gt;
        &lt;br /&gt;
        //Bei nicht Insert immer False&lt;br /&gt;
        if (lInsertMode = False) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==User-Reiter==&lt;br /&gt;
In OBS ab Version 003191 können Edit-Masken per Customizing-Script um eigene Reiter erweitert werden. Diese darin verwalteten Felder können mit [[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|eigenen Datenbankfeldern]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Usertab.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Beispiel-Userdatenbank===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
#DBNAME TODO&lt;br /&gt;
&lt;br /&gt;
  #FELDNAME USER_BEMERK           , C  ,    8 ,  0 , &amp;quot;CCCCCCCC&amp;quot;&lt;br /&gt;
  #FELDNAME USER_WGR              , C ,     3 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
  #FELDNAME USER_TOGGLE           , C ,     1 ,  0 , &amp;quot;C&amp;quot;&lt;br /&gt;
  #FELDNAME USER_BETRAG           , N  ,   11 ,  0 , &amp;quot;NNNNNNNN.NNNN&amp;quot;&lt;br /&gt;
  #FELDNAME USER_DATUM            , D  ,    4 ,  0 , &amp;quot;TT.MM.JJ&amp;quot;&lt;br /&gt;
  #FELDNAME USER_LANGTEXT         , M  , 2000 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Beispielscript===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//------------------------------------------------------------------------------------&lt;br /&gt;
// Reiter Demo&lt;br /&gt;
//------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
type dummy = class     &lt;br /&gt;
    class procedure CBLMail_Enter(Sender: TObject);&lt;br /&gt;
    class procedure OnAngebotsNrChange(Sender: TObject);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
var oCBL : TCombiListe; &lt;br /&gt;
&lt;br /&gt;
//------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function OnEdInit(): String;&lt;br /&gt;
var oTab : TTabSheet;&lt;br /&gt;
    oStr : TStringEdit;  &lt;br /&gt;
    oMed : TMaskEdit;   &lt;br /&gt;
    oLbl : TLabel;   &lt;br /&gt;
    oNEd : TNumericEdit;    &lt;br /&gt;
    oDVE : TDateValEdit;  &lt;br /&gt;
    oChB : TxCheckBox;        &lt;br /&gt;
    oTRE : TTextRichEdit;                                 &lt;br /&gt;
    oCBLAng : TCombiListe;&lt;br /&gt;
begin&lt;br /&gt;
    oTab := frmEdit.AddUserTab();               // Erstellt neuen User-Tab auf dem Edit&lt;br /&gt;
    if assigned(oTab) then begin&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Fahrstuhl vorhanden:&#039;;   &lt;br /&gt;
        oLbl.Top     := 10;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert    &lt;br /&gt;
        &lt;br /&gt;
        oChB         := TxCheckbox.Create(frmEdit);&lt;br /&gt;
        oChB.Name    := &#039;cb_db_user_a_fahrstuhl&#039;;&lt;br /&gt;
        oChB.Caption := &#039;ja&#039;;&lt;br /&gt;
        oChB.TOP     := 10;&lt;br /&gt;
        oChB.Left    := 150;&lt;br /&gt;
        oChB.Parent  := oTab;        &lt;br /&gt;
        &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Geschoss:&#039;;   &lt;br /&gt;
        oLbl.Top     := 40;        &lt;br /&gt;
        oLbl.Left    := 10;       &lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oStr         := TStringEdit.Create(frmEdit);&lt;br /&gt;
        oStr.Name    := &#039;stred_db_user_a_geschoss&#039;;&lt;br /&gt;
        oStr.Top     := 40;&lt;br /&gt;
        oStr.Left    := 150;      &lt;br /&gt;
        oStr.Width   := 20;&lt;br /&gt;
        oStr.Parent  := oTab;      &lt;br /&gt;
        &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;geplante Fahrzeit:&#039;;   &lt;br /&gt;
        oLbl.Top     := 70;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oMed         := TMaskEdit.Create(frmEdit);&lt;br /&gt;
        oMed.Name    := &#039;stred_db_user_a_fahrzeit&#039;;&lt;br /&gt;
        oMed.Caption := &#039;Std.&#039;;&lt;br /&gt;
        oMed.Top     := 70;&lt;br /&gt;
        oMed.Left    := 150;    &lt;br /&gt;
        oMed.Width   := 40;                    &lt;br /&gt;
        oMed.EditMask:= &#039;00:00&#039;;               &lt;br /&gt;
        oMed.Text    := &#039;00:00&#039;;&lt;br /&gt;
        oMed.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;geplante Montagezeit:&#039;;   &lt;br /&gt;
        oLbl.Top     := 100;        &lt;br /&gt;
        oLbl.Left    := 10;     &lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oMed         := TMaskEdit.Create(frmEdit);&lt;br /&gt;
        oMed.Name    := &#039;stred_db_user_a_montagezeit&#039;;&lt;br /&gt;
        oMed.Caption := &#039;Std.&#039;;&lt;br /&gt;
        oMed.Top     := 100;&lt;br /&gt;
        oMed.Left    := 150;&lt;br /&gt;
        oMed.Width   := 40;&lt;br /&gt;
        oMed.EditMask:= &#039;00:00&#039;;&lt;br /&gt;
        oMed.Text    := &#039;00:00&#039;;&lt;br /&gt;
        oMed.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Anzahl Monteure:&#039;;   &lt;br /&gt;
        oLbl.Top     := 130;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
    &lt;br /&gt;
        oStr         := TStringEdit.Create(frmEdit);&lt;br /&gt;
        oStr.Name    := &#039;stred_db_user_a_anzahl_monteure&#039;;&lt;br /&gt;
        oStr.Top     := 130;&lt;br /&gt;
        oStr.Left    := 150;&lt;br /&gt;
        oStr.Width   := 20;&lt;br /&gt;
        oStr.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Wiedervorlage:&#039;;   &lt;br /&gt;
        oLbl.Top     := 160;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
    &lt;br /&gt;
        oChB         := TxCheckbox.Create(frmEdit);&lt;br /&gt;
        oChB.Name    := &#039;cb_db_user_a_wiedervorlage&#039;;&lt;br /&gt;
        oChB.Caption := &#039;ja&#039;;&lt;br /&gt;
        oChB.TOP     := 160;&lt;br /&gt;
        oChB.Left    := 150;&lt;br /&gt;
        oChB.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;EMail für AB:&#039;;   &lt;br /&gt;
        oLbl.Top     := 190;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oCBL         := FrmEdit.AddCombiliste();&lt;br /&gt;
        oCBL.Name    := &#039;cbl_db_user_a_email&#039;;&lt;br /&gt;
        oCBL.Top     := 190;&lt;br /&gt;
        oCBL.Left    := 130;&lt;br /&gt;
        oCBL.Width   := 200;&lt;br /&gt;
        oCBL.Parent  := oTab;                   &lt;br /&gt;
        oCBL.TextModus := true;  &lt;br /&gt;
        InitCBLMail();           &lt;br /&gt;
        oCBL.OnEnter := dummy.CBLMail_Enter;  &lt;br /&gt;
        &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Sonstige Bemerkungen:&#039;;   &lt;br /&gt;
        oLbl.Top     := 220;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oTRE         := TTextRichEdit.Create(frmEdit);&lt;br /&gt;
        oTRE.Name    := &#039;riced_db_user_a_memo&#039;;&lt;br /&gt;
        oTRE.Top     := 240;&lt;br /&gt;
        oTRE.Left    := 10;&lt;br /&gt;
        oTRE.Height  := 200;&lt;br /&gt;
        oTRE.Width   := 600;   &lt;br /&gt;
        oTRE.RulerH  := false; &lt;br /&gt;
        oTRE.Parent  := oTab;                  &lt;br /&gt;
        &lt;br /&gt;
        oCBLAng := TCombiListe(FrmEdit.Findcomponent(&#039;cbl_db_a_angnr&#039;));&lt;br /&gt;
        if (assigned(oCBLAng)) then begin&lt;br /&gt;
           oCBLAng.OnExit := dummy.OnAngebotsNrChange;&lt;br /&gt;
        end;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    end;    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
procedure InitCBLMail();&lt;br /&gt;
begin&lt;br /&gt;
    oCBL.GetSuLi.Tablename    := &#039;ANSP&#039;;&lt;br /&gt;
    oCBL.GetSuLi.CompareField := &#039;AP_EMAIL&#039;;&lt;br /&gt;
    oCBL.GetSuLi.Caption      := ML(&#039;EMail-Adresse&#039;);&lt;br /&gt;
    oCBL.GetSuli.SQLOrder     := &#039;ap_name&#039;;&lt;br /&gt;
    oCBL.GetSuli.SQLWhere     := &#039;ap_email&amp;gt;&amp;quot;&amp;quot; and ap_pnr=&#039;+DB_SQLVal(FrmEdit.xGet(&#039;a_knr&#039;));&lt;br /&gt;
    //oCBL.GetSuli.SQLWhere     := &#039;ap_email&amp;gt;&amp;quot;&amp;quot; and ap_pnr=&#039;+DB_SQLVal(&#039;1200005&#039;);&lt;br /&gt;
    oCBL.GetSuli.Width        := 600;&lt;br /&gt;
    oCBL.GetSuli.Height       := 300;&lt;br /&gt;
    oCBL.GetSuli.InitColumn(&#039;Vorname&#039;, &#039;ap_vorname&#039;, 15,nil,&#039;&#039;,System.Classes.Talignment.taLeftJustify);&lt;br /&gt;
    oCBL.GetSuli.AddColumn (&#039;Name&#039;, &#039;ap_name&#039;, 20,nil,&#039;&#039;,System.Classes.Talignment.taLeftJustify);&lt;br /&gt;
    oCBL.GetSuli.AddColumn (&#039;EMail&#039;, &#039;ap_email&#039;, 40,nil,&#039;&#039;,System.Classes.Talignment.taLeftJustify);                &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
class procedure dummy.CBLMail_Enter(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
    InitCBLMail();&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
class procedure dummy.OnAngebotsNrChange(Sender: TObject);&lt;br /&gt;
var cAngebot : String;&lt;br /&gt;
    cBuffer  : String;          &lt;br /&gt;
    cWhere   : String;&lt;br /&gt;
begin&lt;br /&gt;
    cAngebot := FrmEdit.xGet(&#039;a_angnr&#039;);&lt;br /&gt;
    cWhere   := &#039;a_nr=&#039;+DB_SQLVal(cAngebot); &lt;br /&gt;
    cBuffer  := DB_ReadSQLValue(oDB,&#039;auftrag&#039;,&#039;a_angnr&#039;,cWhere);     &lt;br /&gt;
    &lt;br /&gt;
    Debugline (cBuffer);                     &lt;br /&gt;
    if (cAngebot &amp;lt;&amp;gt; cBuffer) and FrmEdit.lEditMode then begin            &lt;br /&gt;
            cBuffer := DB_ReadSQLValue(oDB,&#039;angebot&#039;,&#039;user_a_fahrstuhl&#039;,cWhere);          &lt;br /&gt;
            FrmEdit.xSet(&#039;user_a_fahrstuhl&#039;,cBuffer);&lt;br /&gt;
                    &lt;br /&gt;
            cBuffer := DB_ReadSQLValue(oDB,&#039;angebot&#039;,&#039;user_a_geschoss&#039;,cWhere);          &lt;br /&gt;
            FrmEdit.xSet(&#039;user_a_geschoss&#039;,cBuffer);&lt;br /&gt;
                    &lt;br /&gt;
            cBuffer := DB_ReadSQLValue(oDB,&#039;angebot&#039;,&#039;user_a_fahrzeit&#039;,cWhere);          &lt;br /&gt;
            FrmEdit.xSet(&#039;user_a_fahrzeit&#039;,cBuffer);&lt;br /&gt;
                    &lt;br /&gt;
            cBuffer := DB_ReadSQLValue(oDB,&#039;angebot&#039;,&#039;user_a_montagezeit&#039;,cWhere);          &lt;br /&gt;
            FrmEdit.xSet(&#039;user_a_montagezeit&#039;,cBuffer);&lt;br /&gt;
                    &lt;br /&gt;
            cBuffer := DB_ReadSQLValue(oDB,&#039;angebot&#039;,&#039;user_a_anzahl_monteure&#039;,cWhere);          &lt;br /&gt;
            FrmEdit.xSet(&#039;user_a_anzahl_monteure&#039;,cBuffer);&lt;br /&gt;
        &lt;br /&gt;
            cBuffer := DB_ReadSQLValue(oDB,&#039;angebot&#039;,&#039;user_a_email&#039;,cWhere);          &lt;br /&gt;
            FrmEdit.xSet(&#039;user_a_email&#039;,cBuffer);&lt;br /&gt;
            &lt;br /&gt;
            cBuffer := DB_ReadSQLValue(oDB,&#039;angebot&#039;,&#039;user_a_wiedervorlage&#039;,cWhere);          &lt;br /&gt;
            FrmEdit.xSet(&#039;user_a_wiedervorlage&#039;,cBuffer);&lt;br /&gt;
                    &lt;br /&gt;
            cBuffer := DB_ReadSQLValue(oDB,&#039;angebot&#039;,&#039;user_a_memo&#039;,cWhere);          &lt;br /&gt;
            FrmEdit.xSet(&#039;user_a_memo&#039;,cBuffer);&lt;br /&gt;
        &lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
{function OnEdRead():String&lt;br /&gt;
begin&lt;br /&gt;
    if (FrmEdit.xGet(&#039;user_a_wiedervorlage&#039;)=&#039;1&#039;) then begin&lt;br /&gt;
        Meldung(frmEdit.xGet(&#039;user_a_memo&#039;));&lt;br /&gt;
    end;&lt;br /&gt;
end;}&lt;br /&gt;
//----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Rechnung per Mail/Fax==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdSave():string;&lt;br /&gt;
begin &lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
var oAutoMail         : TxCheckBox;&lt;br /&gt;
    oFaxEMailDrucken  : TxCheckBox;&lt;br /&gt;
    oOldDate          : TxCheckBox;&lt;br /&gt;
begin &lt;br /&gt;
   oAutoMail         := NIL;&lt;br /&gt;
   oFaxEMailDrucken  := NIL; &lt;br /&gt;
   oOldDate          := NIL;&lt;br /&gt;
&lt;br /&gt;
   if (Assigned(FrmEdit)) then begin&lt;br /&gt;
       oAutoMail        := TxCheckBox(FrmEdit.FindComponent(&#039;cb_automail&#039;)); &lt;br /&gt;
       oFaxEMailDrucken := TxCheckBox(FrmEdit.FindComponent(&#039;cb_FaxEMailDrucken&#039;)); &lt;br /&gt;
       oOldDate         := TxCheckBox(FrmEdit.FindComponent(&#039;cb_OldDate&#039;)); &lt;br /&gt;
   end;&lt;br /&gt;
    &lt;br /&gt;
   if (Assigned(oAutoMail)) then begin&lt;br /&gt;
       oAutoMail.checked := True;&lt;br /&gt;
       Meldung(&#039;oAutoMail&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oFaxEMailDrucken)) then begin&lt;br /&gt;
       oFaxEMailDrucken.checked := True;   &lt;br /&gt;
       Meldung(&#039;oFaxEMailDrucken&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oOldDate)) then begin&lt;br /&gt;
       oOldDate.checked := True;   &lt;br /&gt;
       Meldung(&#039;oOldDate&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Besonderheiten==&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=58057</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=58057"/>
		<updated>2020-07-22T14:18:05Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Eingabemaske==&lt;br /&gt;
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnEdFormInit || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnEdInit || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnEdVorb || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|OnEdShow || OnF4&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF5&lt;br /&gt;
|-&lt;br /&gt;
|OnEdReadDirect || OnF6&lt;br /&gt;
|-&lt;br /&gt;
|OnEdRead || OnF7&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF8&lt;br /&gt;
|-&lt;br /&gt;
|OnEdCheck || OnF9&lt;br /&gt;
|-&lt;br /&gt;
|OnEdqSQL || OnF10&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSaveDirect || OnF11&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSave || OnF12&lt;br /&gt;
|-&lt;br /&gt;
|CheckIfChanged || OnPGDN&lt;br /&gt;
|-&lt;br /&gt;
|OnEdClose || OnPGUP&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
Die hier aufgeführten &#039;&#039;&#039;internen Funktionen&#039;&#039;&#039; sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.&lt;br /&gt;
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039; gegeben werden. Für Tastatur-Funktionen gilt dies nur für &#039;&#039;&#039;OnESC&#039;&#039;&#039;.}}&lt;br /&gt;
==Zugriff auf Komponenten==&lt;br /&gt;
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen &#039;&#039;&#039;xGet&#039;&#039;&#039; (Daten lesen) und &#039;&#039;&#039;xSet&#039;&#039;&#039; (Daten schreiben) verwenden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Auslesen einer Komponente&lt;br /&gt;
cName := FrmEdit.xGet(&#039;a_name&#039;);&lt;br /&gt;
//Setzen einer Komponente&lt;br /&gt;
FrmEdit.xSet(&#039;a_name&#039;,&amp;quot;Meier&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Globale Variablen der Eingabemaske==&lt;br /&gt;
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property&#039;s stehen zu Verfügung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Property !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|lEditMode || True  = Insertmodus False = Editmodus&lt;br /&gt;
|-&lt;br /&gt;
|lDataUpdate || True = Daten des Edits wurden verändert&lt;br /&gt;
|-&lt;br /&gt;
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)&lt;br /&gt;
|-&lt;br /&gt;
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen&lt;br /&gt;
|-&lt;br /&gt;
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf&lt;br /&gt;
|-&lt;br /&gt;
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)&lt;br /&gt;
|}&lt;br /&gt;
==Beispiele Eingabemaske==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aufruf von weiteren Macros innerhalb des Macros===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
var oParams: TStringlist; //Parameter für Aufruf&lt;br /&gt;
begin&lt;br /&gt;
    //Aufruf ohne Parameter&lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;);&lt;br /&gt;
&lt;br /&gt;
    //Aufruf mit Parameter&lt;br /&gt;
    oParams := TStringlist.Create;&lt;br /&gt;
    oParams.Add(&#039;TEST456&#039;);      &lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;, frmEdit, oParams);  &lt;br /&gt;
    MyFreeAndNil(oParams);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingaben prüfen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdCheck():string;&lt;br /&gt;
var oSte     : TEdit;&lt;br /&gt;
    cEdit    : String;&lt;br /&gt;
    cVorname : String;&lt;br /&gt;
begin&lt;br /&gt;
    if (FrmEdit.lEditMode) then begin&lt;br /&gt;
        Meldung(&#039;Edit Mode True&#039;);&lt;br /&gt;
    end else begin&lt;br /&gt;
        Meldung(&#039;Edit Mode False&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
    Meldung(FrmEdit.stred_db_a_name.Text);&lt;br /&gt;
    oSte := FrmEdit.FindComponent(&#039;stred_db_a_name&#039;);&lt;br /&gt;
    Meldung(oSte.Text);&lt;br /&gt;
    cVorname:= FrmEdit.xGet(&#039;a_vorname&#039;);&lt;br /&gt;
    Meldung(cVorname);&lt;br /&gt;
    if (Empty(cVorname)) then begin&lt;br /&gt;
        FrmEdit.lCheckOk := False;&lt;br /&gt;
        Meldung(&#039;Bitte Vorname eingtragen&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Positionen in Vorgängen blockieren===&lt;br /&gt;
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Name: AN_VORGANG_EDIT Function OpenClose&lt;br /&gt;
{{Hinweis| Der Prefix &amp;quot;AN&amp;quot; steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;&lt;br /&gt;
begin&lt;br /&gt;
   //DebugLine(&#039;cVgNr&#039;+cVgNr);&lt;br /&gt;
&lt;br /&gt;
    //02 = Möbel&lt;br /&gt;
    Result := oOBS.cBenutzergruppe &amp;lt;&amp;gt; &#039;02&#039;;  &lt;br /&gt;
    &lt;br /&gt;
    if (Result) then begin  &lt;br /&gt;
        //Wenn Positionen vorhanden dann kein Positions-Edit&lt;br /&gt;
        if (DB_LSeek(oDB,&#039;ANGPOS&#039;,&#039;az_nr=&#039;+DB_SqlVal(cVGNr))) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
                          &lt;br /&gt;
    if (Result) then begin&lt;br /&gt;
                &lt;br /&gt;
        //DebugLine(iif(lInsertMode,&#039;True&#039;,&#039;False&#039;));&lt;br /&gt;
        &lt;br /&gt;
        //Bei nicht Insert immer False&lt;br /&gt;
        if (lInsertMode = False) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==User-Reiter==&lt;br /&gt;
In OBS ab Version 003191 können Edit-Masken per Customizing-Script um eigene Reiter erweitert werden. Diese darin verwalteten Felder können mit [[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|eigenen Datenbankfeldern]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Usertab.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Beispiel-Userdatenbank===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
#DBNAME TODO&lt;br /&gt;
&lt;br /&gt;
  #FELDNAME USER_BEMERK           , C  ,    8 ,  0 , &amp;quot;CCCCCCCC&amp;quot;&lt;br /&gt;
  #FELDNAME USER_WGR              , C ,     3 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
  #FELDNAME USER_TOGGLE           , C ,     1 ,  0 , &amp;quot;C&amp;quot;&lt;br /&gt;
  #FELDNAME USER_BETRAG           , N  ,   11 ,  0 , &amp;quot;NNNNNNNN.NNNN&amp;quot;&lt;br /&gt;
  #FELDNAME USER_DATUM            , D  ,    4 ,  0 , &amp;quot;TT.MM.JJ&amp;quot;&lt;br /&gt;
  #FELDNAME USER_LANGTEXT         , M  , 2000 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Beispielscript===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit(): String;&lt;br /&gt;
var oTab : TTabSheet;&lt;br /&gt;
    oStr : TStringEdit;     &lt;br /&gt;
    oLbl : TLabel;   &lt;br /&gt;
    oNEd : TNumericEdit;    &lt;br /&gt;
    oDVE : TDateValEdit;  &lt;br /&gt;
    oChB : TxCheckBox;   &lt;br /&gt;
    oCBL : TCombiListe;      &lt;br /&gt;
    oTRE : TTextRichEdit;&lt;br /&gt;
begin&lt;br /&gt;
    oTab := frmEdit.AddUserTab();               // Erstellt neuen User-Tab auf dem Edit&lt;br /&gt;
    if assigned(oTab) then begin&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Textzeile:&#039;;   &lt;br /&gt;
        oLbl.Top     := 10;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oStr         := TStringEdit.Create(frmEdit);&lt;br /&gt;
        oStr.Name    := &#039;stred_db_user_bemerk&#039;; // Damit automatisches Speichern/Laden von Datenbankfeldern funktioniert, muss im Komponentennamen &#039;_db_&#039; und der Feldname stehen.&lt;br /&gt;
        oStr.Top     := 10;        &lt;br /&gt;
        oStr.Left    := 130;&lt;br /&gt;
        oStr.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Summe:&#039;;   &lt;br /&gt;
        oLbl.Top     := 40;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oNEd         := TNumericEdit.Create(frmEdit);&lt;br /&gt;
        oNEd.Name    := &#039;numed_db_user_betrag&#039;;&lt;br /&gt;
        oNEd.Top     := 40;        &lt;br /&gt;
        oNEd.Left    := 130;&lt;br /&gt;
        oNEd.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Datum:&#039;;   &lt;br /&gt;
        oLbl.Top     := 70;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oDVE         := TDateValEdit.Create(frmEdit);&lt;br /&gt;
        oDVE.Name    := &#039;datev_db_user_datum&#039;;&lt;br /&gt;
        oDVE.Top     := 70;        &lt;br /&gt;
        oDVE.Left    := 130;&lt;br /&gt;
        oDVE.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Schalter:&#039;;   &lt;br /&gt;
        oLbl.Top     := 100;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oChB         := TxCheckBox.Create(frmEdit);&lt;br /&gt;
        oChB.Name    := &#039;cb_db_user_toggle&#039;;   &lt;br /&gt;
        oChB.Caption := &#039;Schalter&#039;;&lt;br /&gt;
        oChB.Top     := 100;        &lt;br /&gt;
        oChB.Left    := 130;&lt;br /&gt;
        oChB.Parent  := oTab;  &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------      &lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Suchliste:&#039;;   &lt;br /&gt;
        oLbl.Top     := 130;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
             &lt;br /&gt;
        oCBL         := FrmEdit.AddCombiliste();   &lt;br /&gt;
        oCBL.Name    := &#039;cbl_db_user_wgr&#039;;    &lt;br /&gt;
        oCBL.Top     := 130;                &lt;br /&gt;
        oCBL.Left    := 130;            &lt;br /&gt;
        oCBL.Parent  := oTab;    &lt;br /&gt;
                                      &lt;br /&gt;
        oCBL.GetSuli.Tablename         := &#039;WARENGR&#039;;          // Verknüpfte Tabelle  &lt;br /&gt;
        oCBL.GetSuli.CompareField      := &#039;wg_nr&#039;;            // Feld mit eindeutiger ID zur Zuordnung&lt;br /&gt;
        oCBL.GetSuli.ShowField         := &#039;wg_name&#039;;          // Feld, das als Bezeichnung in der Kombiliste angezeigt wird&lt;br /&gt;
        oCBL.GetSuli.Caption           := ML(&#039;Warengruppe&#039;);  // Fenstertitel der Suchliste, die sich beim Klick auf # öffnet&lt;br /&gt;
        oCBL.GetSuli.SQLOrder          := &#039;wg_nr&#039;;            // Feld, nach dem die Suchliste sortiert werden soll&lt;br /&gt;
        oCBL.GetSuli.SQlWhere          := &#039;&#039;;                 // Filter für Daten in der Suchliste, z. bsp. &#039;az_nr like &amp;quot;5%&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
        oCBL.GetSuli.Width             := 500;                // Weite des Suchlistenfensters &lt;br /&gt;
        oCBL.GetSuli.Height            := 400;                // Höhe des Suchlistenfensters&lt;br /&gt;
              &lt;br /&gt;
        oCBL.GetSuli.InitColumn(&#039;Nr&#039;,  &#039;wg_nr&#039;,   30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
        oCBL.GetSuli.AddColumn(&#039;Name&#039;, &#039;wg_name&#039;, 30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
&lt;br /&gt;
        // Die erste Spalte der Suchliste muss mit InitColumn erstellt werden, alle weiteren mit AddColumn.&lt;br /&gt;
        // Parameter:&lt;br /&gt;
&lt;br /&gt;
        // Anzeigename        : String, &lt;br /&gt;
        // Feldname           : String, &lt;br /&gt;
        // relative_Breite    : Integer, &lt;br /&gt;
        // Anzeigefunktion    : Function of String, vorerst immer nil, &lt;br /&gt;
        // Anzeigenmaskierung : String = &#039;&#039;, Beispiel: &#039;##9,99&#039;: Es werden immer eine Vorkommastelle und immer zwei Nachkommastellen angezeigt, und optional zwei zusätzliche Vorkommastellen, wenn vorhanden.&lt;br /&gt;
        // Ausrichtung        : System.Classes.TAlignment.[taLeftJustify, taRightJustify, taCenter]&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
        oTRE         := TTextRichEdit.Create(frmEdit);&lt;br /&gt;
        oTRE.Name    := &#039;riced_db_user_langtext&#039;;&lt;br /&gt;
        oTRE.Top     := 170;&lt;br /&gt;
        oTRE.Left    := 10;&lt;br /&gt;
        oTRE.Height  := 300;&lt;br /&gt;
        oTRE.Width   := 400;   &lt;br /&gt;
        oTRE.RulerH  := false; &lt;br /&gt;
        oTRE.Parent  := oTab;        &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    end;    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Beispiel: Rechnung per Mail/Fax==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdSave():string;&lt;br /&gt;
begin &lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
var oAutoMail         : TxCheckBox;&lt;br /&gt;
    oFaxEMailDrucken  : TxCheckBox;&lt;br /&gt;
    oOldDate          : TxCheckBox;&lt;br /&gt;
begin &lt;br /&gt;
   oAutoMail         := NIL;&lt;br /&gt;
   oFaxEMailDrucken  := NIL; &lt;br /&gt;
   oOldDate          := NIL;&lt;br /&gt;
&lt;br /&gt;
   if (Assigned(FrmEdit)) then begin&lt;br /&gt;
       oAutoMail        := TxCheckBox(FrmEdit.FindComponent(&#039;cb_automail&#039;)); &lt;br /&gt;
       oFaxEMailDrucken := TxCheckBox(FrmEdit.FindComponent(&#039;cb_FaxEMailDrucken&#039;)); &lt;br /&gt;
       oOldDate         := TxCheckBox(FrmEdit.FindComponent(&#039;cb_OldDate&#039;)); &lt;br /&gt;
   end;&lt;br /&gt;
    &lt;br /&gt;
   if (Assigned(oAutoMail)) then begin&lt;br /&gt;
       oAutoMail.checked := True;&lt;br /&gt;
       Meldung(&#039;oAutoMail&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oFaxEMailDrucken)) then begin&lt;br /&gt;
       oFaxEMailDrucken.checked := True;   &lt;br /&gt;
       Meldung(&#039;oFaxEMailDrucken&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oOldDate)) then begin&lt;br /&gt;
       oOldDate.checked := True;   &lt;br /&gt;
       Meldung(&#039;oOldDate&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Besonderheiten==&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=58056</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=58056"/>
		<updated>2020-07-22T14:17:41Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Eingabemaske==&lt;br /&gt;
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnEdFormInit || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnEdInit || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnEdVorb || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|OnEdShow || OnF4&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF5&lt;br /&gt;
|-&lt;br /&gt;
|OnEdReadDirect || OnF6&lt;br /&gt;
|-&lt;br /&gt;
|OnEdRead || OnF7&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF8&lt;br /&gt;
|-&lt;br /&gt;
|OnEdCheck || OnF9&lt;br /&gt;
|-&lt;br /&gt;
|OnEdqSQL || OnF10&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSaveDirect || OnF11&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSave || OnF12&lt;br /&gt;
|-&lt;br /&gt;
|CheckIfChanged || OnPGDN&lt;br /&gt;
|-&lt;br /&gt;
|OnEdClose || OnPGUP&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
Die hier aufgeführten &#039;&#039;&#039;internen Funktionen&#039;&#039;&#039; sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.&lt;br /&gt;
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039; gegeben werden. Für Tastatur-Funktionen gilt dies nur für &#039;&#039;&#039;OnESC&#039;&#039;&#039;.}}&lt;br /&gt;
==Zugriff auf Komponenten==&lt;br /&gt;
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen &#039;&#039;&#039;xGet&#039;&#039;&#039; (Daten lesen) und &#039;&#039;&#039;xSet&#039;&#039;&#039; (Daten schreiben) verwenden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Auslesen einer Komponente&lt;br /&gt;
cName := FrmEdit.xGet(&#039;a_name&#039;);&lt;br /&gt;
//Setzen einer Komponente&lt;br /&gt;
FrmEdit.xSet(&#039;a_name&#039;,&amp;quot;Meier&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Globale Variablen der Eingabemaske==&lt;br /&gt;
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property&#039;s stehen zu Verfügung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Property !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|lEditMode || True  = Insertmodus False = Editmodus&lt;br /&gt;
|-&lt;br /&gt;
|lDataUpdate || True = Daten des Edits wurden verändert&lt;br /&gt;
|-&lt;br /&gt;
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)&lt;br /&gt;
|-&lt;br /&gt;
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen&lt;br /&gt;
|-&lt;br /&gt;
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf&lt;br /&gt;
|-&lt;br /&gt;
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)&lt;br /&gt;
|}&lt;br /&gt;
==Beispiele Eingabemaske==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aufruf von weiteren Macros innerhalb des Macros===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
var oParams: TStringlist; //Parameter für Aufruf&lt;br /&gt;
begin&lt;br /&gt;
    //Aufruf ohne Parameter&lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;);&lt;br /&gt;
&lt;br /&gt;
    //Aufruf mit Parameter&lt;br /&gt;
    oParams := TStringlist.Create;&lt;br /&gt;
    oParams.Add(&#039;TEST456&#039;);      &lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;, frmEdit, oParams);  &lt;br /&gt;
    MyFreeAndNil(oParams);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingaben prüfen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdCheck():string;&lt;br /&gt;
var oSte     : TEdit;&lt;br /&gt;
    cEdit    : String;&lt;br /&gt;
    cVorname : String;&lt;br /&gt;
begin&lt;br /&gt;
    if (FrmEdit.lEditMode) then begin&lt;br /&gt;
        Meldung(&#039;Edit Mode True&#039;);&lt;br /&gt;
    end else begin&lt;br /&gt;
        Meldung(&#039;Edit Mode False&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
    Meldung(FrmEdit.stred_db_a_name.Text);&lt;br /&gt;
    oSte := FrmEdit.FindComponent(&#039;stred_db_a_name&#039;);&lt;br /&gt;
    Meldung(oSte.Text);&lt;br /&gt;
    cVorname:= FrmEdit.xGet(&#039;a_vorname&#039;);&lt;br /&gt;
    Meldung(cVorname);&lt;br /&gt;
    if (Empty(cVorname)) then begin&lt;br /&gt;
        FrmEdit.lCheckOk := False;&lt;br /&gt;
        Meldung(&#039;Bitte Vorname eingtragen&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Positionen in Vorgängen blockieren===&lt;br /&gt;
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Name: AN_VORGANG_EDIT Function OpenClose&lt;br /&gt;
{{Hinweis| Der Prefix &amp;quot;AN&amp;quot; steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;&lt;br /&gt;
begin&lt;br /&gt;
   //DebugLine(&#039;cVgNr&#039;+cVgNr);&lt;br /&gt;
&lt;br /&gt;
    //02 = Möbel&lt;br /&gt;
    Result := oOBS.cBenutzergruppe &amp;lt;&amp;gt; &#039;02&#039;;  &lt;br /&gt;
    &lt;br /&gt;
    if (Result) then begin  &lt;br /&gt;
        //Wenn Positionen vorhanden dann kein Positions-Edit&lt;br /&gt;
        if (DB_LSeek(oDB,&#039;ANGPOS&#039;,&#039;az_nr=&#039;+DB_SqlVal(cVGNr))) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
                          &lt;br /&gt;
    if (Result) then begin&lt;br /&gt;
                &lt;br /&gt;
        //DebugLine(iif(lInsertMode,&#039;True&#039;,&#039;False&#039;));&lt;br /&gt;
        &lt;br /&gt;
        //Bei nicht Insert immer False&lt;br /&gt;
        if (lInsertMode = False) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==User-Reiter==&lt;br /&gt;
In OBS ab Version 003191 können Edit-Masken per Customizing-Script um eigene Reiter erweitert werden. Diese darin verwalteten Felder können mit [[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|eigenen Datenbankfeldern]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Usertab.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Beispiel-Userdatenbank===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
#DBNAME TODO&lt;br /&gt;
&lt;br /&gt;
  #FELDNAME USER_BEMERK           , C  ,    8 ,  0 , &amp;quot;CCCCCCCC&amp;quot;&lt;br /&gt;
  #FELDNAME USER_WGR              , C ,     3 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
  #FELDNAME USER_TOGGLE           , C ,     1 ,  0 , &amp;quot;C&amp;quot;&lt;br /&gt;
  #FELDNAME USER_BETRAG           , N  ,   11 ,  0 , &amp;quot;NNNNNNNN.NNNN&amp;quot;&lt;br /&gt;
  #FELDNAME USER_DATUM            , D  ,    4 ,  0 , &amp;quot;TT.MM.JJ&amp;quot;&lt;br /&gt;
  #FELDNAME USER_LANGTEXT         , M  , 2000 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Beispielscript===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit(): String;&lt;br /&gt;
var oTab : TTabSheet;&lt;br /&gt;
    oStr : TStringEdit;     &lt;br /&gt;
    oLbl : TLabel;   &lt;br /&gt;
    oNEd : TNumericEdit;    &lt;br /&gt;
    oDVE : TDateValEdit;  &lt;br /&gt;
    oChB : TxCheckBox;   &lt;br /&gt;
    oCBL : TCombiListe;      &lt;br /&gt;
    oTRE : TTextRichEdit;&lt;br /&gt;
begin&lt;br /&gt;
    oTab := frmEdit.AddUserTab();               // Erstellt neuen User-Tab auf dem Edit&lt;br /&gt;
    if assigned(oTab) then begin&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Textzeile:&#039;;   &lt;br /&gt;
        oLbl.Top     := 10;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oStr         := TStringEdit.Create(frmEdit);&lt;br /&gt;
        oStr.Name    := &#039;stred_db_user_bemerk&#039;; // Damit automatisches Speichern/Laden von Datenbankfeldern funktioniert, muss im Komponentennamen &#039;_db_&#039; und der Feldname stehen.&lt;br /&gt;
        oStr.Top     := 10;        &lt;br /&gt;
        oStr.Left    := 130;&lt;br /&gt;
        oStr.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Summe:&#039;;   &lt;br /&gt;
        oLbl.Top     := 40;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oNEd         := TNumericEdit.Create(frmEdit);&lt;br /&gt;
        oNEd.Name    := &#039;numed_db_user_betrag&#039;;&lt;br /&gt;
        oNEd.Top     := 40;        &lt;br /&gt;
        oNEd.Left    := 130;&lt;br /&gt;
        oNEd.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Datum:&#039;;   &lt;br /&gt;
        oLbl.Top     := 70;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oDVE         := TDateValEdit.Create(frmEdit);&lt;br /&gt;
        oDVE.Name    := &#039;datev_db_user_datum&#039;;&lt;br /&gt;
        oDVE.Top     := 70;        &lt;br /&gt;
        oDVE.Left    := 130;&lt;br /&gt;
        oDVE.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Schalter:&#039;;   &lt;br /&gt;
        oLbl.Top     := 100;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oChB         := TxCheckBox.Create(frmEdit);&lt;br /&gt;
        oChB.Name    := &#039;cb_db_user_toggle&#039;;   &lt;br /&gt;
        oChB.Caption := &#039;Schalter&#039;;&lt;br /&gt;
        oChB.Top     := 100;        &lt;br /&gt;
        oChB.Left    := 130;&lt;br /&gt;
        oChB.Parent  := oTab;  &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------      &lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Suchliste:&#039;;   &lt;br /&gt;
        oLbl.Top     := 130;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
             &lt;br /&gt;
        oCBL         := FrmEdit.AddCombiliste();   &lt;br /&gt;
        oCBL.Name    := &#039;cbl_db_user_wgr&#039;;    &lt;br /&gt;
        oCBL.Top     := 130;                &lt;br /&gt;
        oCBL.Left    := 130;            &lt;br /&gt;
        oCBL.Parent  := oTab;    &lt;br /&gt;
                                      &lt;br /&gt;
        oCBL.GetSuli.Tablename         := &#039;WARENGR&#039;;          // Verknüpfte Tabelle  &lt;br /&gt;
        oCBL.GetSuli.CompareField      := &#039;wg_nr&#039;;            // Feld mit eindeutiger ID zur Zuordnung&lt;br /&gt;
        oCBL.GetSuli.ShowField         := &#039;wg_name&#039;;          // Feld, das als Bezeichnung in der Kombiliste angezeigt wird&lt;br /&gt;
        oCBL.GetSuli.Caption           := ML(&#039;Warengruppe&#039;);  // Fenstertitel der Suchliste, die sich beim Klick auf # öffnet&lt;br /&gt;
        oCBL.GetSuli.SQLOrder          := &#039;wg_nr&#039;;            // Feld, nach dem die Suchliste sortiert werden soll&lt;br /&gt;
        oCBL.GetSuli.SQlWhere          := &#039;&#039;;                 // Filter für Daten in der Suchliste, z. bsp. &#039;az_nr like &amp;quot;5%&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
        oCBL.GetSuli.Width             := 500;                // Weite des Suchlistenfensters &lt;br /&gt;
        oCBL.GetSuli.Height            := 400;                // Höhe des Suchlistenfensters&lt;br /&gt;
              &lt;br /&gt;
        oCBL.GetSuli.InitColumn(&#039;Nr&#039;,  &#039;wg_nr&#039;,   30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
        oCBL.GetSuli.AddColumn(&#039;Name&#039;, &#039;wg_name&#039;, 30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
&lt;br /&gt;
        // Die erste Spalte der Suchliste muss mit InitColumn erstellt werden, alle weiteren mit AddColumn.&lt;br /&gt;
        // Parameter:&lt;br /&gt;
&lt;br /&gt;
        // Anzeigename        : String, &lt;br /&gt;
        // Feldname           : String, &lt;br /&gt;
        // relative_Breite    : Integer, &lt;br /&gt;
        // Anzeigefunktion    : Function of String, vorerst immer nil, &lt;br /&gt;
        // Anzeigenmaskierung : String = &#039;&#039;, Beispiel: &#039;##9,99&#039;: Es werden immer eine Vorkommastelle und immer zwei Nachkommastellen angezeigt, und optional zwei zusätzliche Vorkommastellen, wenn vorhanden.&lt;br /&gt;
        // Ausrichtung        : System.Classes.TAlignment.[taLeftJustify, taRightJustify, taCenter]&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
        oTRE         := TTextRichEdit.Create(frmEdit);&lt;br /&gt;
        oTRE.Name    := &#039;riced_db_user_langtext&#039;;&lt;br /&gt;
        oTRE.Top     := 170;&lt;br /&gt;
        oTRE.Left    := 10;&lt;br /&gt;
        oTRE.Height  := 300;&lt;br /&gt;
        oTRE.Width   := 400;   &lt;br /&gt;
        oTRE.RulerH  := false; &lt;br /&gt;
        oTRE.Parent  := oTab;        &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    end;    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Rechnung per Mail/Fax==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdSave():string;&lt;br /&gt;
begin &lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
var oAutoMail         : TxCheckBox;&lt;br /&gt;
    oFaxEMailDrucken  : TxCheckBox;&lt;br /&gt;
    oOldDate          : TxCheckBox;&lt;br /&gt;
begin &lt;br /&gt;
   oAutoMail         := NIL;&lt;br /&gt;
   oFaxEMailDrucken  := NIL; &lt;br /&gt;
   oOldDate          := NIL;&lt;br /&gt;
&lt;br /&gt;
   if (Assigned(FrmEdit)) then begin&lt;br /&gt;
       oAutoMail        := TxCheckBox(FrmEdit.FindComponent(&#039;cb_automail&#039;)); &lt;br /&gt;
       oFaxEMailDrucken := TxCheckBox(FrmEdit.FindComponent(&#039;cb_FaxEMailDrucken&#039;)); &lt;br /&gt;
       oOldDate         := TxCheckBox(FrmEdit.FindComponent(&#039;cb_OldDate&#039;)); &lt;br /&gt;
   end;&lt;br /&gt;
    &lt;br /&gt;
   if (Assigned(oAutoMail)) then begin&lt;br /&gt;
       oAutoMail.checked := True;&lt;br /&gt;
       Meldung(&#039;oAutoMail&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oFaxEMailDrucken)) then begin&lt;br /&gt;
       oFaxEMailDrucken.checked := True;   &lt;br /&gt;
       Meldung(&#039;oFaxEMailDrucken&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oOldDate)) then begin&lt;br /&gt;
       oOldDate.checked := True;   &lt;br /&gt;
       Meldung(&#039;oOldDate&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Besonderheiten==&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=58055</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=58055"/>
		<updated>2020-07-22T14:16:29Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Beispielscript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Eingabemaske==&lt;br /&gt;
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnEdFormInit || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnEdInit || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnEdVorb || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|OnEdShow || OnF4&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF5&lt;br /&gt;
|-&lt;br /&gt;
|OnEdReadDirect || OnF6&lt;br /&gt;
|-&lt;br /&gt;
|OnEdRead || OnF7&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF8&lt;br /&gt;
|-&lt;br /&gt;
|OnEdCheck || OnF9&lt;br /&gt;
|-&lt;br /&gt;
|OnEdqSQL || OnF10&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSaveDirect || OnF11&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSave || OnF12&lt;br /&gt;
|-&lt;br /&gt;
|CheckIfChanged || OnPGDN&lt;br /&gt;
|-&lt;br /&gt;
|OnEdClose || OnPGUP&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
Die hier aufgeführten &#039;&#039;&#039;internen Funktionen&#039;&#039;&#039; sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.&lt;br /&gt;
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039; gegeben werden. Für Tastatur-Funktionen gilt dies nur für &#039;&#039;&#039;OnESC&#039;&#039;&#039;.}}&lt;br /&gt;
==Zugriff auf Komponenten==&lt;br /&gt;
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen &#039;&#039;&#039;xGet&#039;&#039;&#039; (Daten lesen) und &#039;&#039;&#039;xSet&#039;&#039;&#039; (Daten schreiben) verwenden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Auslesen einer Komponente&lt;br /&gt;
cName := FrmEdit.xGet(&#039;a_name&#039;);&lt;br /&gt;
//Setzen einer Komponente&lt;br /&gt;
FrmEdit.xSet(&#039;a_name&#039;,&amp;quot;Meier&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Globale Variablen der Eingabemaske==&lt;br /&gt;
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property&#039;s stehen zu Verfügung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Property !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|lEditMode || True  = Insertmodus False = Editmodus&lt;br /&gt;
|-&lt;br /&gt;
|lDataUpdate || True = Daten des Edits wurden verändert&lt;br /&gt;
|-&lt;br /&gt;
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)&lt;br /&gt;
|-&lt;br /&gt;
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen&lt;br /&gt;
|-&lt;br /&gt;
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf&lt;br /&gt;
|-&lt;br /&gt;
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)&lt;br /&gt;
|}&lt;br /&gt;
==Beispiele Eingabemaske==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aufruf von weiteren Macros innerhalb des Macros===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
var oParams: TStringlist; //Parameter für Aufruf&lt;br /&gt;
begin&lt;br /&gt;
    //Aufruf ohne Parameter&lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;);&lt;br /&gt;
&lt;br /&gt;
    //Aufruf mit Parameter&lt;br /&gt;
    oParams := TStringlist.Create;&lt;br /&gt;
    oParams.Add(&#039;TEST456&#039;);      &lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;, frmEdit, oParams);  &lt;br /&gt;
    MyFreeAndNil(oParams);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingaben prüfen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdCheck():string;&lt;br /&gt;
var oSte     : TEdit;&lt;br /&gt;
    cEdit    : String;&lt;br /&gt;
    cVorname : String;&lt;br /&gt;
begin&lt;br /&gt;
    if (FrmEdit.lEditMode) then begin&lt;br /&gt;
        Meldung(&#039;Edit Mode True&#039;);&lt;br /&gt;
    end else begin&lt;br /&gt;
        Meldung(&#039;Edit Mode False&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
    Meldung(FrmEdit.stred_db_a_name.Text);&lt;br /&gt;
    oSte := FrmEdit.FindComponent(&#039;stred_db_a_name&#039;);&lt;br /&gt;
    Meldung(oSte.Text);&lt;br /&gt;
    cVorname:= FrmEdit.xGet(&#039;a_vorname&#039;);&lt;br /&gt;
    Meldung(cVorname);&lt;br /&gt;
    if (Empty(cVorname)) then begin&lt;br /&gt;
        FrmEdit.lCheckOk := False;&lt;br /&gt;
        Meldung(&#039;Bitte Vorname eingtragen&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Positionen in Vorgängen blockieren===&lt;br /&gt;
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Name: AN_VORGANG_EDIT Function OpenClose&lt;br /&gt;
{{Hinweis| Der Prefix &amp;quot;AN&amp;quot; steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;&lt;br /&gt;
begin&lt;br /&gt;
   //DebugLine(&#039;cVgNr&#039;+cVgNr);&lt;br /&gt;
&lt;br /&gt;
    //02 = Möbel&lt;br /&gt;
    Result := oOBS.cBenutzergruppe &amp;lt;&amp;gt; &#039;02&#039;;  &lt;br /&gt;
    &lt;br /&gt;
    if (Result) then begin  &lt;br /&gt;
        //Wenn Positionen vorhanden dann kein Positions-Edit&lt;br /&gt;
        if (DB_LSeek(oDB,&#039;ANGPOS&#039;,&#039;az_nr=&#039;+DB_SqlVal(cVGNr))) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
                          &lt;br /&gt;
    if (Result) then begin&lt;br /&gt;
                &lt;br /&gt;
        //DebugLine(iif(lInsertMode,&#039;True&#039;,&#039;False&#039;));&lt;br /&gt;
        &lt;br /&gt;
        //Bei nicht Insert immer False&lt;br /&gt;
        if (lInsertMode = False) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==User-Reiter==&lt;br /&gt;
In OBS ab Version 003191 können Edit-Masken per Customizing-Script um eigene Reiter erweitert werden. Diese darin verwalteten Felder können mit [[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|eigenen Datenbankfeldern]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Usertab.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Beispiel-Userdatenbank===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
#DBNAME TODO&lt;br /&gt;
&lt;br /&gt;
  #FELDNAME USER_BEMERK           , C  ,    8 ,  0 , &amp;quot;CCCCCCCC&amp;quot;&lt;br /&gt;
  #FELDNAME USER_WGR              , C ,     3 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
  #FELDNAME USER_TOGGLE           , C ,     1 ,  0 , &amp;quot;C&amp;quot;&lt;br /&gt;
  #FELDNAME USER_BETRAG           , N  ,   11 ,  0 , &amp;quot;NNNNNNNN.NNNN&amp;quot;&lt;br /&gt;
  #FELDNAME USER_DATUM            , D  ,    4 ,  0 , &amp;quot;TT.MM.JJ&amp;quot;&lt;br /&gt;
  #FELDNAME USER_LANGTEXT         , M  , 2000 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Beispielscript===&lt;br /&gt;
====Usertab====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit(): String;&lt;br /&gt;
var oTab : TTabSheet;&lt;br /&gt;
    oStr : TStringEdit;     &lt;br /&gt;
    oLbl : TLabel;   &lt;br /&gt;
    oNEd : TNumericEdit;    &lt;br /&gt;
    oDVE : TDateValEdit;  &lt;br /&gt;
    oChB : TxCheckBox;   &lt;br /&gt;
    oCBL : TCombiListe;      &lt;br /&gt;
    oTRE : TTextRichEdit;&lt;br /&gt;
begin&lt;br /&gt;
    oTab := frmEdit.AddUserTab();               // Erstellt neuen User-Tab auf dem Edit&lt;br /&gt;
    if assigned(oTab) then begin&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Textzeile:&#039;;   &lt;br /&gt;
        oLbl.Top     := 10;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oStr         := TStringEdit.Create(frmEdit);&lt;br /&gt;
        oStr.Name    := &#039;stred_db_user_bemerk&#039;; // Damit automatisches Speichern/Laden von Datenbankfeldern funktioniert, muss im Komponentennamen &#039;_db_&#039; und der Feldname stehen.&lt;br /&gt;
        oStr.Top     := 10;        &lt;br /&gt;
        oStr.Left    := 130;&lt;br /&gt;
        oStr.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Summe:&#039;;   &lt;br /&gt;
        oLbl.Top     := 40;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oNEd         := TNumericEdit.Create(frmEdit);&lt;br /&gt;
        oNEd.Name    := &#039;numed_db_user_betrag&#039;;&lt;br /&gt;
        oNEd.Top     := 40;        &lt;br /&gt;
        oNEd.Left    := 130;&lt;br /&gt;
        oNEd.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Datum:&#039;;   &lt;br /&gt;
        oLbl.Top     := 70;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oDVE         := TDateValEdit.Create(frmEdit);&lt;br /&gt;
        oDVE.Name    := &#039;datev_db_user_datum&#039;;&lt;br /&gt;
        oDVE.Top     := 70;        &lt;br /&gt;
        oDVE.Left    := 130;&lt;br /&gt;
        oDVE.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Schalter:&#039;;   &lt;br /&gt;
        oLbl.Top     := 100;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oChB         := TxCheckBox.Create(frmEdit);&lt;br /&gt;
        oChB.Name    := &#039;cb_db_user_toggle&#039;;   &lt;br /&gt;
        oChB.Caption := &#039;Schalter&#039;;&lt;br /&gt;
        oChB.Top     := 100;        &lt;br /&gt;
        oChB.Left    := 130;&lt;br /&gt;
        oChB.Parent  := oTab;  &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------      &lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Suchliste:&#039;;   &lt;br /&gt;
        oLbl.Top     := 130;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
             &lt;br /&gt;
        oCBL         := FrmEdit.AddCombiliste();   &lt;br /&gt;
        oCBL.Name    := &#039;cbl_db_user_wgr&#039;;    &lt;br /&gt;
        oCBL.Top     := 130;                &lt;br /&gt;
        oCBL.Left    := 130;            &lt;br /&gt;
        oCBL.Parent  := oTab;    &lt;br /&gt;
                                      &lt;br /&gt;
        oCBL.GetSuli.Tablename         := &#039;WARENGR&#039;;          // Verknüpfte Tabelle  &lt;br /&gt;
        oCBL.GetSuli.CompareField      := &#039;wg_nr&#039;;            // Feld mit eindeutiger ID zur Zuordnung&lt;br /&gt;
        oCBL.GetSuli.ShowField         := &#039;wg_name&#039;;          // Feld, das als Bezeichnung in der Kombiliste angezeigt wird&lt;br /&gt;
        oCBL.GetSuli.Caption           := ML(&#039;Warengruppe&#039;);  // Fenstertitel der Suchliste, die sich beim Klick auf # öffnet&lt;br /&gt;
        oCBL.GetSuli.SQLOrder          := &#039;wg_nr&#039;;            // Feld, nach dem die Suchliste sortiert werden soll&lt;br /&gt;
        oCBL.GetSuli.SQlWhere          := &#039;&#039;;                 // Filter für Daten in der Suchliste, z. bsp. &#039;az_nr like &amp;quot;5%&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
        oCBL.GetSuli.Width             := 500;                // Weite des Suchlistenfensters &lt;br /&gt;
        oCBL.GetSuli.Height            := 400;                // Höhe des Suchlistenfensters&lt;br /&gt;
              &lt;br /&gt;
        oCBL.GetSuli.InitColumn(&#039;Nr&#039;,  &#039;wg_nr&#039;,   30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
        oCBL.GetSuli.AddColumn(&#039;Name&#039;, &#039;wg_name&#039;, 30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
&lt;br /&gt;
        // Die erste Spalte der Suchliste muss mit InitColumn erstellt werden, alle weiteren mit AddColumn.&lt;br /&gt;
        // Parameter:&lt;br /&gt;
&lt;br /&gt;
        // Anzeigename        : String, &lt;br /&gt;
        // Feldname           : String, &lt;br /&gt;
        // relative_Breite    : Integer, &lt;br /&gt;
        // Anzeigefunktion    : Function of String, vorerst immer nil, &lt;br /&gt;
        // Anzeigenmaskierung : String = &#039;&#039;, Beispiel: &#039;##9,99&#039;: Es werden immer eine Vorkommastelle und immer zwei Nachkommastellen angezeigt, und optional zwei zusätzliche Vorkommastellen, wenn vorhanden.&lt;br /&gt;
        // Ausrichtung        : System.Classes.TAlignment.[taLeftJustify, taRightJustify, taCenter]&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
        oTRE         := TTextRichEdit.Create(frmEdit);&lt;br /&gt;
        oTRE.Name    := &#039;riced_db_user_langtext&#039;;&lt;br /&gt;
        oTRE.Top     := 170;&lt;br /&gt;
        oTRE.Left    := 10;&lt;br /&gt;
        oTRE.Height  := 300;&lt;br /&gt;
        oTRE.Width   := 400;   &lt;br /&gt;
        oTRE.RulerH  := false; &lt;br /&gt;
        oTRE.Parent  := oTab;        &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    end;    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
====Rechnung per Mail/Fax====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdSave():string;&lt;br /&gt;
begin &lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
var oAutoMail         : TxCheckBox;&lt;br /&gt;
    oFaxEMailDrucken  : TxCheckBox;&lt;br /&gt;
    oOldDate          : TxCheckBox;&lt;br /&gt;
begin &lt;br /&gt;
   oAutoMail         := NIL;&lt;br /&gt;
   oFaxEMailDrucken  := NIL; &lt;br /&gt;
   oOldDate          := NIL;&lt;br /&gt;
&lt;br /&gt;
   if (Assigned(FrmEdit)) then begin&lt;br /&gt;
       oAutoMail        := TxCheckBox(FrmEdit.FindComponent(&#039;cb_automail&#039;)); &lt;br /&gt;
       oFaxEMailDrucken := TxCheckBox(FrmEdit.FindComponent(&#039;cb_FaxEMailDrucken&#039;)); &lt;br /&gt;
       oOldDate         := TxCheckBox(FrmEdit.FindComponent(&#039;cb_OldDate&#039;)); &lt;br /&gt;
   end;&lt;br /&gt;
    &lt;br /&gt;
   if (Assigned(oAutoMail)) then begin&lt;br /&gt;
       oAutoMail.checked := True;&lt;br /&gt;
       Meldung(&#039;oAutoMail&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oFaxEMailDrucken)) then begin&lt;br /&gt;
       oFaxEMailDrucken.checked := True;   &lt;br /&gt;
       Meldung(&#039;oFaxEMailDrucken&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
   if (Assigned(oOldDate)) then begin&lt;br /&gt;
       oOldDate.checked := True;   &lt;br /&gt;
       Meldung(&#039;oOldDate&#039;);   &lt;br /&gt;
   end;&lt;br /&gt;
   &lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Besonderheiten==&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=58054</id>
		<title>OBS/Kostenpflichtige Module/ZUGFeRD</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=58054"/>
		<updated>2020-07-22T13:34:17Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kostenpflichtige Module}}&lt;br /&gt;
&lt;br /&gt;
==Über ZUGFeRD==&lt;br /&gt;
ZUGFeRD ist ein Standard zur elektronischen Übermittlung von Rechnungsdaten. Dabei wird eine computerlesbare Textdatei im XRechnungs-Standard an eine gewöhnliche, auf langzeitarchivierung optimierte PDF-Rechnung angehängt. &lt;br /&gt;
&lt;br /&gt;
Mit dem OBS-ZUGFeRD-Modul können Sie sowohl ZUGFeRD-PDF-Dateien, die Sie von Lieferanten oder Dienstleistern erhalten, in OBS-Einkäufe umwandeln, als auch ZUGFeRD-Rechnungen an Kunden schicken, die diese Dateien verarbeiten können. (Vorraussichtlich wird dies bei kommunalen Ausschreibungen ab einem gewissen Auftragswert in Zukunft verpflichtend.)&lt;br /&gt;
&lt;br /&gt;
OBS unterstützt ab Version 003220 sowohl das Einlesen von empfangenen Einkaufsrechnungen als auch das Erstellen und Versenden von ZUGFeRD-PDFs für ausgehenden Rechnungen.&lt;br /&gt;
&lt;br /&gt;
==Vorraussetzungen==&lt;br /&gt;
* Generell:&lt;br /&gt;
** Modul mieten und freischalten lassen&lt;br /&gt;
* Zum Einlesen: &lt;br /&gt;
** Stammdaten pflegen: Erlöskonto (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
* Zum Erstellen: &lt;br /&gt;
** Konstanten pflegen (System - I Konstanten) &lt;br /&gt;
** Programmparameter 908 auf 3 setzen (PDF-Archivierung)&lt;br /&gt;
** Steuerschlüssel pflegen (Stammdaten - Weitere Stammdaten - Mehrwertsteuer): Den Schlüsseln 00-09 müssen korrekte TSE-Schlüssel zugeordnet werden. &lt;br /&gt;
** Stammdaten pflegen: Bankdaten (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
&lt;br /&gt;
==Anleitung==&lt;br /&gt;
&lt;br /&gt;
===XRechnung===&lt;br /&gt;
Der Bund hat unter [https://xrechnung.bund.de xrechnung.bund.de] eine Zentrale Rechnungseingangsplattform geschaffen, auf der voraussichtlich ab dem 27.11.2020 alle Rechnungen für öffentliche Verwaltungsstellen im XRechnungs-Format eingereicht werden müssen. &lt;br /&gt;
&lt;br /&gt;
Um die hierfür notwendien XRechnungs-Dateien zu erzeugen, müssen Sie in der Rechnungsliste auf der zu verschickenden Rechnung &amp;quot;F10 - Z Zugferdrechnung erzeugen&amp;quot; auswählen, und bei der Frage, ob eine PDF erstellt werden soll, &#039;&#039;&#039;Nein&#039;&#039;&#039; auswählen. Wählen Sie einen Speicherort für die erzeugte XRechnungs-XML-Datei. Laden Sie diese Datei anschließend auf dem Rechnungsportal hoch.&lt;br /&gt;
&lt;br /&gt;
Üblicherweise bekommen Sie von der öffentliche Stelle, der Sie die Rechnung schicken möchten, eine elektronische Leitwegs-ID im Format &amp;quot;991-XXXXX-XX&amp;quot; mitgeteilt, sowie eine Kreditorennummer, unter der Sie im System des Amts hinterlegt sind. Tragen Sie beide Nummern, sowie die Daten Ihres eigenen Sachbearbeiters unter &amp;quot;Personenstamm - F10 - Z Zugferd-Stammdaten - Einfügen&amp;quot; ein. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Unter [https://ref.xrechnung.bund.de ref.xrechnung.bund.de] steht eine Testumgebung des Bundes zur Verfügung. Hier können Sie sich anmelden, um Rechnungen überprüfen zu lassen, ohne das Risiko einzugehen, sie versehentlich falsch  oder mehrfach an Ihren Kunden zu übermitteln.}}&lt;br /&gt;
===Einlesen von Einkaufsrechnungen===&lt;br /&gt;
&lt;br /&gt;
# Zug-Vorgangsliste öffnen (Programme - Zugferd)&lt;br /&gt;
# Import per F6 oder Drag&amp;amp;Drop&lt;br /&gt;
# Bei rot hinterlegten Einträgen:&lt;br /&gt;
## Fehler bearbeiten&lt;br /&gt;
## F10 - Daten neu verarbeiten&lt;br /&gt;
# Enter:&lt;br /&gt;
## Lieferanten prüfen&lt;br /&gt;
## Landeszuordnung prüfen&lt;br /&gt;
## Zahlungsbedingung zuordnen (kann in den allermeisten Fällen nicht automatisch zugeordnet werden)&lt;br /&gt;
## Skonto- und Fälligkeitsdatum prüfen und ggbf. manuell eintragen&lt;br /&gt;
# Positionen einzeln prüfen:&lt;br /&gt;
## Erlöskonto und Mehrwertsteuerschlüssel prüfen&lt;br /&gt;
## Artikelnummer zuordnen, falls gewünscht&lt;br /&gt;
# F10 - Einkaufsrechnung generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
===Erstellen von ZUGFeRD-Rechnungen===&lt;br /&gt;
&lt;br /&gt;
# Stammdaten pflegen und PMode 908 einstellen, s. Vorraussetzungen&lt;br /&gt;
# Rechnung per Mail versenden oder in der Rechnungsliste mit &amp;quot;F10 - Z Zugferd-Rechnung erstellen&amp;quot; manuell generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
==ZUGFeRD-Daten==&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Vorgänge===&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
In dieser Liste können Sie Zugferd-Einkaufsrechnungsdateien importieren, die Sie von Lieferanten oder Dienstleistern erhalten. Ziehen Sie dazu die entsprechende PDF, beispielsweise aus einer Mail, vom Desktop oder aus einem Ordner, auf das Feld &amp;quot;Drag&amp;amp;Drop&amp;quot;, oder wählen Sie sie mit &amp;quot;{{F6}} Import&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Mit dem Haken &amp;quot;Erweiterte Info&amp;quot; öffnet sich das Feld auf der rechten Seite, in dem Sie die Rohdaten des importierten Zugferd-Datensatzes einsehen können.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} öffnen Sie die Bearbeitungsmaske (s.u.) des Datensatzes. Hier können Sie die importierten Zugferd-Daten kontrollieren und korrigieren, bevor Sie aus einer empfangenen Rechnung einen OBS-Einkauf generieren. &lt;br /&gt;
&lt;br /&gt;
Mit {{F10}} Weit. öffnen Sie die weiteren Infos (s.u.)&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie die Daten der importierten Zugferddatei bearbeiten, bevor Sie einen OBS-Einkauf generieren.&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie dabei vor allem, dass &lt;br /&gt;
*der richtige Lieferant eingetragen ist (1), &lt;br /&gt;
*die Zahlungsbedingungen korrekt erfasst sind (3) und &lt;br /&gt;
*Fälligkeits- und Skontodatum erkannt wurden (4), sofern vorhanden.&lt;br /&gt;
&lt;br /&gt;
====F10 Weitere Informationen====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki f10.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie weitere Zugferd-Funktionen aufrufen.&lt;br /&gt;
&lt;br /&gt;
* PDF anzeigen: Zeigt die PDF des aktuellen Datensatzes an. &lt;br /&gt;
* XML anzeigen: Zeigt die an die PDF angehängten Zugferd-Daten in Rohform an.&lt;br /&gt;
* ILN-Verwaltung: derzeit nicht unterstützt&lt;br /&gt;
* Einkaufsrechnung generieren: Erstellt einen Einkauf aus dem gewählten Datensatz. (Wichtig:  Anleitung (s.o.) beachten!!!)&lt;br /&gt;
* Zugferd Stammdaten: Öffnet die Stammdatenmaske und prüft, ob grundlegend Zugferdrechnungen verarbeitet werden können (s. Vorraussetzungen)&lt;br /&gt;
* Protokoll: Nach dem Einlesen oder Erstellen von Zugferddateien kann hier geprüft werden, ob Fehler oder Warnungen vorliegen.&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Stammdaten===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki stamm.jpg]]&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen der Stammdatenmaske werden die Vorraussetzungen (s.o.) geprüft. Probleme werden als Meldungen ausgegeben und müssen bearbeitet werden, bevor Zugferd-Daten korrekt verarbeitet werden können!&lt;br /&gt;
&lt;br /&gt;
====Erlöskonto====&lt;br /&gt;
Wenn der Haken &amp;quot;Automatisches Setzen des Erlöskontos&amp;quot; gesetzt ist, wird beim Import jeder Position das im Feld &amp;quot;Erlöskonto&amp;quot; eingetragene Erlöskonto zugeordnet. &lt;br /&gt;
&lt;br /&gt;
Wenn der Haken nicht gesetzt ist, muss nach dem Import der Zugferd-Einkaufsrechnung für jede Position ein Erlöskonto händisch gewählt werden!&lt;br /&gt;
&lt;br /&gt;
====Bankdaten====&lt;br /&gt;
In den Feldern Bank 1 bis Bank 5 und den zugehörigen IBAN-Feldern können verschiedene Bankkonten eingetragen werden, die beim Erstellen von ausgehenden Zugferd-Rechnungen als akzeptierte Zahlungsmethoden hinterlegt werden. &lt;br /&gt;
&lt;br /&gt;
Wichtig: Der europäische Standard setzt hier mindestens eine eingetragene IBAN vorraus!&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Positionen===&lt;br /&gt;
====Positionsliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier werden alle Positionen aufgelistet, die in den importierten Zugferd-Daten gefunden wurden. &lt;br /&gt;
&lt;br /&gt;
Da der ZUGFeRD-Standard den Entwicklern von Warenwirtschaftssystemen viele Freiheiten bei der Umsetzung lässt, wie verschiedene Daten wie Langtexte, Zahlungsbedingungen und weitere Daten erfasst werden, werden von OBS alle Daten, die nicht automatisch OBS-Datenfeldern zugeordnet werden können, als Langtextpositionen erfasst.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} können die aktuellen Positionsdaten geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
====Positionsbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Positionsdaten des importierten Zugferd-Datensatzes geprüft werden. Vor dem Generieren von OBS-Einkäufen aus importierten Zugferd-Rechnungen muss für jede Position geprüft werden, ob Erlöskonto und MwSt-Schlüssel gesetzt sind!&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Developer/Beispiele/UC_Positionen&amp;diff=58025</id>
		<title>OBS/Makros und Scripting/Developer/Beispiele/UC Positionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Developer/Beispiele/UC_Positionen&amp;diff=58025"/>
		<updated>2020-07-15T10:47:53Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Durch den Prefix &amp;quot;AU&amp;quot; werden diese Scripte nur von Auftragsvorgängen genutzt.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;quot;AU&amp;quot; ist der DMS-Typ von Auftrag. Eine Liste mit dem DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]]. &amp;lt;br/&amp;gt;&lt;br /&gt;
Generell können die Vorgänge &amp;quot;Angebot&amp;quot;, &amp;quot;Aufträge&amp;quot;, Rechnungen&amp;quot;, &amp;quot;Einkauf&amp;quot;, &amp;quot;Einkauflieferschein&amp;quot;, &amp;quot;Bestellung&amp;quot; und &amp;quot;Reparaturauftrag&amp;quot; diese Methoden nutzen, brauchen aber dementsprechend ihren DMS-Typ als Prefix.&lt;br /&gt;
&lt;br /&gt;
==AU_VORGANG==&lt;br /&gt;
Die Methode &amp;quot;VORGANG_ZUSATZINFO_START&amp;quot; gibt einen Headertext für die Positionserfassung zurück.&lt;br /&gt;
Die Methode &amp;quot;StartProc&amp;quot; ist für Nachträgliche Datenänderungen nach Abschluss eines Vorganges.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Methoden &amp;quot;VORGANG_ZUSATZINFO_START&amp;quot; und &amp;quot;StartProc&amp;quot; müssen vorhanden sein.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function VORGANG_ZUSATZINFO_START(cVorgang:String):String;&lt;br /&gt;
begin&lt;br /&gt;
    Result := &#039;&#039;; //&#039;Result:=&#039;+cVorgang;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function StartProc(cVorgang:String):String;&lt;br /&gt;
begin&lt;br /&gt;
    Result := &#039;&#039;; //&#039;Result:=&#039;+cVorgang;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AU_VORGANG_STDOK==&lt;br /&gt;
Die Methoden &amp;quot;BeforeSave&amp;quot; und &amp;quot;AfterSave&amp;quot; werden jeweils vor und nach dem Aufruf der Standard Speicherroutine aufgerufen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Diese Methode kann verwendet werden, um Materialien nach dem Speichern der Positionen zu verändern.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;BeforeSave&amp;quot; können Werte direkt in UC_Position vor dem Speichern verändert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;AfterSave&amp;quot; können Werte nach dem Speichern geändert werden.&amp;lt;br/&amp;gt;&lt;br /&gt;
Bei zeitnaher Artikelpflege (PMode 526) ist das Material schon angelegt. Hiermit kann z.B. das Material nachträglich verändert werden.&amp;lt;br/&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Methoden &amp;quot;BeforeSave&amp;quot; und &amp;quot;AfterSave&amp;quot; müssen vorhanden sein.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function _Boolean(lVal:Boolean):String;&lt;br /&gt;
begin&lt;br /&gt;
    Result := iif(lVal,&#039;True&#039;,&#039;False&#039;);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function _SaveMode(Val:TSaveMode):String;&lt;br /&gt;
begin&lt;br /&gt;
    if          (Val = DB_INSERT) then begin&lt;br /&gt;
        Result := &#039;INSERT&#039;;&lt;br /&gt;
    end else if (Val = DB_UPDATE) then begin&lt;br /&gt;
        Result := &#039;UPDATE&#039;;&lt;br /&gt;
    end else begin&lt;br /&gt;
        Result := &#039;NOCHANGE&#039;;&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure _ShowValues(cVorgang:String; oPos:TPosValue);&lt;br /&gt;
begin&lt;br /&gt;
    DebugLine(&#039;Vorgang   :&#039; + cVorgang                     );&lt;br /&gt;
    DebugLine(&#039;Artikel-Nr:&#039; + oPos.POS_ARTNR               );&lt;br /&gt;
    DebugLine(&#039;SHOW      :&#039; + _Boolean(oPos.POS_SHOW)      );    &lt;br /&gt;
    &lt;br /&gt;
    //TSaveMode      = (DB_INSERT, DB_UPDATE, DB_NOCHANGE);&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;UPDATE    :&#039; + _SaveMode(oPos.POS_UPDATE)   );&lt;br /&gt;
    DebugLine(&#039;SYS_UID   :&#039; + oPos.POS_SYS_UID             );&lt;br /&gt;
    DebugLine(&#039;TSORT     :&#039; + oPos.POS_TSORT               );&lt;br /&gt;
    DebugLine(&#039;NR        :&#039; + oPos.POS_NR                  );&lt;br /&gt;
    DebugLine(&#039;KNR       :&#039; + oPos.POS_KNR                 );&lt;br /&gt;
    DebugLine(&#039;POSNR     :&#039; + oPos.POS_POSNR               );&lt;br /&gt;
    DebugLine(&#039;POSNR2    :&#039; + oPos.POS_POSNR2              );&lt;br /&gt;
    DebugLine(&#039;POSKAS    :&#039; + oPos.POS_POSKAS              );&lt;br /&gt;
    DebugLine(&#039;POSLFD    :&#039; + oPos.POS_POSLFD              );&lt;br /&gt;
    &lt;br /&gt;
    (*               &lt;br /&gt;
    TPosType  = (ShowStd,&lt;br /&gt;
                 ShowMemo,&lt;br /&gt;
                 ShowEmpty,&lt;br /&gt;
                 ShowZwSum,&lt;br /&gt;
                 ShowTitSum,&lt;br /&gt;
                 ShowEndSum,&lt;br /&gt;
                 ShowTitel,&lt;br /&gt;
                 ShowAngTitel,&lt;br /&gt;
                 ShowGewerk,&lt;br /&gt;
                 ShowHeader,&lt;br /&gt;
                 ShowFooter,&lt;br /&gt;
                 ShowFootAbschl,&lt;br /&gt;
                 ShowFF,&lt;br /&gt;
                 EditStd,&lt;br /&gt;
                 EditMemo,&lt;br /&gt;
                 EditAngTitel,&lt;br /&gt;
                 EditGewerk,&lt;br /&gt;
                 ShowNewPage,&lt;br /&gt;
                 EditTitSum,&lt;br /&gt;
                 ShowBmp,&lt;br /&gt;
                 EditBmp,&lt;br /&gt;
                 EditZWSum,&lt;br /&gt;
                 ShowScriptResult,&lt;br /&gt;
                 Undefined)&lt;br /&gt;
    *)                 &lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;TYP       :&#039; + IntToStr(oPos.POS_TYP)       );&lt;br /&gt;
    DebugLine(&#039;ARTNR     :&#039; + oPos.POS_ARTNR               );&lt;br /&gt;
    DebugLine(&#039;ARTNR_SHOW:&#039; + oPos.POS_ARTNR_SHOW          );&lt;br /&gt;
    DebugLine(&#039;LNR       :&#039; + oPos.POS_LNR                 );&lt;br /&gt;
    DebugLine(&#039;MEMORTF   :&#039; + oPos.POS_MEMO                );&lt;br /&gt;
    DebugLine(&#039;MEMOANSI  :&#039; + oPos.POS_MEMOANSI            );&lt;br /&gt;
    DebugLine(&#039;MEMODRUCK :&#039; + oPos.POS_MEMODRUCK           );&lt;br /&gt;
    DebugLine(&#039;BEZ1      :&#039; + oPos.POS_BEZ1                );&lt;br /&gt;
    DebugLine(&#039;BEZ2      :&#039; + oPos.POS_BEZ2                );&lt;br /&gt;
    DebugLine(&#039;MENGE     :&#039; + axStr(oPos.POS_MENGE)        );&lt;br /&gt;
    DebugLine(&#039;URMENGE   :&#039; + axStr(oPos.POS_URMENGE)      );&lt;br /&gt;
    DebugLine(&#039;EINHEIT   :&#039; + oPos.POS_EINHEIT             );&lt;br /&gt;
    DebugLine(&#039;EINHNAME  :&#039; + oPos.POS_EINHNAME            );&lt;br /&gt;
    DebugLine(&#039;MENGEIN   :&#039; + axStr(oPos.POS_MENGEIN)      );&lt;br /&gt;
    DebugLine(&#039;MENGEINFAK:&#039; + axStr(oPos.POS_MENGEINFAK)   );&lt;br /&gt;
    DebugLine(&#039;_EPREIS   :&#039; + axStr(oPos.fPOS_EPREIS)      );&lt;br /&gt;
    DebugLine(&#039;_BEPREIS  :&#039; + axStr(oPos.fPOS_BEPREIS)     );&lt;br /&gt;
    DebugLine(&#039;_BGPREIS  :&#039; + axStr(oPos.fPOS_BGPREIS)     );&lt;br /&gt;
    DebugLine(&#039;_EKPREIS  :&#039; + axStr(oPos.fPOS_EKPREIS)     );&lt;br /&gt;
    DebugLine(&#039;URPREIS   :&#039; + axStr(oPos.POS_URPREIS)      );&lt;br /&gt;
    DebugLine(&#039;URPREISEK :&#039; + axStr(oPos.POS_URPREISEK)    );&lt;br /&gt;
    DebugLine(&#039;MANPREIS  :&#039; + oPos.POS_MANPREIS            );&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;_GPREIS   :&#039; + axStr(oPos.fPOS_GPREIS)      );&lt;br /&gt;
    DebugLine(&#039;GRABATT   :&#039; + axStr(oPos.POS_GRABATT)      );&lt;br /&gt;
    DebugLine(&#039;RABATT    :&#039; + axStr(oPos.POS_RABATT)       );&lt;br /&gt;
    DebugLine(&#039;RABART1   :&#039; + oPos.POS_RABART1             );&lt;br /&gt;
    DebugLine(&#039;RABATT1   :&#039; + axStr(oPos.POS_RABATT1)      );&lt;br /&gt;
    DebugLine(&#039;RABART2   :&#039; + oPos.POS_RABART2             );&lt;br /&gt;
    DebugLine(&#039;RABATT2   :&#039; + axStr(oPos.POS_RABATT2)      );&lt;br /&gt;
    DebugLine(&#039;RABART3   :&#039; + oPos.POS_RABART3             );&lt;br /&gt;
    DebugLine(&#039;RABATT3   :&#039; + axStr(oPos.POS_RABATT3)      );&lt;br /&gt;
    DebugLine(&#039;RABART4   :&#039; + oPos.POS_RABART4             );&lt;br /&gt;
    DebugLine(&#039;RABATT4   :&#039; + axStr(oPos.POS_RABATT4)      );&lt;br /&gt;
    DebugLine(&#039;RABART5   :&#039; + oPos.POS_RABART5             );&lt;br /&gt;
    DebugLine(&#039;RABATT5   :&#039; + axStr(oPos.POS_RABATT5)      );&lt;br /&gt;
    DebugLine(&#039;ADDSUB    :&#039; + axStr(oPos.POS_ADDSUB)       );&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;_MWSTSCH  :&#039; + oPos.fPOS_MWSTSCH            );&lt;br /&gt;
    DebugLine(&#039;_MWSTSATZ :&#039; + axStr(oPos.fPOS_MWSTSATZ)    );&lt;br /&gt;
    DebugLine(&#039;KONTO     :&#039; + oPos.POS_KONTO               );&lt;br /&gt;
    DebugLine(&#039;LAGNR     :&#039; + oPos.POS_LAGNR               );&lt;br /&gt;
    DebugLine(&#039;LAGONR    :&#039; + oPos.POS_LAGONR              );&lt;br /&gt;
    DebugLine(&#039;SKFJN     :&#039; + oPos.POS_SKFJN               );&lt;br /&gt;
    DebugLine(&#039;BILDUID   :&#039; + oPos.POS_BILDUID             );&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;AUSDRUCKJN:&#039; + oPos.POS_AUSDRUCKJN );&lt;br /&gt;
    DebugLine(&#039;VERK      :&#039; + oPos.POS_VERK                );&lt;br /&gt;
    DebugLine(&#039;STATUS    :&#039; + oPos.POS_STATUS              );&lt;br /&gt;
    DebugLine(&#039;ANGNR     :&#039; + oPos.POS_ANGNR               );&lt;br /&gt;
    DebugLine(&#039;COLNR     :&#039; + IntToStr(oPos.POS_COLNR)     );&lt;br /&gt;
    DebugLine(&#039;UID       :&#039; + oPos.POS_UID                 );&lt;br /&gt;
    DebugLine(&#039;MUID      :&#039; + oPos.POS_MUID                );&lt;br /&gt;
    DebugLine(&#039;MENGEG    :&#039; + axStr(oPos.POS_MENGEG)       );&lt;br /&gt;
    DebugLine(&#039;VERPACK   :&#039; + oPos.POS_VERPACK             );&lt;br /&gt;
    DebugLine(&#039;KOLLI     :&#039; + axStr(oPos.POS_KOLLI)        );&lt;br /&gt;
    DebugLine(&#039;INHALT    :&#039; + axStr(oPos.POS_INHALT)       );&lt;br /&gt;
    DebugLine(&#039;EKSPREIS  :&#039; + axStr(oPos.POS_EKSPREIS)     );&lt;br /&gt;
    DebugLine(&#039;OBPREIS   :&#039; + axStr(oPos.POS_OBPREIS)      );&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;AUFNR     :&#039; + oPos.POS_AUFNR               );&lt;br /&gt;
    DebugLine(&#039;LIENR     :&#039; + oPos.POS_LIENR               );&lt;br /&gt;
    DebugLine(&#039;XUID1     :&#039; + oPos.POS_XUID1               );&lt;br /&gt;
    DebugLine(&#039;XUID2     :&#039; + oPos.POS_XUID2               );&lt;br /&gt;
    DebugLine(&#039;XUID3     :&#039; + oPos.POS_XUID3               );&lt;br /&gt;
    DebugLine(&#039;XUID4     :&#039; + oPos.POS_XUID4               );&lt;br /&gt;
    DebugLine(&#039;PROV      :&#039; + axStr(oPos.POS_PROV)         );&lt;br /&gt;
    DebugLine(&#039;LIEFKZ    :&#039; + IntToStr(oPos.POS_LIEFKZ)    );&lt;br /&gt;
    DebugLine(&#039;KOSTST    :&#039; + oPos.POS_KOSTST              );&lt;br /&gt;
    DebugLine(&#039;PRODGR    :&#039; + oPos.POS_PRODGR              );&lt;br /&gt;
    DebugLine(&#039;FRACHTV   :&#039; + axStr(oPos.POS_FRACHTV)      );&lt;br /&gt;
    DebugLine(&#039;MATEUID   :&#039; + oPos.POS_MATEUID             );&lt;br /&gt;
    DebugLine(&#039;EILIUID   :&#039; + oPos.POS_EILIUID             );&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;BESTUID   :&#039; + oPos.POS_BESTUID             );&lt;br /&gt;
    DebugLine(&#039;BESTNR    :&#039; + oPos.POS_BESTNR              );&lt;br /&gt;
    DebugLine(&#039;POSTEXT   :&#039; + oPos.POS_POSTEXT             );&lt;br /&gt;
    DebugLine(&#039;POSZUSATZ :&#039; + oPos.POS_POSZUSATZ           );&lt;br /&gt;
    DebugLine(&#039;DIFFPREIS :&#039; + axStr(oPos.POS_DIFFPREIS)    );&lt;br /&gt;
    DebugLine(&#039;LPROJNR   :&#039; + oPos.POS_LPROJNR             );&lt;br /&gt;
    DebugLine(&#039;LSNR      :&#039; + oPos.POS_LSNR                );&lt;br /&gt;
    DebugLine(&#039;LSDAT     :&#039; + DToC(oPos.POS_LSDAT)         );&lt;br /&gt;
    DebugLine(&#039;EKHERKUNFT:&#039; + oPos.POS_EKHERKUNFT          );&lt;br /&gt;
    DebugLine(&#039;POSART    :&#039; + IntToStr(oPos.POS_POSART)    );&lt;br /&gt;
    DebugLine(&#039;URLAND    :&#039; + oPos.POS_URLAND              );&lt;br /&gt;
    DebugLine(&#039;AUFSCHLAG :&#039; + IntToStr(oPos.POS_AUFSCHLAG) );&lt;br /&gt;
    DebugLine(&#039;AUFSCHUID :&#039; + oPos.POS_AUFSCHUID           );&lt;br /&gt;
    DebugLine(&#039;LIEFNR    :&#039; + oPos.POS_LIEFNR              );&lt;br /&gt;
    DebugLine(&#039;LAGSTRECK :&#039; + oPos.POS_LAGSTRECK           );&lt;br /&gt;
    DebugLine(&#039;MBANZAHL  :&#039; + axStr(oPos.POS_MBANZAHL)     );&lt;br /&gt;
    DebugLine(&#039;MBEZMENGE :&#039; + axStr(oPos.POS_MBEZMENGE)    );&lt;br /&gt;
    DebugLine(&#039;MBGEWICHT :&#039; + axStr(oPos.POS_MBGEWICHT)    );&lt;br /&gt;
    DebugLine(&#039;MBGGEWICHT:&#039; + axStr(oPos.POS_MBGGEWICHT)   );&lt;br /&gt;
    DebugLine(&#039;MBILAENGE :&#039; + axStr(oPos.POS_MBILAENGE)    );&lt;br /&gt;
    DebugLine(&#039;MBSLAENGE :&#039; + axStr(oPos.POS_MBSLAENGE)    );&lt;br /&gt;
    DebugLine(&#039;MBIBREITE :&#039; + axStr(oPos.POS_MBIBREITE)    );&lt;br /&gt;
    DebugLine(&#039;MBSBREITE :&#039; + axStr(oPos.POS_MBSBREITE)    );&lt;br /&gt;
    DebugLine(&#039;MBIHOEHE  :&#039; + axStr(oPos.POS_MBIHOEHE)     );&lt;br /&gt;
    DebugLine(&#039;MBSHOEHE  :&#039; + axStr(oPos.POS_MBSHOEHE)     );&lt;br /&gt;
    DebugLine(&#039;MBKZMENGE :&#039; + oPos.POS_MBKZMENGE           );&lt;br /&gt;
    DebugLine(&#039;MBUID     :&#039; + oPos.POS_MBUID               );&lt;br /&gt;
    DebugLine(&#039;RVUID     :&#039; + oPos.POS_RVUID               );&lt;br /&gt;
    DebugLine(&#039;MBSYS_UID :&#039; + oPos.POS_MBSYS_UID           );&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;VPCALCMENG:&#039; + axStr(oPos.POS_VPCALCMENGE)  );&lt;br /&gt;
    DebugLine(&#039;VPANZAHL1 :&#039; + axStr(oPos.POS_VPANZAHL1)    );&lt;br /&gt;
    DebugLine(&#039;VPANZAHL2 :&#039; + axStr(oPos.POS_VPANZAHL2)    );&lt;br /&gt;
    DebugLine(&#039;VPANZAHL3 :&#039; + axStr(oPos.POS_VPANZAHL3)    );&lt;br /&gt;
    DebugLine(&#039;VPANZAHL4 :&#039; + axStr(oPos.POS_VPANZAHL4)    );&lt;br /&gt;
    DebugLine(&#039;VPLFD1    :&#039; + oPos.POS_VPLFD1              );&lt;br /&gt;
    DebugLine(&#039;VPLFD2    :&#039; + oPos.POS_VPLFD2              );&lt;br /&gt;
    DebugLine(&#039;VPLFD3    :&#039; + oPos.POS_VPLFD3              );&lt;br /&gt;
    DebugLine(&#039;VPLFD4    :&#039; + oPos.POS_VPLFD4              );&lt;br /&gt;
    DebugLine(&#039;VPUID     :&#039; + oPos.POS_VPUID               );&lt;br /&gt;
    DebugLine(&#039;VPSYS_UID :&#039; + oPos.POS_VPSYS_UID           );&lt;br /&gt;
    DebugLine(&#039;IsInfo    :&#039; + IntToStr(oPos.POS_IsInfo)    );&lt;br /&gt;
&lt;br /&gt;
    DebugLine(&#039;KOMMENT   :&#039; + oPos.POS_KOMMENT             );&lt;br /&gt;
    DebugLine(&#039;ERWARTIKEL:&#039; + oPos.POS_ERWARTIKEL          );&lt;br /&gt;
    DebugLine(&#039;ERWARTIKEL:&#039; + oPos.POS_ERWARTIKEL          );&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;MWSTSATZ  :&#039; + axStr(oPos.POS_MWSTSATZ)     );&lt;br /&gt;
    DebugLine(&#039;MWSTSCH   :&#039; + oPos.POS_MWSTSCH             );&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;EPREIS    :&#039; + axStr(oPos.POS_EPREIS)       );&lt;br /&gt;
    DebugLine(&#039;EKPREIS   :&#039; + axStr(oPos.POS_EKPREIS)      );&lt;br /&gt;
    DebugLine(&#039;BEPREIS   :&#039; + axStr(oPos.POS_BEPREIS)      );&lt;br /&gt;
    DebugLine(&#039;BGPREIS   :&#039; + axStr(oPos.POS_BGPREIS)      );&lt;br /&gt;
    DebugLine(&#039;GPREIS    :&#039; + axStr(oPos.POS_GPREIS)       );&lt;br /&gt;
    &lt;br /&gt;
    DebugLine(&#039;--------------------------------------&#039;);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure BeforeSave(cVorgang:String; oPos:TPosValue);&lt;br /&gt;
begin&lt;br /&gt;
    //DebugLine(&#039;BeforSave&#039;);&lt;br /&gt;
    //_ShowValues(cVorgang, oPos);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure AfterSave(cVorgang:String; oPos:TPosValue);&lt;br /&gt;
begin&lt;br /&gt;
    //DebugLine(&#039;BeforSave&#039;);&lt;br /&gt;
    //_ShowValues(cVorgang, oPos);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ändern der Positionsframe-Komponenten==&lt;br /&gt;
Aufruf im Scripter: &lt;br /&gt;
&lt;br /&gt;
  procedure InitEdit(cVorgang:String; oFrame:TFrame);&lt;br /&gt;
&lt;br /&gt;
Hier können Komponenten aus der geöffneten Position verändert werden. Dazu müssen die Komponenten mit oFrame.FindComponent ermittelt werden. &lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitEdit(cVorgang:String; oFrame:TFrame);&lt;br /&gt;
var oEditPreis : TNumericEdit; // Komponente mit Typ deklarieren&lt;br /&gt;
begin&lt;br /&gt;
    DebugLine(&#039;InitEdit&#039;);&lt;br /&gt;
    // Komponente finden&lt;br /&gt;
    oEditPreis := TNumericEdit(oFrame.FindComponent(&#039;numed_epreis&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Wenn Komponente vorhanden ist, Änderungen ausführen&lt;br /&gt;
    if (Assigned(oEditPreis)) then begin&lt;br /&gt;
        oEditPreis.Enabled := False;&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle verfügbaren Komponenten mit Typ (Je nach Einstellungen können einige deaktiviert sein): &lt;br /&gt;
&lt;br /&gt;
        stred_bez2: TStringEdit;&lt;br /&gt;
        stred_bez1: TStringEdit;&lt;br /&gt;
        numed_menge: TNumericEdit;&lt;br /&gt;
        numed_rabatt: TNumericEdit;&lt;br /&gt;
        numed_epreis: TNumericEdit;&lt;br /&gt;
        cbl_db_artnr: TCombiListe;&lt;br /&gt;
        cbl_db_lnr: TCombiListe;&lt;br /&gt;
        cbl_db_konto: TCombiListe;&lt;br /&gt;
        cbl_db_lagnr: TCombiListe;&lt;br /&gt;
        cbl_db_mwst: TCombiListe;&lt;br /&gt;
        cbl_db_posken: TCombiListe;&lt;br /&gt;
        cbl_db_einheit: TCombiListe;&lt;br /&gt;
        numed_prov: TNumericEdit;&lt;br /&gt;
        numed_ekpreis: TNumericEdit;&lt;br /&gt;
        stred_posnr: TMaskEdit;&lt;br /&gt;
        Btn_weiter: TButton;&lt;br /&gt;
        stred_lsnr: TStringEdit;&lt;br /&gt;
        Datev_lsdat: TDateValEdit;&lt;br /&gt;
        comed_db_posart: xTComboedit;&lt;br /&gt;
        numed_anzahl: TNumericEdit;&lt;br /&gt;
        numed_inhalt: TNumericEdit;&lt;br /&gt;
        cbl_db_verp: TCombiListe;&lt;br /&gt;
        lab_inhalt: TLabel;&lt;br /&gt;
        stred_bestnr: TStringEdit;&lt;br /&gt;
        comed_db_aufschlag: xTComboedit;&lt;br /&gt;
        cbx_db_skfjn: TxCheckbox;&lt;br /&gt;
        numed_db_ggewicht: TNumericEdit;&lt;br /&gt;
        numed_db_gewicht: TNumericEdit;&lt;br /&gt;
        numed_db_ezmenge: TNumericEdit;&lt;br /&gt;
        numed_db_slaenge: TNumericEdit;&lt;br /&gt;
        numed_db_ilaenge: TNumericEdit;&lt;br /&gt;
        numed_db_sbreite: TNumericEdit;&lt;br /&gt;
        numed_db_ibreite: TNumericEdit;&lt;br /&gt;
        numed_db_ihoehe: TNumericEdit;&lt;br /&gt;
        numed_db_shoehe: TNumericEdit;&lt;br /&gt;
        stred_db_kzmenge: TStringEdit;&lt;br /&gt;
        numed_db_anzahl: TNumericEdit;&lt;br /&gt;
        cbl_db_prodgr: TCombiListe;&lt;br /&gt;
        numed_db_calcmenge: TNumericEdit;&lt;br /&gt;
        numed_db_anzahl1: TNumericEdit;&lt;br /&gt;
        numed_db_anzahl2: TNumericEdit;&lt;br /&gt;
        numed_db_anzahl3: TNumericEdit;&lt;br /&gt;
        numed_db_anzahl4: TNumericEdit;&lt;br /&gt;
        numed_db_inhalt1: TNumericEdit;&lt;br /&gt;
        numed_db_inhalt2: TNumericEdit;&lt;br /&gt;
        numed_db_inhalt3: TNumericEdit;&lt;br /&gt;
        numed_db_inhalt4: TNumericEdit;&lt;br /&gt;
        numed_gesamt1: TNumericEdit;&lt;br /&gt;
        numed_gesamt2: TNumericEdit;&lt;br /&gt;
        numed_gesamt3: TNumericEdit;&lt;br /&gt;
        numed_gesamt4: TNumericEdit;&lt;br /&gt;
        stred_einheit1: TStringEdit;&lt;br /&gt;
        stred_einheit2: TStringEdit;&lt;br /&gt;
        stred_einheit3: TStringEdit;&lt;br /&gt;
        stred_einheit4: TStringEdit;&lt;br /&gt;
        comed_db_liefkz: xTComboedit;&lt;br /&gt;
        cbl_db_kostst: TCombiListe;&lt;br /&gt;
        stred_posnr2: TMaskEdit;&lt;br /&gt;
        cbx_db_ausdruckjn: TxCheckbox;&lt;br /&gt;
        cbx_db_aufstrecke: TxCheckBox;&lt;br /&gt;
        cbx_db_manpreis: TxCheckBox;&lt;br /&gt;
        numed_obpreis: TNumericEdit;&lt;br /&gt;
        cbl_db_lagonr: TCombiListe;&lt;br /&gt;
        numed_addsub: TNumericEdit;&lt;br /&gt;
        riced_postext: TTextRichEdit;&lt;br /&gt;
        comed_db_druckposmemo: xTComboEdit;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Widgets/Zeiterfassung_Positionen&amp;diff=58008</id>
		<title>OBS/Widgets/Zeiterfassung Positionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Widgets/Zeiterfassung_Positionen&amp;diff=58008"/>
		<updated>2020-07-13T08:15:47Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Widgets}}[[Kategorie:OBS/Widgets]]&lt;br /&gt;
&amp;lt;font size=3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Positionen für Sammelreparaturaufträge aus der Zeiterfassung=&lt;br /&gt;
&lt;br /&gt;
Aufruf: Rechtsklick auf das Widget &amp;quot;Zeiterfassungsübersicht&amp;quot; -&amp;gt; &amp;quot;Liste Sammel-Reparaturaufträge&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In dieser Liste sehen Sie alle über die Zeiterfassung erfassten Zeiten. Sie können diese über die beiden Filter unten links nach &#039;&#039;&#039;Berechenbar&#039;&#039;&#039;,&#039;&#039;&#039;Aktuelle Periode&#039;&#039;&#039; und den Status &#039;&#039;&#039;01/21&#039;&#039;&#039; filtern. Über {{F2}} können die Einträge noch genauer ausgewertet werden. Mit der Taste {{Key|F9 Status}} kann ein Eintrag manuell auf erledigt (Status 21) gesetzt werden, wenn der Eintrag nicht weiter relevant ist.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Liste ist es auch Möglich aus den erfassten Zeiten Reparaturaufträge zu generieren. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Es muss in den Widgeteinstellungen ([[OBS/Widgets/Zeiterfassung Übersicht|062 Zeiterfassung Übersicht]]) &#039;&#039;&#039;03 Reparaturpositionen anlegen&#039;&#039;&#039;, &#039;&#039;&#039;05 Faktor Umrechnung Sekunden in AE&#039;&#039;&#039; und &#039;&#039;&#039;06 Standard Leistung für Reparaturauftrag&#039;&#039;&#039; eingestellt sein, um Reparaturaufträge generieren zu können.}}&lt;br /&gt;
{{Hinweis|In den Einstellung des Widgets &#039;&#039;&#039;Zeiterfassung&#039;&#039;&#039; kann in den Postionen &#039;&#039;&#039;09&#039;&#039;&#039; und &#039;&#039;&#039;10&#039;&#039;&#039; eingestellt werden, ob die Checkbox zur Anlage eines Reparaturauftrags und zur Berechnung vorbelegt werden soll.}}&lt;br /&gt;
&lt;br /&gt;
==Zeiten aus Zeiterfassung importieren==&lt;br /&gt;
Damit die Zeiten aus der Zeiterfassung in dieser Liste erscheinen müssen diese zunächst über den Punkt &#039;&#039;&#039;Importieren aus Zeiterfassung&#039;&#039;&#039; importiert werden. &lt;br /&gt;
&lt;br /&gt;
==Reparaturauftrag generieren==&lt;br /&gt;
&lt;br /&gt;
Mit {{F6}} können Sie die Zeiten zwischen &amp;quot;berechenbar&amp;quot; und &amp;quot;nicht berechenbar&amp;quot; umstellen. Nur aus berechnbaren Zeiten werden Reparaturaufträge generiert. &lt;br /&gt;
&lt;br /&gt;
Um einen Reparaturauftrag aus den erfassten Zeiten zu generieren müssen Sie zunächst mit {{F5}} die gewünschten Zeiten markieren und anschließend unter &#039;&#039;&#039;Weitere Funktionen&#039;&#039;&#039; den Punkt &#039;&#039;&#039;Repa. generieren&#039;&#039;&#039; auswählen. Zunächst wird gefragt, ob aus den markierten Zeiten Reparaturaufträge generiert werden sollen. Hierbei werden aus dem markierten Zeiten Sammelreparaturaufträge erstellt. Alternativ erscheint eine Auswertungsmaske (die Selbe, die auch mit {{F2}} aufgerufen werden kann), über welche die Reparaturaufträge generiert werden können. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Stammdaten/Artikel/Weitere_Funktionen/Suchen&amp;diff=57983</id>
		<title>OBS/Stammdaten/Artikel/Weitere Funktionen/Suchen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Stammdaten/Artikel/Weitere_Funktionen/Suchen&amp;diff=57983"/>
		<updated>2020-07-07T11:06:13Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Vorlage:Stammdaten}}&lt;br /&gt;
&lt;br /&gt;
=Die &#039;&#039;&#039;Suchen&#039;&#039;&#039;-Funktion=&lt;br /&gt;
[[Image:Suchen.PNG]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Nachdem Sie in der Artikelliste &#039;&#039;&#039;Suchen&#039;&#039;&#039; unter &amp;quot;Weitere Funktionen&amp;quot; angeklickt haben, öffnet sich die Artikelsuche:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die genauen Funktionen der auswählbaren Felder werden im Hinweistext eingeblendet, der erscheint, wenn Sie mit dem Mauszeiger auf ein Steuerelement zeigen. &lt;br /&gt;
&lt;br /&gt;
Alternativ können Sie die Funktionen auf dem zweiten Reiter &amp;quot;Hilfe&amp;quot; nachschlagen.&lt;br /&gt;
&lt;br /&gt;
Beispiele für Exaktsuche mit Steuerzeichen (Nur verfügbar, wenn Schnellsuche aktiv ist):  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;+Text&#039;&#039;&#039; (Wort muss enthalten sein) &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;-Text&#039;&#039;&#039;  (Wort darf nicht enthalten sein ) &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Text*&#039;&#039;&#039; (findet Wörter wie Text,Textbaustein,Text...) &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Text Zeile&amp;quot;&#039;&#039;&#039; (Satz &amp;quot;Text Zeile&amp;quot; muss enthalten sein)&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57776</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57776"/>
		<updated>2020-04-09T08:49:38Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* == */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Liste==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnListNew || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnResize || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnRefresh || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|Before_OnClose || OnF4&lt;br /&gt;
|-&lt;br /&gt;
| || OnF5&lt;br /&gt;
|-&lt;br /&gt;
| || OnF6&lt;br /&gt;
|-&lt;br /&gt;
| || OnF7&lt;br /&gt;
|-&lt;br /&gt;
| || OnF8&lt;br /&gt;
|-&lt;br /&gt;
| || OnF9&lt;br /&gt;
|-&lt;br /&gt;
| || OnF10&lt;br /&gt;
|-&lt;br /&gt;
| || OnF11&lt;br /&gt;
|-&lt;br /&gt;
| || OnF12&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnInsert&lt;br /&gt;
|-&lt;br /&gt;
| || OnDelete&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele Liste==&lt;br /&gt;
{{Vorlage:KlapptextFAQ&lt;br /&gt;
|liste_F12&lt;br /&gt;
|Button F12 anzeigen und mit Funktionalität versehen&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnListNew():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmListe.cmdF12.Enabled := True;&lt;br /&gt;
    frmListe.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmListe.InitButtons(frmListe);&lt;br /&gt;
    frmListe.PaintButtons(frmListe);    &lt;br /&gt;
end;              &lt;br /&gt;
&lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Vorlage:KlapptextFAQ&lt;br /&gt;
|liste_buttons&lt;br /&gt;
|Andere Buttons Mit Funktion versehen&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
Var cMyF8 : String;&lt;br /&gt;
                           &lt;br /&gt;
function OnListNew():String; &lt;br /&gt;
begin                         &lt;br /&gt;
    cMyF8  := &#039;Init&#039;; &lt;br /&gt;
    Result := &#039;&#039;;&lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnF8():string;&lt;br /&gt;
begin&lt;br /&gt;
    Meldung(&#039;Hallo &#039;+cMyF8);     &lt;br /&gt;
    Result := &#039;OK&#039;;&lt;br /&gt;
end; &lt;br /&gt;
&lt;br /&gt;
function Before_OnF8():String;&lt;br /&gt;
begin&lt;br /&gt;
    Meldung(&#039;Before Hallo &#039;+cMyF8);&lt;br /&gt;
    &lt;br /&gt;
    //Dann wird Standard F8 nicht ausgeführt&lt;br /&gt;
    Result := &#039;READY&#039;; &lt;br /&gt;
    cMyF8  := Result;&lt;br /&gt;
end;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Vorlage:KlapptextFAQ&lt;br /&gt;
|liste_F12_Auswahl&lt;br /&gt;
|Button F12 mit Auswahlfunktion&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function OnListNew():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmListe.cmdF12.Enabled := True;&lt;br /&gt;
    frmListe.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmListe.InitButtons(frmListe);&lt;br /&gt;
    frmListe.PaintButtons(frmListe);    &lt;br /&gt;
end;                                                  &lt;br /&gt;
&lt;br /&gt;
procedure OnF12();      &lt;br /&gt;
var oLines  : TStringList;&lt;br /&gt;
    oResult : TStringList;            &lt;br /&gt;
    lEsc    : Boolean;&lt;br /&gt;
    cSelect : String;&lt;br /&gt;
begin&lt;br /&gt;
    oLines := TStringList.Create();    &lt;br /&gt;
    oLines.Add(&#039;A - Test 1&#039;);&lt;br /&gt;
    oLines.Add(&#039;B - Test 2&#039;);&lt;br /&gt;
    oLines.Add(&#039;C - Test 3&#039;);&lt;br /&gt;
    &lt;br /&gt;
    oResult := GetSelectionExt(oLines, //Auswahl &lt;br /&gt;
                               &#039;Test&#039;, //Caption        &lt;br /&gt;
                               lEsc,   //Abruch? (var)            &lt;br /&gt;
                               Nil,    //uInit : DefGetSelection;&lt;br /&gt;
                               Nil,    //uOnChange : DefGetSelection;   &lt;br /&gt;
                               False,  //Sort      &lt;br /&gt;
                               -1,     //Width&lt;br /&gt;
                               False,  //MultiSel     &lt;br /&gt;
                               False   //AllLines &lt;br /&gt;
                               ); &lt;br /&gt;
    &lt;br /&gt;
    cSelect := LeftStr(oResult.Text, 1);&lt;br /&gt;
                                                 &lt;br /&gt;
    if          (cSelect = &#039;A&#039;) then begin&lt;br /&gt;
        Meldung(&#039;A&#039;);&lt;br /&gt;
    end else if (cSelect = &#039;B&#039;) then begin&lt;br /&gt;
        Meldung(&#039;B&#039;);&lt;br /&gt;
    end else if (cSelect = &#039;C&#039;) then begin&lt;br /&gt;
        Meldung(&#039;C&#039;);&lt;br /&gt;
    end;   &lt;br /&gt;
                                 &lt;br /&gt;
    MyFreeAndNil(oLines);&lt;br /&gt;
    MyFreeAndNil(oResult);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Besonderheiten==&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57775</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57775"/>
		<updated>2020-04-09T08:49:20Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Liste==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnListNew || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnResize || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnRefresh || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|Before_OnClose || OnF4&lt;br /&gt;
|-&lt;br /&gt;
| || OnF5&lt;br /&gt;
|-&lt;br /&gt;
| || OnF6&lt;br /&gt;
|-&lt;br /&gt;
| || OnF7&lt;br /&gt;
|-&lt;br /&gt;
| || OnF8&lt;br /&gt;
|-&lt;br /&gt;
| || OnF9&lt;br /&gt;
|-&lt;br /&gt;
| || OnF10&lt;br /&gt;
|-&lt;br /&gt;
| || OnF11&lt;br /&gt;
|-&lt;br /&gt;
| || OnF12&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnInsert&lt;br /&gt;
|-&lt;br /&gt;
| || OnDelete&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele Liste==&lt;br /&gt;
{{Vorlage:KlapptextFAQ&lt;br /&gt;
|liste_F12&lt;br /&gt;
|Button F12 anzeigen und mit Funktionalität versehen&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnListNew():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmListe.cmdF12.Enabled := True;&lt;br /&gt;
    frmListe.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmListe.InitButtons(frmListe);&lt;br /&gt;
    frmListe.PaintButtons(frmListe);    &lt;br /&gt;
end;              &lt;br /&gt;
&lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Vorlage:KlapptextFAQ&lt;br /&gt;
|liste_buttons&lt;br /&gt;
|Andere Buttons Mit Funktion versehen&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
Var cMyF8 : String;&lt;br /&gt;
                           &lt;br /&gt;
function OnListNew():String; &lt;br /&gt;
begin                         &lt;br /&gt;
    cMyF8  := &#039;Init&#039;; &lt;br /&gt;
    Result := &#039;&#039;;&lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnF8():string;&lt;br /&gt;
begin&lt;br /&gt;
    Meldung(&#039;Hallo &#039;+cMyF8);     &lt;br /&gt;
    Result := &#039;OK&#039;;&lt;br /&gt;
end; &lt;br /&gt;
&lt;br /&gt;
function Before_OnF8():String;&lt;br /&gt;
begin&lt;br /&gt;
    Meldung(&#039;Before Hallo &#039;+cMyF8);&lt;br /&gt;
    &lt;br /&gt;
    //Dann wird Standard F8 nicht ausgeführt&lt;br /&gt;
    Result := &#039;READY&#039;; &lt;br /&gt;
    cMyF8  := Result;&lt;br /&gt;
end;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
======&lt;br /&gt;
{{Vorlage:KlapptextFAQ&lt;br /&gt;
|liste_F12_Auswahl&lt;br /&gt;
|Button F12 mit Auswahlfunktion&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function OnListNew():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmListe.cmdF12.Enabled := True;&lt;br /&gt;
    frmListe.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmListe.InitButtons(frmListe);&lt;br /&gt;
    frmListe.PaintButtons(frmListe);    &lt;br /&gt;
end;                                                  &lt;br /&gt;
&lt;br /&gt;
procedure OnF12();      &lt;br /&gt;
var oLines  : TStringList;&lt;br /&gt;
    oResult : TStringList;            &lt;br /&gt;
    lEsc    : Boolean;&lt;br /&gt;
    cSelect : String;&lt;br /&gt;
begin&lt;br /&gt;
    oLines := TStringList.Create();    &lt;br /&gt;
    oLines.Add(&#039;A - Test 1&#039;);&lt;br /&gt;
    oLines.Add(&#039;B - Test 2&#039;);&lt;br /&gt;
    oLines.Add(&#039;C - Test 3&#039;);&lt;br /&gt;
    &lt;br /&gt;
    oResult := GetSelectionExt(oLines, //Auswahl &lt;br /&gt;
                               &#039;Test&#039;, //Caption        &lt;br /&gt;
                               lEsc,   //Abruch? (var)            &lt;br /&gt;
                               Nil,    //uInit : DefGetSelection;&lt;br /&gt;
                               Nil,    //uOnChange : DefGetSelection;   &lt;br /&gt;
                               False,  //Sort      &lt;br /&gt;
                               -1,     //Width&lt;br /&gt;
                               False,  //MultiSel     &lt;br /&gt;
                               False   //AllLines &lt;br /&gt;
                               ); &lt;br /&gt;
    &lt;br /&gt;
    cSelect := LeftStr(oResult.Text, 1);&lt;br /&gt;
                                                 &lt;br /&gt;
    if          (cSelect = &#039;A&#039;) then begin&lt;br /&gt;
        Meldung(&#039;A&#039;);&lt;br /&gt;
    end else if (cSelect = &#039;B&#039;) then begin&lt;br /&gt;
        Meldung(&#039;B&#039;);&lt;br /&gt;
    end else if (cSelect = &#039;C&#039;) then begin&lt;br /&gt;
        Meldung(&#039;C&#039;);&lt;br /&gt;
    end;   &lt;br /&gt;
                                 &lt;br /&gt;
    MyFreeAndNil(oLines);&lt;br /&gt;
    MyFreeAndNil(oResult);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Besonderheiten==&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57749</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57749"/>
		<updated>2020-03-31T14:08:58Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Beispiel zusätzliche Sortierung F4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funktionen. &lt;br /&gt;
&lt;br /&gt;
Zu finden ist das Customizing über &amp;quot;Strg+F12 - C1&amp;quot; in der entsprechenden Select-Liste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wiki custom 1.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wiki custom 2.jpg]]&lt;br /&gt;
==Beispiel zusätzliche Sortierung F4==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
var oMyFrmListe : TFrmListe;&lt;br /&gt;
    oSelect     : TfrmSelect;&lt;br /&gt;
              &lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;  &lt;br /&gt;
    oSelect                       := ofrmSelect;&lt;br /&gt;
end;    &lt;br /&gt;
&lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;               &lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
begin&lt;br /&gt;
    oMyFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
    if (not Assigned(oMyFrmListe)) then begin&lt;br /&gt;
        oMyFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;                                            &lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
        MyIdx();   &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;&lt;br /&gt;
    end;                                    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyIdx();&lt;br /&gt;
begin&lt;br /&gt;
    With oMyFrmListe do begin&lt;br /&gt;
&lt;br /&gt;
        ListNew(); &lt;br /&gt;
        &lt;br /&gt;
        SqlDirect         := &#039;SELECT * FROM TOUR_TOUREN&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN TOUR_GEBIET ON tvm_nr = ttg_gebiet&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN LKW         ON l_nr   = ttg_lkw&#039;;&lt;br /&gt;
        ListOrder         := &#039;ttg_status, ttg_nr DESC&#039;;&lt;br /&gt;
        aTabel[0]         := &#039;TOUR_TOUREN&#039;;&lt;br /&gt;
&lt;br /&gt;
        AddColumn (&#039;LKW&#039;          , &#039;ttg_lkw&#039;             , 10);&lt;br /&gt;
        AddColumn (&#039;Gebiet&#039;       , &#039;tvm_name&#039;            , 10);&lt;br /&gt;
        AddColumn (&#039;Mit-Nr&#039;       , &#039;ttg_mitnr&#039;           , 10);&lt;br /&gt;
        AddColumn (&#039;Gewicht&#039;      , &#039;ttg_gewicht&#039;         , 10, &#039;#####9&#039;      ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;KM&#039;           , &#039;ttg_km&#039;              , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;L-Datum&#039;      , &#039;ttg_ldatum&#039;          , 12);&lt;br /&gt;
        AddColumn (&#039;F-Zeit&#039;       , &#039;ttg_zeitfahr&#039;        , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;B-Zeit&#039;       , &#039;ttg_zeitbearb&#039;       , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   // Show_Field_Ja wandelt Checkbox-Einträge aus der Datenbank in J/N um&lt;br /&gt;
        AddColumn (&#039;Bemerkung&#039;    , &#039;ttg_text&#039;            , 80, Show_RichText ,ListAlign(&#039;taLeftJustify&#039;));   // Wandelt Richtextfelder zur Anzeige in einfachen Klartext um&lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  Show_Mark     ,ListAlign(&#039;taLeftJustify&#039;));   // ShowMark ist das bekannte Markierverhalten von Listen&lt;br /&gt;
&lt;br /&gt;
        ListShow(&#039;TOUTMYA481&#039;, oMyFrmListe.Query, oMyFrmListe.DBGrid);&lt;br /&gt;
        &lt;br /&gt;
        oSelect.LockScripter(); // Damit der Scripter im Speicher gehalten wird.&lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
end;    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Funktionen F10==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;B&#039;,&#039;XXX 2&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;C&#039;,&#039;XXX 3&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
var oFrmListe : TFrmListe;&lt;br /&gt;
begin&lt;br /&gt;
    oFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
                                     &lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
    &lt;br /&gt;
        Meldung(&#039;F10 Klassenname = &#039;+oFrmListe.ClassName); &lt;br /&gt;
        &lt;br /&gt;
        if (lower(oFrmListe.ClassName) = &#039;tfrmauftrag&#039;) then begin&lt;br /&gt;
            Meldung(&#039;Auftrags-Nr. = &#039;+oFrmListe.Query.A2C(&#039;a_nr&#039;));&lt;br /&gt;
        end;&lt;br /&gt;
        &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;        &lt;br /&gt;
    end;                                    &lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57748</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57748"/>
		<updated>2020-03-31T14:04:11Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funktionen. &lt;br /&gt;
&lt;br /&gt;
Zu finden ist das Customizing über &amp;quot;Strg+F12 - C1&amp;quot; in der entsprechenden Select-Liste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wiki custom 1.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wiki custom 2.jpg]]&lt;br /&gt;
==Beispiel zusätzliche Sortierung F4==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
var oMyFrmListe : TFrmListe;&lt;br /&gt;
    oSelect     : TfrmSelect;&lt;br /&gt;
              &lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;  &lt;br /&gt;
    oSelect                       := ofrmSelect;&lt;br /&gt;
end;    &lt;br /&gt;
&lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;               &lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
begin&lt;br /&gt;
    oMyFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
    if (not Assigned(oMyFrmListe)) then begin&lt;br /&gt;
        oMyFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;                                            &lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
        MyIdx();   &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;&lt;br /&gt;
    end;                                    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyIdx();&lt;br /&gt;
begin&lt;br /&gt;
    With oMyFrmListe do begin&lt;br /&gt;
&lt;br /&gt;
        ListNew(); &lt;br /&gt;
        &lt;br /&gt;
        SqlDirect         := &#039;SELECT * FROM TOUR_TOUREN&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN TOUR_GEBIET ON tvm_nr = ttg_gebiet&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN LKW         ON l_nr   = ttg_lkw&#039;;&lt;br /&gt;
        ListOrder         := &#039;ttg_status, ttg_nr DESC&#039;;&lt;br /&gt;
        aTabel[0]         := &#039;TOUR_TOUREN&#039;;&lt;br /&gt;
&lt;br /&gt;
        AddColumn (&#039;LKW&#039;          , &#039;ttg_lkw&#039;             , 10);&lt;br /&gt;
        AddColumn (&#039;Gebiet&#039;       , &#039;tvm_name&#039;            , 10);&lt;br /&gt;
        AddColumn (&#039;Mit-Nr&#039;       , &#039;ttg_mitnr&#039;           , 10);&lt;br /&gt;
        AddColumn (&#039;Gewicht&#039;      , &#039;ttg_gewicht&#039;         , 10, &#039;#####9&#039;      ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;KM&#039;           , &#039;ttg_km&#039;              , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;L-Datum&#039;      , &#039;ttg_ldatum&#039;          , 12);&lt;br /&gt;
        AddColumn (&#039;F-Zeit&#039;       , &#039;ttg_zeitfahr&#039;        , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;B-Zeit&#039;       , &#039;ttg_zeitbearb&#039;       , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   // Show_Field_Ja wandelt Checkbox-Einträge aus der Datenbank in J/N um&lt;br /&gt;
        AddColumn (&#039;Bemerkung&#039;    , &#039;ttg_text&#039;            , 80, Show_RichText ,ListAlign(&#039;taLeftJustify&#039;));   // Wandelt Richtextfelder zur Anzeige in einfachen Klartext um&lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  Show_Mark     ,ListAlign(&#039;taLeftJustify&#039;));   // ShowMark ist das bekannte Markierverhalten von Listen&lt;br /&gt;
&lt;br /&gt;
        ListShow(&#039;TOUTMYA481&#039;, oMyFrmListe.Query, oMyFrmListe.DBGrid);&lt;br /&gt;
        &lt;br /&gt;
        oSelect.LockScripter();&lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
end;    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Funktionen F10==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;B&#039;,&#039;XXX 2&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;C&#039;,&#039;XXX 3&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
var oFrmListe : TFrmListe;&lt;br /&gt;
begin&lt;br /&gt;
    oFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
                                     &lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
    &lt;br /&gt;
        Meldung(&#039;F10 Klassenname = &#039;+oFrmListe.ClassName); &lt;br /&gt;
        &lt;br /&gt;
        if (lower(oFrmListe.ClassName) = &#039;tfrmauftrag&#039;) then begin&lt;br /&gt;
            Meldung(&#039;Auftrags-Nr. = &#039;+oFrmListe.Query.A2C(&#039;a_nr&#039;));&lt;br /&gt;
        end;&lt;br /&gt;
        &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;        &lt;br /&gt;
    end;                                    &lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57692</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57692"/>
		<updated>2020-03-25T10:59:12Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Das &#039;&#039;&#039;kostenpflichtige&#039;&#039;&#039; Modul Customize erlaubt die Individualisierug vom OBS und kann die Funktionalität der Software entscheidend erweitern, um z. B. Arbeitsabläufe zu verbessern oder die Einhaltung bestimmter Vorgaben einzuhalten. So lassen sich u. a. Zugriffe auf Felder steuern oder Daten in Eingabemasken vorbelegen oder prüfen. Jedes [https://de.wikipedia.org/wiki/Makro Makro] kann systemweit oder pro Benutzer hinterlegt werden.&lt;br /&gt;
==Aktivierung Modul Customize==&lt;br /&gt;
Der Aktivitätsstatus des Moduls wird über einen [[OBS/Stammdaten/Programmparameter|Programmparameter]] gesteuert, welcher nur Administratoren zugänglich ist. Die Freischaltung erfolgt durch den Support auf Anfrage.&lt;br /&gt;
==Zugriff auf die Einstellungen==&lt;br /&gt;
Der Zugriff auf die Customize-Einstellungen erfolgt über die [[OBS/System/Rechte_Verwaltung|&#039;&#039;&#039;Rechte Verwaltung&#039;&#039;&#039;]] {{Key|strg}} + {{F12}}. Für Customize-Scripte wählen Sie den entsprechenden Punkt in der sich öffnenden Auswahlbox:&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen|Listen: &#039;&#039;&#039;A Customize Listen&#039;&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits|Eingabemasken: &#039;&#039;&#039;A Customize Edit&#039;&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen|Select-Listen: &#039;&#039;&#039;C1 Funktionen Auswahlbox&#039;&#039;&#039;]]&lt;br /&gt;
==Benutzergruppen==&lt;br /&gt;
Den Wiki-Seite zu den Benutzergruppe finden Sie [[OBS/Stammdaten/Weitere Stammdaten/Benutzer Gruppen|hier]].&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=57691</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=57691"/>
		<updated>2020-03-25T10:58:51Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Eingabemaske==&lt;br /&gt;
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnEdFormInit || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnEdInit || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnEdVorb || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|OnEdShow || OnF4&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF5&lt;br /&gt;
|-&lt;br /&gt;
|OnEdReadDirect || OnF6&lt;br /&gt;
|-&lt;br /&gt;
|OnEdRead || OnF7&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF8&lt;br /&gt;
|-&lt;br /&gt;
|OnEdCheck || OnF9&lt;br /&gt;
|-&lt;br /&gt;
|OnEdqSQL || OnF10&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSaveDirect || OnF11&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSave || OnF12&lt;br /&gt;
|-&lt;br /&gt;
|CheckIfChanged || OnPGDN&lt;br /&gt;
|-&lt;br /&gt;
|OnEdClose || OnPGUP&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
Die hier aufgeführten &#039;&#039;&#039;internen Funktionen&#039;&#039;&#039; sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.&lt;br /&gt;
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039; gegeben werden. Für Tastatur-Funktionen gilt dies nur für &#039;&#039;&#039;OnESC&#039;&#039;&#039;.}}&lt;br /&gt;
==Zugriff auf Komponenten==&lt;br /&gt;
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen &#039;&#039;&#039;xGet&#039;&#039;&#039; (Daten lesen) und &#039;&#039;&#039;xSet&#039;&#039;&#039; (Daten schreiben) verwenden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Auslesen einer Komponente&lt;br /&gt;
cName := FrmEdit.xGet(&#039;a_name&#039;);&lt;br /&gt;
//Setzen einer Komponente&lt;br /&gt;
FrmEdit.xSet(&#039;a_name&#039;,&amp;quot;Meier&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Globale Variablen der Eingabemaske==&lt;br /&gt;
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property&#039;s stehen zu Verfügung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Property !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|lEditMode || True  = Insertmodus False = Editmodus&lt;br /&gt;
|-&lt;br /&gt;
|lDataUpdate || True = Daten des Edits wurden verändert&lt;br /&gt;
|-&lt;br /&gt;
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)&lt;br /&gt;
|-&lt;br /&gt;
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen&lt;br /&gt;
|-&lt;br /&gt;
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf&lt;br /&gt;
|-&lt;br /&gt;
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)&lt;br /&gt;
|}&lt;br /&gt;
==Beispiele Eingabemaske==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aufruf von weiteren Macros innerhalb des Macros===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
var oParams: TStringlist; //Parameter für Aufruf&lt;br /&gt;
begin&lt;br /&gt;
    //Aufruf ohne Parameter&lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;);&lt;br /&gt;
&lt;br /&gt;
    //Aufruf mit Parameter&lt;br /&gt;
    oParams := TStringlist.Create;&lt;br /&gt;
    oParams.Add(&#039;TEST456&#039;);      &lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;, frmEdit, oParams);  &lt;br /&gt;
    MyFreeAndNil(oParams);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingaben prüfen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdCheck():string;&lt;br /&gt;
var oSte     : TEdit;&lt;br /&gt;
    cEdit    : String;&lt;br /&gt;
    cVorname : String;&lt;br /&gt;
begin&lt;br /&gt;
    if (FrmEdit.lEditMode) then begin&lt;br /&gt;
        Meldung(&#039;Edit Mode True&#039;);&lt;br /&gt;
    end else begin&lt;br /&gt;
        Meldung(&#039;Edit Mode False&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
    Meldung(FrmEdit.stred_db_a_name.Text);&lt;br /&gt;
    oSte := FrmEdit.FindComponent(&#039;stred_db_a_name&#039;);&lt;br /&gt;
    Meldung(oSte.Text);&lt;br /&gt;
    cVorname:= FrmEdit.xGet(&#039;a_vorname&#039;);&lt;br /&gt;
    Meldung(cVorname);&lt;br /&gt;
    if (Empty(cVorname)) then begin&lt;br /&gt;
        FrmEdit.lCheckOk := False;&lt;br /&gt;
        Meldung(&#039;Bitte Vorname eingtragen&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Positionen in Vorgängen blockieren===&lt;br /&gt;
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Name: AN_VORGANG_EDIT Function OpenClose&lt;br /&gt;
{{Hinweis| Der Prefix &amp;quot;AN&amp;quot; steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;&lt;br /&gt;
begin&lt;br /&gt;
   //DebugLine(&#039;cVgNr&#039;+cVgNr);&lt;br /&gt;
&lt;br /&gt;
    //02 = Möbel&lt;br /&gt;
    Result := oOBS.cBenutzergruppe &amp;lt;&amp;gt; &#039;02&#039;;  &lt;br /&gt;
    &lt;br /&gt;
    if (Result) then begin  &lt;br /&gt;
        //Wenn Positionen vorhanden dann kein Positions-Edit&lt;br /&gt;
        if (DB_LSeek(oDB,&#039;ANGPOS&#039;,&#039;az_nr=&#039;+DB_SqlVal(cVGNr))) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
                          &lt;br /&gt;
    if (Result) then begin&lt;br /&gt;
                &lt;br /&gt;
        //DebugLine(iif(lInsertMode,&#039;True&#039;,&#039;False&#039;));&lt;br /&gt;
        &lt;br /&gt;
        //Bei nicht Insert immer False&lt;br /&gt;
        if (lInsertMode = False) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==User-Reiter==&lt;br /&gt;
In OBS ab Version 003191 können Edit-Masken per Customizing-Script um eigene Reiter erweitert werden. Diese darin verwalteten Felder können mit [[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|eigenen Datenbankfeldern]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Usertab.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Beispiel-Userdatenbank===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
#DBNAME TODO&lt;br /&gt;
&lt;br /&gt;
  #FELDNAME USER_BEMERK           , C  ,    8 ,  0 , &amp;quot;CCCCCCCC&amp;quot;&lt;br /&gt;
  #FELDNAME USER_WGR              , C ,     3 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
  #FELDNAME USER_TOGGLE           , C ,     1 ,  0 , &amp;quot;C&amp;quot;&lt;br /&gt;
  #FELDNAME USER_BETRAG           , N  ,   11 ,  0 , &amp;quot;NNNNNNNN.NNNN&amp;quot;&lt;br /&gt;
  #FELDNAME USER_DATUM            , D  ,    4 ,  0 , &amp;quot;TT.MM.JJ&amp;quot;&lt;br /&gt;
  #FELDNAME USER_LANGTEXT         , M  , 2000 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Beispielscript===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit(): String;&lt;br /&gt;
var oTab : TTabSheet;&lt;br /&gt;
    oStr : TStringEdit;     &lt;br /&gt;
    oLbl : TLabel;   &lt;br /&gt;
    oNEd : TNumericEdit;    &lt;br /&gt;
    oDVE : TDateValEdit;  &lt;br /&gt;
    oChB : TxCheckBox;   &lt;br /&gt;
    oCBL : TCombiListe;      &lt;br /&gt;
    oTRE : TTextRichEdit;&lt;br /&gt;
begin&lt;br /&gt;
    oTab := frmEdit.AddUserTab();               // Erstellt neuen User-Tab auf dem Edit&lt;br /&gt;
    if assigned(oTab) then begin&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Textzeile:&#039;;   &lt;br /&gt;
        oLbl.Top     := 10;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oStr         := TStringEdit.Create(frmEdit);&lt;br /&gt;
        oStr.Name    := &#039;stred_db_user_bemerk&#039;; // Damit automatisches Speichern/Laden von Datenbankfeldern funktioniert, muss im Komponentennamen &#039;_db_&#039; und der Feldname stehen.&lt;br /&gt;
        oStr.Top     := 10;        &lt;br /&gt;
        oStr.Left    := 130;&lt;br /&gt;
        oStr.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Summe:&#039;;   &lt;br /&gt;
        oLbl.Top     := 40;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oNEd         := TNumericEdit.Create(frmEdit);&lt;br /&gt;
        oNEd.Name    := &#039;numed_db_user_betrag&#039;;&lt;br /&gt;
        oNEd.Top     := 40;        &lt;br /&gt;
        oNEd.Left    := 130;&lt;br /&gt;
        oNEd.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Datum:&#039;;   &lt;br /&gt;
        oLbl.Top     := 70;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oDVE         := TDateValEdit.Create(frmEdit);&lt;br /&gt;
        oDVE.Name    := &#039;datev_db_user_datum&#039;;&lt;br /&gt;
        oDVE.Top     := 70;        &lt;br /&gt;
        oDVE.Left    := 130;&lt;br /&gt;
        oDVE.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Schalter:&#039;;   &lt;br /&gt;
        oLbl.Top     := 100;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oChB         := TxCheckBox.Create(frmEdit);&lt;br /&gt;
        oChB.Name    := &#039;cb_db_user_toggle&#039;;   &lt;br /&gt;
        oChB.Caption := &#039;Schalter&#039;;&lt;br /&gt;
        oChB.Top     := 100;        &lt;br /&gt;
        oChB.Left    := 130;&lt;br /&gt;
        oChB.Parent  := oTab;  &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------      &lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Suchliste:&#039;;   &lt;br /&gt;
        oLbl.Top     := 130;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
             &lt;br /&gt;
        oCBL         := FrmEdit.AddCombiliste();   &lt;br /&gt;
        oCBL.Name    := &#039;cbl_db_user_wgr&#039;;    &lt;br /&gt;
        oCBL.Top     := 130;                &lt;br /&gt;
        oCBL.Left    := 130;            &lt;br /&gt;
        oCBL.Parent  := oTab;    &lt;br /&gt;
                                      &lt;br /&gt;
        oCBL.GetSuli.Tablename         := &#039;WARENGR&#039;;          // Verknüpfte Tabelle  &lt;br /&gt;
        oCBL.GetSuli.CompareField      := &#039;wg_nr&#039;;            // Feld mit eindeutiger ID zur Zuordnung&lt;br /&gt;
        oCBL.GetSuli.ShowField         := &#039;wg_name&#039;;          // Feld, das als Bezeichnung in der Kombiliste angezeigt wird&lt;br /&gt;
        oCBL.GetSuli.Caption           := ML(&#039;Warengruppe&#039;);  // Fenstertitel der Suchliste, die sich beim Klick auf # öffnet&lt;br /&gt;
        oCBL.GetSuli.SQLOrder          := &#039;wg_nr&#039;;            // Feld, nach dem die Suchliste sortiert werden soll&lt;br /&gt;
        oCBL.GetSuli.SQlWhere          := &#039;&#039;;                 // Filter für Daten in der Suchliste, z. bsp. &#039;az_nr like &amp;quot;5%&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
        oCBL.GetSuli.Width             := 500;                // Weite des Suchlistenfensters &lt;br /&gt;
        oCBL.GetSuli.Height            := 400;                // Höhe des Suchlistenfensters&lt;br /&gt;
              &lt;br /&gt;
        oCBL.GetSuli.InitColumn(&#039;Nr&#039;,  &#039;wg_nr&#039;,   30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
        oCBL.GetSuli.AddColumn(&#039;Name&#039;, &#039;wg_name&#039;, 30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
&lt;br /&gt;
        // Die erste Spalte der Suchliste muss mit InitColumn erstellt werden, alle weiteren mit AddColumn.&lt;br /&gt;
        // Parameter:&lt;br /&gt;
&lt;br /&gt;
        // Anzeigename        : String, &lt;br /&gt;
        // Feldname           : String, &lt;br /&gt;
        // relative_Breite    : Integer, &lt;br /&gt;
        // Anzeigefunktion    : Function of String, vorerst immer nil, &lt;br /&gt;
        // Anzeigenmaskierung : String = &#039;&#039;, Beispiel: &#039;##9,99&#039;: Es werden immer eine Vorkommastelle und immer zwei Nachkommastellen angezeigt, und optional zwei zusätzliche Vorkommastellen, wenn vorhanden.&lt;br /&gt;
        // Ausrichtung        : System.Classes.TAlignment.[taLeftJustify, taRightJustify, taCenter]&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
        oTRE         := TTextRichEdit.Create(frmEdit);&lt;br /&gt;
        oTRE.Name    := &#039;riced_db_user_langtext&#039;;&lt;br /&gt;
        oTRE.Top     := 170;&lt;br /&gt;
        oTRE.Left    := 10;&lt;br /&gt;
        oTRE.Height  := 300;&lt;br /&gt;
        oTRE.Width   := 400;   &lt;br /&gt;
        oTRE.RulerH  := false; &lt;br /&gt;
        oTRE.Parent  := oTab;        &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    end;    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Besonderheiten==&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57690</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57690"/>
		<updated>2020-03-25T10:58:33Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Liste==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnListNew || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnResize || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnRefresh || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|Before_OnClose || OnF4&lt;br /&gt;
|-&lt;br /&gt;
| || OnF5&lt;br /&gt;
|-&lt;br /&gt;
| || OnF6&lt;br /&gt;
|-&lt;br /&gt;
| || OnF7&lt;br /&gt;
|-&lt;br /&gt;
| || OnF8&lt;br /&gt;
|-&lt;br /&gt;
| || OnF9&lt;br /&gt;
|-&lt;br /&gt;
| || OnF10&lt;br /&gt;
|-&lt;br /&gt;
| || OnF11&lt;br /&gt;
|-&lt;br /&gt;
| || OnF12&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnInsert&lt;br /&gt;
|-&lt;br /&gt;
| || OnDelete&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele Liste==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnListNew():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmListe.cmdF12.Enabled := True;&lt;br /&gt;
    frmListe.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmListe.InitButtons(frmListe);&lt;br /&gt;
    frmListe.PaintButtons(frmListe);    &lt;br /&gt;
end;              &lt;br /&gt;
&lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Andere Buttons Mit Funktion versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
Var cMyF8 : String;&lt;br /&gt;
                           &lt;br /&gt;
function OnListNew():String; &lt;br /&gt;
begin                         &lt;br /&gt;
    cMyF8  := &#039;Init&#039;; &lt;br /&gt;
    Result := &#039;&#039;;&lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnF8():string;&lt;br /&gt;
begin&lt;br /&gt;
    Meldung(&#039;Hallo &#039;+cMyF8);     &lt;br /&gt;
    Result := &#039;OK&#039;;&lt;br /&gt;
end; &lt;br /&gt;
&lt;br /&gt;
function Before_OnF8():String;&lt;br /&gt;
begin&lt;br /&gt;
    Meldung(&#039;Before Hallo &#039;+cMyF8);&lt;br /&gt;
    &lt;br /&gt;
    //Dann wird Standard F8 nicht ausgeführt&lt;br /&gt;
    Result := &#039;READY&#039;; &lt;br /&gt;
    cMyF8  := Result;&lt;br /&gt;
end;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Button F12 mit Auswahlfunktion===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function OnListNew():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmListe.cmdF12.Enabled := True;&lt;br /&gt;
    frmListe.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmListe.InitButtons(frmListe);&lt;br /&gt;
    frmListe.PaintButtons(frmListe);    &lt;br /&gt;
end;                                                  &lt;br /&gt;
&lt;br /&gt;
procedure OnF12();      &lt;br /&gt;
var oLines  : TStringList;&lt;br /&gt;
    oResult : TStringList;            &lt;br /&gt;
    lEsc    : Boolean;&lt;br /&gt;
    cSelect : String;&lt;br /&gt;
begin&lt;br /&gt;
    oLines := TStringList.Create();    &lt;br /&gt;
    oLines.Add(&#039;A - Test 1&#039;);&lt;br /&gt;
    oLines.Add(&#039;B - Test 2&#039;);&lt;br /&gt;
    oLines.Add(&#039;C - Test 3&#039;);&lt;br /&gt;
    &lt;br /&gt;
    oResult := GetSelectionExt(oLines, //Auswahl &lt;br /&gt;
                               &#039;Test&#039;, //Caption        &lt;br /&gt;
                               lEsc,   //Abruch? (var)            &lt;br /&gt;
                               Nil,    //uInit : DefGetSelection;&lt;br /&gt;
                               Nil,    //uOnChange : DefGetSelection;   &lt;br /&gt;
                               False,  //Sort      &lt;br /&gt;
                               -1,     //Width&lt;br /&gt;
                               False,  //MultiSel     &lt;br /&gt;
                               False   //AllLines &lt;br /&gt;
                               ); &lt;br /&gt;
    &lt;br /&gt;
    cSelect := LeftStr(oResult.Text, 1);&lt;br /&gt;
                                                 &lt;br /&gt;
    if          (cSelect = &#039;A&#039;) then begin&lt;br /&gt;
        Meldung(&#039;A&#039;);&lt;br /&gt;
    end else if (cSelect = &#039;B&#039;) then begin&lt;br /&gt;
        Meldung(&#039;B&#039;);&lt;br /&gt;
    end else if (cSelect = &#039;C&#039;) then begin&lt;br /&gt;
        Meldung(&#039;C&#039;);&lt;br /&gt;
    end;   &lt;br /&gt;
                                 &lt;br /&gt;
    MyFreeAndNil(oLines);&lt;br /&gt;
    MyFreeAndNil(oResult);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Besonderheiten==&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57689</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57689"/>
		<updated>2020-03-25T10:57:58Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Das &#039;&#039;&#039;kostenpflichtige&#039;&#039;&#039; Modul Customize erlaubt die Individualisierug vom OBS und kann die Funktionalität der Software entscheidend erweitern, um z. B. Arbeitsabläufe zu verbessern oder die Einhaltung bestimmter Vorgaben einzuhalten. So lassen sich u. a. Zugriffe auf Felder steuern oder Daten in Eingabemasken vorbelegen oder prüfen. Jedes [https://de.wikipedia.org/wiki/Makro Makro] kann systemweit oder pro Benutzer hinterlegt werden.&lt;br /&gt;
==Aktivierung Modul Customize==&lt;br /&gt;
Der Aktivitätsstatus des Moduls wird über einen [[OBS/Stammdaten/Programmparameter|Programmparameter]] gesteuert, welcher nur Administratoren zugänglich ist. Die Freischaltung erfolgt durch den Support auf Anfrage.&lt;br /&gt;
==Zugriff auf die Einstellungen==&lt;br /&gt;
Der Zugriff auf die Customize-Einstellungen erfolgt über die [[OBS/System/Rechte_Verwaltung|&#039;&#039;&#039;Rechte Verwaltung&#039;&#039;&#039;]] {{Key|strg}} + {{F12}}. Für Customize-Scripte wählen Sie den entsprechenden Punkt in der sich öffnenden Auswahlbox:&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen|Listen: &#039;&#039;&#039;A Customize Listen&#039;&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits|Eingabemasken: &#039;&#039;&#039;A Customize Edit&#039;&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen|Select-Listen: &#039;&#039;&#039;C1 Funktionen Auswahlbox&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=Customizing Erweiterung=&lt;br /&gt;
==Benutzergruppen==&lt;br /&gt;
Den Wiki-Seite zu den Benutzergruppe finden Sie [[OBS/Stammdaten/Weitere Stammdaten/Benutzer Gruppen|hier]].&lt;br /&gt;
&lt;br /&gt;
=Besonderheiten=&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57688</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57688"/>
		<updated>2020-03-25T10:57:47Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Das &#039;&#039;&#039;kostenpflichtige&#039;&#039;&#039; Modul Customize erlaubt die Individualisierug vom OBS und kann die Funktionalität der Software entscheidend erweitern, um z. B. Arbeitsabläufe zu verbessern oder die Einhaltung bestimmter Vorgaben einzuhalten. So lassen sich u. a. Zugriffe auf Felder steuern oder Daten in Eingabemasken vorbelegen oder prüfen. Jedes [https://de.wikipedia.org/wiki/Makro Makro] kann systemweit oder pro Benutzer hinterlegt werden.&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
==Aktivierung Modul Customize==&lt;br /&gt;
Der Aktivitätsstatus des Moduls wird über einen [[OBS/Stammdaten/Programmparameter|Programmparameter]] gesteuert, welcher nur Administratoren zugänglich ist. Die Freischaltung erfolgt durch den Support auf Anfrage.&lt;br /&gt;
==Zugriff auf die Einstellungen==&lt;br /&gt;
Der Zugriff auf die Customize-Einstellungen erfolgt über die [[OBS/System/Rechte_Verwaltung|&#039;&#039;&#039;Rechte Verwaltung&#039;&#039;&#039;]] {{Key|strg}} + {{F12}}. Für Customize-Scripte wählen Sie den entsprechenden Punkt in der sich öffnenden Auswahlbox:&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen|Listen: &#039;&#039;&#039;A Customize Listen&#039;&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits|Eingabemasken: &#039;&#039;&#039;A Customize Edit&#039;&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen|Select-Listen: &#039;&#039;&#039;C1 Funktionen Auswahlbox&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=Customizing Erweiterung=&lt;br /&gt;
==Benutzergruppen==&lt;br /&gt;
Den Wiki-Seite zu den Benutzergruppe finden Sie [[OBS/Stammdaten/Weitere Stammdaten/Benutzer Gruppen|hier]].&lt;br /&gt;
&lt;br /&gt;
=Besonderheiten=&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57687</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57687"/>
		<updated>2020-03-25T10:57:04Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Zugriff auf die Einstellungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Das &#039;&#039;&#039;kostenpflichtige&#039;&#039;&#039; Modul Customize erlaubt die Individualisierug vom OBS und kann die Funktionalität der Software entscheidend erweitern, um z. B. Arbeitsabläufe zu verbessern oder die Einhaltung bestimmter Vorgaben einzuhalten. So lassen sich u. a. Zugriffe auf Felder steuern oder Daten in Eingabemasken vorbelegen oder prüfen. Jedes [https://de.wikipedia.org/wiki/Makro Makro] kann systemweit oder pro Benutzer hinterlegt werden.&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
==Aktivierung Modul Customize==&lt;br /&gt;
Der Aktivitätsstatus des Moduls wird über einen [[OBS/Stammdaten/Programmparameter|Programmparameter]] gesteuert, welcher nur Administratoren zugänglich ist. Die Freischaltung erfolgt durch den Support auf Anfrage.&lt;br /&gt;
==Zugriff auf die Einstellungen==&lt;br /&gt;
Der Zugriff auf die Customize-Einstellungen erfolgt über die [[OBS/System/Rechte_Verwaltung|&#039;&#039;&#039;Rechte Verwaltung&#039;&#039;&#039;]] {{Key|strg}} + {{F12}}. Für Customize-Scripte wählen Sie den entsprechenden Punkt in der sich öffnenden Auswahlbox:&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen|Listen: &#039;&#039;&#039;A Customize Listen&#039;&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits|Eingabemasken: &#039;&#039;&#039;A Customize Edit&#039;&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen|Select-Listen: &#039;&#039;&#039;C1 Funktionen Auswahlbox&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=Customizing Erweiterung=&lt;br /&gt;
==Benutzergruppen==&lt;br /&gt;
Den Wiki-Seite zu den Benutzergruppe finden Sie [[OBS/Stammdaten/Weitere Stammdaten/Benutzer Gruppen|hier]].&lt;br /&gt;
&lt;br /&gt;
=Besonderheiten=&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;br /&gt;
&lt;br /&gt;
=User-Reiter=&lt;br /&gt;
In OBS ab Version 003191 können Edit-Masken per Customizing-Script um eigene Reiter erweitert werden. Diese darin verwalteten Felder können mit [[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|eigenen Datenbankfeldern]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Usertab.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Beispiel-Userdatenbank===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
#DBNAME TODO&lt;br /&gt;
&lt;br /&gt;
  #FELDNAME USER_BEMERK           , C  ,    8 ,  0 , &amp;quot;CCCCCCCC&amp;quot;&lt;br /&gt;
  #FELDNAME USER_WGR              , C ,     3 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
  #FELDNAME USER_TOGGLE           , C ,     1 ,  0 , &amp;quot;C&amp;quot;&lt;br /&gt;
  #FELDNAME USER_BETRAG           , N  ,   11 ,  0 , &amp;quot;NNNNNNNN.NNNN&amp;quot;&lt;br /&gt;
  #FELDNAME USER_DATUM            , D  ,    4 ,  0 , &amp;quot;TT.MM.JJ&amp;quot;&lt;br /&gt;
  #FELDNAME USER_LANGTEXT         , M  , 2000 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Beispielscript===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit(): String;&lt;br /&gt;
var oTab : TTabSheet;&lt;br /&gt;
    oStr : TStringEdit;     &lt;br /&gt;
    oLbl : TLabel;   &lt;br /&gt;
    oNEd : TNumericEdit;    &lt;br /&gt;
    oDVE : TDateValEdit;  &lt;br /&gt;
    oChB : TxCheckBox;   &lt;br /&gt;
    oCBL : TCombiListe;      &lt;br /&gt;
    oTRE : TTextRichEdit;&lt;br /&gt;
begin&lt;br /&gt;
    oTab := frmEdit.AddUserTab();               // Erstellt neuen User-Tab auf dem Edit&lt;br /&gt;
    if assigned(oTab) then begin&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Textzeile:&#039;;   &lt;br /&gt;
        oLbl.Top     := 10;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oStr         := TStringEdit.Create(frmEdit);&lt;br /&gt;
        oStr.Name    := &#039;stred_db_user_bemerk&#039;; // Damit automatisches Speichern/Laden von Datenbankfeldern funktioniert, muss im Komponentennamen &#039;_db_&#039; und der Feldname stehen.&lt;br /&gt;
        oStr.Top     := 10;        &lt;br /&gt;
        oStr.Left    := 130;&lt;br /&gt;
        oStr.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Summe:&#039;;   &lt;br /&gt;
        oLbl.Top     := 40;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oNEd         := TNumericEdit.Create(frmEdit);&lt;br /&gt;
        oNEd.Name    := &#039;numed_db_user_betrag&#039;;&lt;br /&gt;
        oNEd.Top     := 40;        &lt;br /&gt;
        oNEd.Left    := 130;&lt;br /&gt;
        oNEd.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Datum:&#039;;   &lt;br /&gt;
        oLbl.Top     := 70;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oDVE         := TDateValEdit.Create(frmEdit);&lt;br /&gt;
        oDVE.Name    := &#039;datev_db_user_datum&#039;;&lt;br /&gt;
        oDVE.Top     := 70;        &lt;br /&gt;
        oDVE.Left    := 130;&lt;br /&gt;
        oDVE.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Schalter:&#039;;   &lt;br /&gt;
        oLbl.Top     := 100;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oChB         := TxCheckBox.Create(frmEdit);&lt;br /&gt;
        oChB.Name    := &#039;cb_db_user_toggle&#039;;   &lt;br /&gt;
        oChB.Caption := &#039;Schalter&#039;;&lt;br /&gt;
        oChB.Top     := 100;        &lt;br /&gt;
        oChB.Left    := 130;&lt;br /&gt;
        oChB.Parent  := oTab;  &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------      &lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Suchliste:&#039;;   &lt;br /&gt;
        oLbl.Top     := 130;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
             &lt;br /&gt;
        oCBL         := FrmEdit.AddCombiliste();   &lt;br /&gt;
        oCBL.Name    := &#039;cbl_db_user_wgr&#039;;    &lt;br /&gt;
        oCBL.Top     := 130;                &lt;br /&gt;
        oCBL.Left    := 130;            &lt;br /&gt;
        oCBL.Parent  := oTab;    &lt;br /&gt;
                                      &lt;br /&gt;
        oCBL.GetSuli.Tablename         := &#039;WARENGR&#039;;          // Verknüpfte Tabelle  &lt;br /&gt;
        oCBL.GetSuli.CompareField      := &#039;wg_nr&#039;;            // Feld mit eindeutiger ID zur Zuordnung&lt;br /&gt;
        oCBL.GetSuli.ShowField         := &#039;wg_name&#039;;          // Feld, das als Bezeichnung in der Kombiliste angezeigt wird&lt;br /&gt;
        oCBL.GetSuli.Caption           := ML(&#039;Warengruppe&#039;);  // Fenstertitel der Suchliste, die sich beim Klick auf # öffnet&lt;br /&gt;
        oCBL.GetSuli.SQLOrder          := &#039;wg_nr&#039;;            // Feld, nach dem die Suchliste sortiert werden soll&lt;br /&gt;
        oCBL.GetSuli.SQlWhere          := &#039;&#039;;                 // Filter für Daten in der Suchliste, z. bsp. &#039;az_nr like &amp;quot;5%&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
        oCBL.GetSuli.Width             := 500;                // Weite des Suchlistenfensters &lt;br /&gt;
        oCBL.GetSuli.Height            := 400;                // Höhe des Suchlistenfensters&lt;br /&gt;
              &lt;br /&gt;
        oCBL.GetSuli.InitColumn(&#039;Nr&#039;,  &#039;wg_nr&#039;,   30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
        oCBL.GetSuli.AddColumn(&#039;Name&#039;, &#039;wg_name&#039;, 30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
&lt;br /&gt;
        // Die erste Spalte der Suchliste muss mit InitColumn erstellt werden, alle weiteren mit AddColumn.&lt;br /&gt;
        // Parameter:&lt;br /&gt;
&lt;br /&gt;
        // Anzeigename        : String, &lt;br /&gt;
        // Feldname           : String, &lt;br /&gt;
        // relative_Breite    : Integer, &lt;br /&gt;
        // Anzeigefunktion    : Function of String, vorerst immer nil, &lt;br /&gt;
        // Anzeigenmaskierung : String = &#039;&#039;, Beispiel: &#039;##9,99&#039;: Es werden immer eine Vorkommastelle und immer zwei Nachkommastellen angezeigt, und optional zwei zusätzliche Vorkommastellen, wenn vorhanden.&lt;br /&gt;
        // Ausrichtung        : System.Classes.TAlignment.[taLeftJustify, taRightJustify, taCenter]&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
        oTRE         := TTextRichEdit.Create(frmEdit);&lt;br /&gt;
        oTRE.Name    := &#039;riced_db_user_langtext&#039;;&lt;br /&gt;
        oTRE.Top     := 170;&lt;br /&gt;
        oTRE.Left    := 10;&lt;br /&gt;
        oTRE.Height  := 300;&lt;br /&gt;
        oTRE.Width   := 400;   &lt;br /&gt;
        oTRE.RulerH  := false; &lt;br /&gt;
        oTRE.Parent  := oTab;        &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    end;    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57686</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize&amp;diff=57686"/>
		<updated>2020-03-25T10:56:56Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Das &#039;&#039;&#039;kostenpflichtige&#039;&#039;&#039; Modul Customize erlaubt die Individualisierug vom OBS und kann die Funktionalität der Software entscheidend erweitern, um z. B. Arbeitsabläufe zu verbessern oder die Einhaltung bestimmter Vorgaben einzuhalten. So lassen sich u. a. Zugriffe auf Felder steuern oder Daten in Eingabemasken vorbelegen oder prüfen. Jedes [https://de.wikipedia.org/wiki/Makro Makro] kann systemweit oder pro Benutzer hinterlegt werden.&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
==Aktivierung Modul Customize==&lt;br /&gt;
Der Aktivitätsstatus des Moduls wird über einen [[OBS/Stammdaten/Programmparameter|Programmparameter]] gesteuert, welcher nur Administratoren zugänglich ist. Die Freischaltung erfolgt durch den Support auf Anfrage.&lt;br /&gt;
==Zugriff auf die Einstellungen==&lt;br /&gt;
Der Zugriff auf die Customize-Einstellungen erfolgt über die [[OBS/System/Rechte_Verwaltung|&#039;&#039;&#039;Rechte Verwaltung&#039;&#039;&#039;]] {{Key|strg}} + {{F12}}. Für Customize-Scripte wählen Sie den entsprechenden Punkt in der sich öffnenden Auswahlbox:&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen|Listen: &#039;&#039;&#039;A Customize Listen&#039;&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits|Eingabemasken: &#039;&#039;&#039;A Customize Edit&#039;&#039;]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen|Select-Listen: &#039;&#039;&#039;C1 Funktionen Auswahlbox&#039;&#039;&#039;]]&lt;br /&gt;
=Customizing Erweiterung=&lt;br /&gt;
==Benutzergruppen==&lt;br /&gt;
Den Wiki-Seite zu den Benutzergruppe finden Sie [[OBS/Stammdaten/Weitere Stammdaten/Benutzer Gruppen|hier]].&lt;br /&gt;
&lt;br /&gt;
=Besonderheiten=&lt;br /&gt;
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039;.}}&lt;br /&gt;
{{Achtung|Wird bei den &#039;&#039;&#039;Before_&#039;&#039;&#039;-Funktionen &amp;quot;READY&amp;quot; zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}&lt;br /&gt;
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}&lt;br /&gt;
&lt;br /&gt;
=User-Reiter=&lt;br /&gt;
In OBS ab Version 003191 können Edit-Masken per Customizing-Script um eigene Reiter erweitert werden. Diese darin verwalteten Felder können mit [[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|eigenen Datenbankfeldern]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Usertab.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Beispiel-Userdatenbank===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
#DBNAME TODO&lt;br /&gt;
&lt;br /&gt;
  #FELDNAME USER_BEMERK           , C  ,    8 ,  0 , &amp;quot;CCCCCCCC&amp;quot;&lt;br /&gt;
  #FELDNAME USER_WGR              , C ,     3 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
  #FELDNAME USER_TOGGLE           , C ,     1 ,  0 , &amp;quot;C&amp;quot;&lt;br /&gt;
  #FELDNAME USER_BETRAG           , N  ,   11 ,  0 , &amp;quot;NNNNNNNN.NNNN&amp;quot;&lt;br /&gt;
  #FELDNAME USER_DATUM            , D  ,    4 ,  0 , &amp;quot;TT.MM.JJ&amp;quot;&lt;br /&gt;
  #FELDNAME USER_LANGTEXT         , M  , 2000 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Beispielscript===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit(): String;&lt;br /&gt;
var oTab : TTabSheet;&lt;br /&gt;
    oStr : TStringEdit;     &lt;br /&gt;
    oLbl : TLabel;   &lt;br /&gt;
    oNEd : TNumericEdit;    &lt;br /&gt;
    oDVE : TDateValEdit;  &lt;br /&gt;
    oChB : TxCheckBox;   &lt;br /&gt;
    oCBL : TCombiListe;      &lt;br /&gt;
    oTRE : TTextRichEdit;&lt;br /&gt;
begin&lt;br /&gt;
    oTab := frmEdit.AddUserTab();               // Erstellt neuen User-Tab auf dem Edit&lt;br /&gt;
    if assigned(oTab) then begin&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Textzeile:&#039;;   &lt;br /&gt;
        oLbl.Top     := 10;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oStr         := TStringEdit.Create(frmEdit);&lt;br /&gt;
        oStr.Name    := &#039;stred_db_user_bemerk&#039;; // Damit automatisches Speichern/Laden von Datenbankfeldern funktioniert, muss im Komponentennamen &#039;_db_&#039; und der Feldname stehen.&lt;br /&gt;
        oStr.Top     := 10;        &lt;br /&gt;
        oStr.Left    := 130;&lt;br /&gt;
        oStr.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Summe:&#039;;   &lt;br /&gt;
        oLbl.Top     := 40;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oNEd         := TNumericEdit.Create(frmEdit);&lt;br /&gt;
        oNEd.Name    := &#039;numed_db_user_betrag&#039;;&lt;br /&gt;
        oNEd.Top     := 40;        &lt;br /&gt;
        oNEd.Left    := 130;&lt;br /&gt;
        oNEd.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Datum:&#039;;   &lt;br /&gt;
        oLbl.Top     := 70;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oDVE         := TDateValEdit.Create(frmEdit);&lt;br /&gt;
        oDVE.Name    := &#039;datev_db_user_datum&#039;;&lt;br /&gt;
        oDVE.Top     := 70;        &lt;br /&gt;
        oDVE.Left    := 130;&lt;br /&gt;
        oDVE.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Schalter:&#039;;   &lt;br /&gt;
        oLbl.Top     := 100;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oChB         := TxCheckBox.Create(frmEdit);&lt;br /&gt;
        oChB.Name    := &#039;cb_db_user_toggle&#039;;   &lt;br /&gt;
        oChB.Caption := &#039;Schalter&#039;;&lt;br /&gt;
        oChB.Top     := 100;        &lt;br /&gt;
        oChB.Left    := 130;&lt;br /&gt;
        oChB.Parent  := oTab;  &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------      &lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Suchliste:&#039;;   &lt;br /&gt;
        oLbl.Top     := 130;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
             &lt;br /&gt;
        oCBL         := FrmEdit.AddCombiliste();   &lt;br /&gt;
        oCBL.Name    := &#039;cbl_db_user_wgr&#039;;    &lt;br /&gt;
        oCBL.Top     := 130;                &lt;br /&gt;
        oCBL.Left    := 130;            &lt;br /&gt;
        oCBL.Parent  := oTab;    &lt;br /&gt;
                                      &lt;br /&gt;
        oCBL.GetSuli.Tablename         := &#039;WARENGR&#039;;          // Verknüpfte Tabelle  &lt;br /&gt;
        oCBL.GetSuli.CompareField      := &#039;wg_nr&#039;;            // Feld mit eindeutiger ID zur Zuordnung&lt;br /&gt;
        oCBL.GetSuli.ShowField         := &#039;wg_name&#039;;          // Feld, das als Bezeichnung in der Kombiliste angezeigt wird&lt;br /&gt;
        oCBL.GetSuli.Caption           := ML(&#039;Warengruppe&#039;);  // Fenstertitel der Suchliste, die sich beim Klick auf # öffnet&lt;br /&gt;
        oCBL.GetSuli.SQLOrder          := &#039;wg_nr&#039;;            // Feld, nach dem die Suchliste sortiert werden soll&lt;br /&gt;
        oCBL.GetSuli.SQlWhere          := &#039;&#039;;                 // Filter für Daten in der Suchliste, z. bsp. &#039;az_nr like &amp;quot;5%&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
        oCBL.GetSuli.Width             := 500;                // Weite des Suchlistenfensters &lt;br /&gt;
        oCBL.GetSuli.Height            := 400;                // Höhe des Suchlistenfensters&lt;br /&gt;
              &lt;br /&gt;
        oCBL.GetSuli.InitColumn(&#039;Nr&#039;,  &#039;wg_nr&#039;,   30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
        oCBL.GetSuli.AddColumn(&#039;Name&#039;, &#039;wg_name&#039;, 30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
&lt;br /&gt;
        // Die erste Spalte der Suchliste muss mit InitColumn erstellt werden, alle weiteren mit AddColumn.&lt;br /&gt;
        // Parameter:&lt;br /&gt;
&lt;br /&gt;
        // Anzeigename        : String, &lt;br /&gt;
        // Feldname           : String, &lt;br /&gt;
        // relative_Breite    : Integer, &lt;br /&gt;
        // Anzeigefunktion    : Function of String, vorerst immer nil, &lt;br /&gt;
        // Anzeigenmaskierung : String = &#039;&#039;, Beispiel: &#039;##9,99&#039;: Es werden immer eine Vorkommastelle und immer zwei Nachkommastellen angezeigt, und optional zwei zusätzliche Vorkommastellen, wenn vorhanden.&lt;br /&gt;
        // Ausrichtung        : System.Classes.TAlignment.[taLeftJustify, taRightJustify, taCenter]&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
        oTRE         := TTextRichEdit.Create(frmEdit);&lt;br /&gt;
        oTRE.Name    := &#039;riced_db_user_langtext&#039;;&lt;br /&gt;
        oTRE.Top     := 170;&lt;br /&gt;
        oTRE.Left    := 10;&lt;br /&gt;
        oTRE.Height  := 300;&lt;br /&gt;
        oTRE.Width   := 400;   &lt;br /&gt;
        oTRE.RulerH  := false; &lt;br /&gt;
        oTRE.Parent  := oTab;        &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    end;    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57685</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57685"/>
		<updated>2020-03-25T10:54:15Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funktionen. &lt;br /&gt;
&lt;br /&gt;
Zu finden ist das Customizing über &amp;quot;Strg+F12 - C1&amp;quot; in der entsprechenden Select-Liste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wiki custom 1.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wiki custom 2.jpg]]&lt;br /&gt;
==Beispiel zusätzliche Sortierung F4==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
var oMyFrmListe : TFrmListe;&lt;br /&gt;
              &lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;    &lt;br /&gt;
&lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;               &lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
begin&lt;br /&gt;
    oMyFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
    if (not Assigned(oMyFrmListe)) then begin&lt;br /&gt;
        oMyFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;                                            &lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
        MyIdx();   &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;&lt;br /&gt;
    end;                                    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyIdx();&lt;br /&gt;
begin&lt;br /&gt;
    With oMyFrmListe do begin&lt;br /&gt;
&lt;br /&gt;
        ListNew(); &lt;br /&gt;
        &lt;br /&gt;
        SqlDirect         := &#039;SELECT * FROM TOUR_TOUREN&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN TOUR_GEBIET ON tvm_nr = ttg_gebiet&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN LKW         ON l_nr   = ttg_lkw&#039;;&lt;br /&gt;
        ListOrder         := &#039;ttg_status, ttg_nr DESC&#039;;&lt;br /&gt;
        aTabel[0]         := &#039;TOUR_TOUREN&#039;;&lt;br /&gt;
&lt;br /&gt;
        AddColumn (&#039;LKW&#039;          , &#039;ttg_lkw&#039;             , 10);&lt;br /&gt;
        AddColumn (&#039;Gebiet&#039;       , &#039;tvm_name&#039;            , 10);&lt;br /&gt;
        AddColumn (&#039;Mit-Nr&#039;       , &#039;ttg_mitnr&#039;           , 10);&lt;br /&gt;
        AddColumn (&#039;Gewicht&#039;      , &#039;ttg_gewicht&#039;         , 10, &#039;#####9&#039;      ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;KM&#039;           , &#039;ttg_km&#039;              , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;L-Datum&#039;      , &#039;ttg_ldatum&#039;          , 12);&lt;br /&gt;
        AddColumn (&#039;F-Zeit&#039;       , &#039;ttg_zeitfahr&#039;        , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;B-Zeit&#039;       , &#039;ttg_zeitbearb&#039;       , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   // Show_Field_Ja wandelt Checkbox-Einträge aus der Datenbank in J/N um&lt;br /&gt;
        AddColumn (&#039;Bemerkung&#039;    , &#039;ttg_text&#039;            , 80, Show_RichText ,ListAlign(&#039;taLeftJustify&#039;));   // Wandelt Richtextfelder zur Anzeige in einfachen Klartext um&lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  Show_Mark     ,ListAlign(&#039;taLeftJustify&#039;));   // ShowMark ist das bekannte Markierverhalten von Listen&lt;br /&gt;
&lt;br /&gt;
        ListShow(&#039;TOUTMYA481&#039;, oMyFrmListe.Query, oMyFrmListe.DBGrid);&lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
end;    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Funktionen F10==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;B&#039;,&#039;XXX 2&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;C&#039;,&#039;XXX 3&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
var oFrmListe : TFrmListe;&lt;br /&gt;
begin&lt;br /&gt;
    oFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
                                     &lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
    &lt;br /&gt;
        Meldung(&#039;F10 Klassenname = &#039;+oFrmListe.ClassName); &lt;br /&gt;
        &lt;br /&gt;
        if (lower(oFrmListe.ClassName) = &#039;tfrmauftrag&#039;) then begin&lt;br /&gt;
            Meldung(&#039;Auftrags-Nr. = &#039;+oFrmListe.Query.A2C(&#039;a_nr&#039;));&lt;br /&gt;
        end;&lt;br /&gt;
        &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;        &lt;br /&gt;
    end;                                    &lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57684</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57684"/>
		<updated>2020-03-25T10:53:04Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funktionen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wiki custom 1.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Wiki custom 2.jpg]]&lt;br /&gt;
==Beispiel zusätzliche Sortierung F4==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
var oMyFrmListe : TFrmListe;&lt;br /&gt;
              &lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;    &lt;br /&gt;
&lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;               &lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
begin&lt;br /&gt;
    oMyFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
    if (not Assigned(oMyFrmListe)) then begin&lt;br /&gt;
        oMyFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;                                            &lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
        MyIdx();   &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;&lt;br /&gt;
    end;                                    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyIdx();&lt;br /&gt;
begin&lt;br /&gt;
    With oMyFrmListe do begin&lt;br /&gt;
&lt;br /&gt;
        ListNew(); &lt;br /&gt;
        &lt;br /&gt;
        SqlDirect         := &#039;SELECT * FROM TOUR_TOUREN&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN TOUR_GEBIET ON tvm_nr = ttg_gebiet&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN LKW         ON l_nr   = ttg_lkw&#039;;&lt;br /&gt;
        ListOrder         := &#039;ttg_status, ttg_nr DESC&#039;;&lt;br /&gt;
        aTabel[0]         := &#039;TOUR_TOUREN&#039;;&lt;br /&gt;
&lt;br /&gt;
        AddColumn (&#039;LKW&#039;          , &#039;ttg_lkw&#039;             , 10);&lt;br /&gt;
        AddColumn (&#039;Gebiet&#039;       , &#039;tvm_name&#039;            , 10);&lt;br /&gt;
        AddColumn (&#039;Mit-Nr&#039;       , &#039;ttg_mitnr&#039;           , 10);&lt;br /&gt;
        AddColumn (&#039;Gewicht&#039;      , &#039;ttg_gewicht&#039;         , 10, &#039;#####9&#039;      ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;KM&#039;           , &#039;ttg_km&#039;              , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;L-Datum&#039;      , &#039;ttg_ldatum&#039;          , 12);&lt;br /&gt;
        AddColumn (&#039;F-Zeit&#039;       , &#039;ttg_zeitfahr&#039;        , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;B-Zeit&#039;       , &#039;ttg_zeitbearb&#039;       , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   // Show_Field_Ja wandelt Checkbox-Einträge aus der Datenbank in J/N um&lt;br /&gt;
        AddColumn (&#039;Bemerkung&#039;    , &#039;ttg_text&#039;            , 80, Show_RichText ,ListAlign(&#039;taLeftJustify&#039;));   // Wandelt Richtextfelder zur Anzeige in einfachen Klartext um&lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  Show_Mark     ,ListAlign(&#039;taLeftJustify&#039;));   // ShowMark ist das bekannte Markierverhalten von Listen&lt;br /&gt;
&lt;br /&gt;
        ListShow(&#039;TOUTMYA481&#039;, oMyFrmListe.Query, oMyFrmListe.DBGrid);&lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
end;    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Funktionen F10==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;B&#039;,&#039;XXX 2&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;C&#039;,&#039;XXX 3&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
var oFrmListe : TFrmListe;&lt;br /&gt;
begin&lt;br /&gt;
    oFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
                                     &lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
    &lt;br /&gt;
        Meldung(&#039;F10 Klassenname = &#039;+oFrmListe.ClassName); &lt;br /&gt;
        &lt;br /&gt;
        if (lower(oFrmListe.ClassName) = &#039;tfrmauftrag&#039;) then begin&lt;br /&gt;
            Meldung(&#039;Auftrags-Nr. = &#039;+oFrmListe.Query.A2C(&#039;a_nr&#039;));&lt;br /&gt;
        end;&lt;br /&gt;
        &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;        &lt;br /&gt;
    end;                                    &lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=Datei:Wiki_custom_2.jpg&amp;diff=57683</id>
		<title>Datei:Wiki custom 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=Datei:Wiki_custom_2.jpg&amp;diff=57683"/>
		<updated>2020-03-25T10:52:51Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=Datei:Wiki_custom_1.jpg&amp;diff=57682</id>
		<title>Datei:Wiki custom 1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=Datei:Wiki_custom_1.jpg&amp;diff=57682"/>
		<updated>2020-03-25T10:52:18Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57681</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57681"/>
		<updated>2020-03-25T10:44:28Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Beispiel zusätzliche Sortierung F4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funktionen.&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Sortierung F4==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
var oMyFrmListe : TFrmListe;&lt;br /&gt;
              &lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;    &lt;br /&gt;
&lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;               &lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
begin&lt;br /&gt;
    oMyFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
    if (not Assigned(oMyFrmListe)) then begin&lt;br /&gt;
        oMyFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;                                            &lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
        MyIdx();   &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;&lt;br /&gt;
    end;                                    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyIdx();&lt;br /&gt;
begin&lt;br /&gt;
    With oMyFrmListe do begin&lt;br /&gt;
&lt;br /&gt;
        ListNew(); &lt;br /&gt;
        &lt;br /&gt;
        SqlDirect         := &#039;SELECT * FROM TOUR_TOUREN&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN TOUR_GEBIET ON tvm_nr = ttg_gebiet&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN LKW         ON l_nr   = ttg_lkw&#039;;&lt;br /&gt;
        ListOrder         := &#039;ttg_status, ttg_nr DESC&#039;;&lt;br /&gt;
        aTabel[0]         := &#039;TOUR_TOUREN&#039;;&lt;br /&gt;
&lt;br /&gt;
        AddColumn (&#039;LKW&#039;          , &#039;ttg_lkw&#039;             , 10);&lt;br /&gt;
        AddColumn (&#039;Gebiet&#039;       , &#039;tvm_name&#039;            , 10);&lt;br /&gt;
        AddColumn (&#039;Mit-Nr&#039;       , &#039;ttg_mitnr&#039;           , 10);&lt;br /&gt;
        AddColumn (&#039;Gewicht&#039;      , &#039;ttg_gewicht&#039;         , 10, &#039;#####9&#039;      ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;KM&#039;           , &#039;ttg_km&#039;              , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;L-Datum&#039;      , &#039;ttg_ldatum&#039;          , 12);&lt;br /&gt;
        AddColumn (&#039;F-Zeit&#039;       , &#039;ttg_zeitfahr&#039;        , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;B-Zeit&#039;       , &#039;ttg_zeitbearb&#039;       , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   // Show_Field_Ja wandelt Checkbox-Einträge aus der Datenbank in J/N um&lt;br /&gt;
        AddColumn (&#039;Bemerkung&#039;    , &#039;ttg_text&#039;            , 80, Show_RichText ,ListAlign(&#039;taLeftJustify&#039;));   // Wandelt Richtextfelder zur Anzeige in einfachen Klartext um&lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  Show_Mark     ,ListAlign(&#039;taLeftJustify&#039;));   // ShowMark ist das bekannte Markierverhalten von Listen&lt;br /&gt;
&lt;br /&gt;
        ListShow(&#039;TOUTMYA481&#039;, oMyFrmListe.Query, oMyFrmListe.DBGrid);&lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
end;    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Funktionen F10==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;B&#039;,&#039;XXX 2&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;C&#039;,&#039;XXX 3&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
var oFrmListe : TFrmListe;&lt;br /&gt;
begin&lt;br /&gt;
    oFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
                                     &lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
    &lt;br /&gt;
        Meldung(&#039;F10 Klassenname = &#039;+oFrmListe.ClassName); &lt;br /&gt;
        &lt;br /&gt;
        if (lower(oFrmListe.ClassName) = &#039;tfrmauftrag&#039;) then begin&lt;br /&gt;
            Meldung(&#039;Auftrags-Nr. = &#039;+oFrmListe.Query.A2C(&#039;a_nr&#039;));&lt;br /&gt;
        end;&lt;br /&gt;
        &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;        &lt;br /&gt;
    end;                                    &lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57680</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57680"/>
		<updated>2020-03-25T10:43:53Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Beispiel zusätzliche Sortierung F4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funktionen.&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Sortierung F4==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
var oMyFrmListe : TFrmListe;&lt;br /&gt;
              &lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;    &lt;br /&gt;
&lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;               &lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
begin&lt;br /&gt;
    oMyFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
    if (not Assigned(oMyFrmListe)) then begin&lt;br /&gt;
        oMyFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;                                            &lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
        MyIdx();   &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;&lt;br /&gt;
    end;                                    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyIdx();&lt;br /&gt;
begin&lt;br /&gt;
    With oMyFrmListe do begin&lt;br /&gt;
&lt;br /&gt;
        ListNew(); &lt;br /&gt;
        &lt;br /&gt;
        SqlDirect         := &#039;SELECT * FROM TOUR_TOUREN&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN TOUR_GEBIET ON tvm_nr = ttg_gebiet&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN LKW         ON l_nr   = ttg_lkw&#039;;&lt;br /&gt;
        ListOrder         := &#039;ttg_status, ttg_nr DESC&#039;;&lt;br /&gt;
        aTabel[0]         := &#039;TOUR_TOUREN&#039;;&lt;br /&gt;
&lt;br /&gt;
        AddColumn (&#039;LKW&#039;          , &#039;ttg_lkw&#039;             , 10);&lt;br /&gt;
        AddColumn (&#039;Gebiet&#039;       , &#039;tvm_name&#039;            , 10);&lt;br /&gt;
        AddColumn (&#039;Mit-Nr&#039;       , &#039;ttg_mitnr&#039;           , 10);&lt;br /&gt;
        AddColumn (&#039;Gewicht&#039;      , &#039;ttg_gewicht&#039;         , 10, &#039;#####9&#039;      ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;KM&#039;           , &#039;ttg_km&#039;              , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;L-Datum&#039;      , &#039;ttg_ldatum&#039;          , 12);&lt;br /&gt;
        AddColumn (&#039;F-Zeit&#039;       , &#039;ttg_zeitfahr&#039;        , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;B-Zeit&#039;       , &#039;ttg_zeitbearb&#039;       , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   &lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  ShowMark      ,ListAlign(&#039;taLeftJustify&#039;));   &lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   // Show_Field_Ja wandelt Checkbox-Einträge aus der Datenbank in J/N um&lt;br /&gt;
        AddColumn (&#039;Bemerkung&#039;    , &#039;ttg_text&#039;            , 80, Show_RichText ,ListAlign(&#039;taLeftJustify&#039;));   // Wandelt Richtextfelder in einfachen Klartext um, damit Texte in der Liste angezeigt werden können&lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  Show_Mark     ,ListAlign(&#039;taLeftJustify&#039;));   // ShowMark ist das bekannte Markierverhalten von Listen&lt;br /&gt;
&lt;br /&gt;
        ListShow(&#039;TOUTMYA481&#039;, oMyFrmListe.Query, oMyFrmListe.DBGrid);&lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
end;    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Funktionen F10==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;B&#039;,&#039;XXX 2&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;C&#039;,&#039;XXX 3&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
var oFrmListe : TFrmListe;&lt;br /&gt;
begin&lt;br /&gt;
    oFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
                                     &lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
    &lt;br /&gt;
        Meldung(&#039;F10 Klassenname = &#039;+oFrmListe.ClassName); &lt;br /&gt;
        &lt;br /&gt;
        if (lower(oFrmListe.ClassName) = &#039;tfrmauftrag&#039;) then begin&lt;br /&gt;
            Meldung(&#039;Auftrags-Nr. = &#039;+oFrmListe.Query.A2C(&#039;a_nr&#039;));&lt;br /&gt;
        end;&lt;br /&gt;
        &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;        &lt;br /&gt;
    end;                                    &lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57679</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57679"/>
		<updated>2020-03-25T10:40:49Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Beispiel zusätzliche Sortierung F4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funktionen.&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Sortierung F4==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
var oMyFrmListe : TFrmListe;&lt;br /&gt;
              &lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;    &lt;br /&gt;
&lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;               &lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
begin&lt;br /&gt;
    oMyFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
    if (not Assigned(oMyFrmListe)) then begin&lt;br /&gt;
        oMyFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;                                            &lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
        MyIdx();   &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;&lt;br /&gt;
    end;                                    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyIdx();&lt;br /&gt;
begin&lt;br /&gt;
    With oMyFrmListe do begin&lt;br /&gt;
&lt;br /&gt;
        ListNew(); &lt;br /&gt;
        &lt;br /&gt;
        SqlDirect         := &#039;SELECT * FROM TOUR_TOUREN&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN TOUR_GEBIET ON tvm_nr = ttg_gebiet&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN LKW         ON l_nr   = ttg_lkw&#039;;&lt;br /&gt;
        ListOrder         := &#039;ttg_status, ttg_nr DESC&#039;;&lt;br /&gt;
        aTabel[0]         := &#039;TOUR_TOUREN&#039;;&lt;br /&gt;
&lt;br /&gt;
        AddColumn (&#039;LKW&#039;          , &#039;ttg_lkw&#039;             , 10);&lt;br /&gt;
        AddColumn (&#039;Gebiet&#039;       , &#039;tvm_name&#039;            , 10);&lt;br /&gt;
        AddColumn (&#039;Mit-Nr&#039;       , &#039;ttg_mitnr&#039;           , 10);&lt;br /&gt;
        AddColumn (&#039;Gewicht&#039;      , &#039;ttg_gewicht&#039;         , 10, &#039;#####9&#039;      ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;KM&#039;           , &#039;ttg_km&#039;              , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;L-Datum&#039;      , &#039;ttg_ldatum&#039;          , 12);&lt;br /&gt;
        AddColumn (&#039;F-Zeit&#039;       , &#039;ttg_zeitfahr&#039;        , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;B-Zeit&#039;       , &#039;ttg_zeitbearb&#039;       , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   // Show_Field_Ja wandelt Checkbox-Einträge aus der Datenbank in J/N um&lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  ShowMark      ,ListAlign(&#039;taLeftJustify&#039;));   // ShowMark ist das bekannte Markierverhalten von Listen&lt;br /&gt;
&lt;br /&gt;
        ListShow(&#039;TOUTMYA481&#039;, oMyFrmListe.Query, oMyFrmListe.DBGrid);&lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
end;    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Funktionen F10==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;B&#039;,&#039;XXX 2&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;C&#039;,&#039;XXX 3&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
var oFrmListe : TFrmListe;&lt;br /&gt;
begin&lt;br /&gt;
    oFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
                                     &lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
    &lt;br /&gt;
        Meldung(&#039;F10 Klassenname = &#039;+oFrmListe.ClassName); &lt;br /&gt;
        &lt;br /&gt;
        if (lower(oFrmListe.ClassName) = &#039;tfrmauftrag&#039;) then begin&lt;br /&gt;
            Meldung(&#039;Auftrags-Nr. = &#039;+oFrmListe.Query.A2C(&#039;a_nr&#039;));&lt;br /&gt;
        end;&lt;br /&gt;
        &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;        &lt;br /&gt;
    end;                                    &lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57678</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57678"/>
		<updated>2020-03-25T10:30:15Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funktionen.&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Sortierung F4==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
var oMyFrmListe : TFrmListe;&lt;br /&gt;
              &lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;    &lt;br /&gt;
&lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;               &lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
begin&lt;br /&gt;
    oMyFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oMyFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;                                            &lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
        MyIdx();   &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;&lt;br /&gt;
    end;                                    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyIdx();&lt;br /&gt;
begin&lt;br /&gt;
    With oMyFrmListe do begin&lt;br /&gt;
&lt;br /&gt;
        ListNew(); &lt;br /&gt;
        &lt;br /&gt;
        SqlDirect         := &#039;SELECT * FROM TOUR_TOUREN&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN TOUR_GEBIET ON tvm_nr = ttg_gebiet&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN LKW         ON l_nr   = ttg_lkw&#039;;&lt;br /&gt;
        ListOrder         := &#039;ttg_status, ttg_nr DESC&#039;;&lt;br /&gt;
        aTabel[0]         := &#039;TOUR_TOUREN&#039;;&lt;br /&gt;
&lt;br /&gt;
        AddColumn (&#039;LKW&#039;          , &#039;ttg_lkw&#039;             , 10);&lt;br /&gt;
        AddColumn (&#039;Gebiet&#039;       , &#039;tvm_name&#039;            , 10);&lt;br /&gt;
        AddColumn (&#039;Mit-Nr&#039;       , &#039;ttg_mitnr&#039;           , 10);&lt;br /&gt;
        AddColumn (&#039;Gewicht&#039;      , &#039;ttg_gewicht&#039;         , 10, &#039;#####9&#039;      ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;KM&#039;           , &#039;ttg_km&#039;              , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;L-Datum&#039;      , &#039;ttg_ldatum&#039;          , 12);&lt;br /&gt;
        AddColumn (&#039;F-Zeit&#039;       , &#039;ttg_zeitfahr&#039;        , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;B-Zeit&#039;       , &#039;ttg_zeitbearb&#039;       , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   // Show_Field_Ja wandelt Checkbox-Einträge aus der Datenbank in J/N um&lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  ShowMark      ,ListAlign(&#039;taLeftJustify&#039;));   // ShowMark ist das bekannte Markierverhalten von Listen&lt;br /&gt;
&lt;br /&gt;
        ListShow(&#039;TOUTMYA481&#039;, oMyFrmListe.Query, oMyFrmListe.DBGrid);&lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
end;    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Beispiel zusätzliche Funktionen F10==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;B&#039;,&#039;XXX 2&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;C&#039;,&#039;XXX 3&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
var oFrmListe : TFrmListe;&lt;br /&gt;
begin&lt;br /&gt;
    oFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
                                     &lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
    &lt;br /&gt;
        Meldung(&#039;F10 Klassenname = &#039;+oFrmListe.ClassName); &lt;br /&gt;
        &lt;br /&gt;
        if (lower(oFrmListe.ClassName) = &#039;tfrmauftrag&#039;) then begin&lt;br /&gt;
            Meldung(&#039;Auftrags-Nr. = &#039;+oFrmListe.Query.A2C(&#039;a_nr&#039;));&lt;br /&gt;
        end;&lt;br /&gt;
        &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;        &lt;br /&gt;
    end;                                    &lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57677</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Select-Listen&amp;diff=57677"/>
		<updated>2020-03-25T10:29:16Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: Die Seite wurde neu angelegt: „{{Makros und Scripting}} Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funk…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
Mit dem Customizing können verschiedene Select-Listen erweitert werden, beispielsweise die Auswahl von Sortierungen und weiteren Funktionen.&lt;br /&gt;
&lt;br /&gt;
==Beispiel zusätzliche Sortierung F4==&lt;br /&gt;
&amp;lt;syntaxhighlighting Lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
var oMyFrmListe : TFrmListe;&lt;br /&gt;
              &lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;    &lt;br /&gt;
&lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;               &lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
begin&lt;br /&gt;
    oMyFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oMyFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;                                            &lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
        MyIdx();   &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;&lt;br /&gt;
    end;                                    &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyIdx();&lt;br /&gt;
begin&lt;br /&gt;
    With oMyFrmListe do begin&lt;br /&gt;
&lt;br /&gt;
        ListNew(); &lt;br /&gt;
        &lt;br /&gt;
        SqlDirect         := &#039;SELECT * FROM TOUR_TOUREN&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN TOUR_GEBIET ON tvm_nr = ttg_gebiet&#039;+&lt;br /&gt;
                             &#039; LEFT JOIN LKW         ON l_nr   = ttg_lkw&#039;;&lt;br /&gt;
        ListOrder         := &#039;ttg_status, ttg_nr DESC&#039;;&lt;br /&gt;
        aTabel[0]         := &#039;TOUR_TOUREN&#039;;&lt;br /&gt;
&lt;br /&gt;
        AddColumn (&#039;LKW&#039;          , &#039;ttg_lkw&#039;             , 10);&lt;br /&gt;
        AddColumn (&#039;Gebiet&#039;       , &#039;tvm_name&#039;            , 10);&lt;br /&gt;
        AddColumn (&#039;Mit-Nr&#039;       , &#039;ttg_mitnr&#039;           , 10);&lt;br /&gt;
        AddColumn (&#039;Gewicht&#039;      , &#039;ttg_gewicht&#039;         , 10, &#039;#####9&#039;      ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;KM&#039;           , &#039;ttg_km&#039;              , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;L-Datum&#039;      , &#039;ttg_ldatum&#039;          , 12);&lt;br /&gt;
        AddColumn (&#039;F-Zeit&#039;       , &#039;ttg_zeitfahr&#039;        , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;B-Zeit&#039;       , &#039;ttg_zeitbearb&#039;       , 10, &#039;###9,99&#039;     ,ListAlign(&#039;taRightJustify&#039;));&lt;br /&gt;
        AddColumn (&#039;Umkehr&#039;       , &#039;ttg_auslieferfolge&#039;  , 10, Show_Field_Ja ,ListAlign(&#039;taLeftJustify&#039;));   // Show_Field_Ja wandelt Checkbox-Einträge aus der Datenbank in J/N um&lt;br /&gt;
        AddColumn (&#039;M&#039;            , &#039;ttg_user&#039;            , 5,  ShowMark      ,ListAlign(&#039;taLeftJustify&#039;));   // ShowMark ist das bekannte Markierverhalten von Listen&lt;br /&gt;
&lt;br /&gt;
        ListShow(&#039;TOUTMYA481&#039;, oMyFrmListe.Query, oMyFrmListe.DBGrid);&lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
end;    &lt;br /&gt;
&amp;lt;/syntaxhighlighting&amp;gt;&lt;br /&gt;
==Beispiel zusätzliche Funktionen F10==&lt;br /&gt;
&amp;lt;syntaxhighlighting Lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure InitScripter(oFrmSelect:TFrmSelect);&lt;br /&gt;
begin&lt;br /&gt;
    oFrmSelect.aSelect.lSorted    := False;&lt;br /&gt;
    oFrmSelect.aSelect.cHTMLTitel := &#039;Html Titel&#039;;&lt;br /&gt;
    oFrmSelect.aSelect.nStart     := 3;&lt;br /&gt;
end;&lt;br /&gt;
        &lt;br /&gt;
procedure Add_Select();&lt;br /&gt;
begin&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;A&#039;,&#039;XXX 1&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;B&#039;,&#039;XXX 2&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.AddSelect(&#039;C&#039;,&#039;XXX 3&#039;);  &lt;br /&gt;
    FrmSelect.aSelect.AddInfo(&#039;Hier HTML Hint&#039;);&lt;br /&gt;
    FrmSelect.aSelect.lSorted  := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function Run_Select():String;&lt;br /&gt;
var oFrmListe : TFrmListe;&lt;br /&gt;
begin&lt;br /&gt;
    oFrmListe := TFrmListe(FrmSelect.aSelect.Frm);&lt;br /&gt;
                                     &lt;br /&gt;
    if (not Assigned(oFrmListe)) then begin&lt;br /&gt;
        oFrmListe := TFrmListe(FrmSelect);&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
    //Scripter Einträge haben immer ein Z damit sie hinten stehen &lt;br /&gt;
    if (FrmSelect.aSelect.GetAusWahl() = &#039;ZA&#039;) then begin&lt;br /&gt;
    &lt;br /&gt;
        Meldung(&#039;F10 Klassenname = &#039;+oFrmListe.ClassName); &lt;br /&gt;
        &lt;br /&gt;
        if (lower(oFrmListe.ClassName) = &#039;tfrmauftrag&#039;) then begin&lt;br /&gt;
            Meldung(&#039;Auftrags-Nr. = &#039;+oFrmListe.Query.A2C(&#039;a_nr&#039;));&lt;br /&gt;
        end;&lt;br /&gt;
        &lt;br /&gt;
        //Fängt internen Aufruf ab&lt;br /&gt;
        Result := &#039;overload&#039;;        &lt;br /&gt;
    end;                                    &lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlighting&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=57676</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=57676"/>
		<updated>2020-03-25T09:18:00Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Eingabemaske==&lt;br /&gt;
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnEdFormInit || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnEdInit || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnEdVorb || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|OnEdShow || OnF4&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF5&lt;br /&gt;
|-&lt;br /&gt;
|OnEdReadDirect || OnF6&lt;br /&gt;
|-&lt;br /&gt;
|OnEdRead || OnF7&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF8&lt;br /&gt;
|-&lt;br /&gt;
|OnEdCheck || OnF9&lt;br /&gt;
|-&lt;br /&gt;
|OnEdqSQL || OnF10&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSaveDirect || OnF11&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSave || OnF12&lt;br /&gt;
|-&lt;br /&gt;
|CheckIfChanged || OnPGDN&lt;br /&gt;
|-&lt;br /&gt;
|OnEdClose || OnPGUP&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
Die hier aufgeführten &#039;&#039;&#039;internen Funktionen&#039;&#039;&#039; sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.&lt;br /&gt;
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039; gegeben werden. Für Tastatur-Funktionen gilt dies nur für &#039;&#039;&#039;OnESC&#039;&#039;&#039;.}}&lt;br /&gt;
==Zugriff auf Komponenten==&lt;br /&gt;
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen &#039;&#039;&#039;xGet&#039;&#039;&#039; (Daten lesen) und &#039;&#039;&#039;xSet&#039;&#039;&#039; (Daten schreiben) verwenden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Auslesen einer Komponente&lt;br /&gt;
cName := FrmEdit.xGet(&#039;a_name&#039;);&lt;br /&gt;
//Setzen einer Komponente&lt;br /&gt;
FrmEdit.xSet(&#039;a_name&#039;,&amp;quot;Meier&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Globale Variablen der Eingabemaske==&lt;br /&gt;
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property&#039;s stehen zu Verfügung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Property !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|lEditMode || True  = Insertmodus False = Editmodus&lt;br /&gt;
|-&lt;br /&gt;
|lDataUpdate || True = Daten des Edits wurden verändert&lt;br /&gt;
|-&lt;br /&gt;
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)&lt;br /&gt;
|-&lt;br /&gt;
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen&lt;br /&gt;
|-&lt;br /&gt;
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf&lt;br /&gt;
|-&lt;br /&gt;
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)&lt;br /&gt;
|}&lt;br /&gt;
==Beispiele Eingabemaske==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aufruf von weiteren Macros innerhalb des Macros===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
var oParams: TStringlist; //Parameter für Aufruf&lt;br /&gt;
begin&lt;br /&gt;
    //Aufruf ohne Parameter&lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;);&lt;br /&gt;
&lt;br /&gt;
    //Aufruf mit Parameter&lt;br /&gt;
    oParams := TStringlist.Create;&lt;br /&gt;
    oParams.Add(&#039;TEST456&#039;);      &lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;, frmEdit, oParams);  &lt;br /&gt;
    MyFreeAndNil(oParams);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingaben prüfen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdCheck():string;&lt;br /&gt;
var oSte     : TEdit;&lt;br /&gt;
    cEdit    : String;&lt;br /&gt;
    cVorname : String;&lt;br /&gt;
begin&lt;br /&gt;
    if (FrmEdit.lEditMode) then begin&lt;br /&gt;
        Meldung(&#039;Edit Mode True&#039;);&lt;br /&gt;
    end else begin&lt;br /&gt;
        Meldung(&#039;Edit Mode False&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
    Meldung(FrmEdit.stred_db_a_name.Text);&lt;br /&gt;
    oSte := FrmEdit.FindComponent(&#039;stred_db_a_name&#039;);&lt;br /&gt;
    Meldung(oSte.Text);&lt;br /&gt;
    cVorname:= FrmEdit.xGet(&#039;a_vorname&#039;);&lt;br /&gt;
    Meldung(cVorname);&lt;br /&gt;
    if (Empty(cVorname)) then begin&lt;br /&gt;
        FrmEdit.lCheckOk := False;&lt;br /&gt;
        Meldung(&#039;Bitte Vorname eingtragen&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Positionen in Vorgängen blockieren===&lt;br /&gt;
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Name: AN_VORGANG_EDIT Function OpenClose&lt;br /&gt;
{{Hinweis| Der Prefix &amp;quot;AN&amp;quot; steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;&lt;br /&gt;
begin&lt;br /&gt;
   //DebugLine(&#039;cVgNr&#039;+cVgNr);&lt;br /&gt;
&lt;br /&gt;
    //02 = Möbel&lt;br /&gt;
    Result := oOBS.cBenutzergruppe &amp;lt;&amp;gt; &#039;02&#039;;  &lt;br /&gt;
    &lt;br /&gt;
    if (Result) then begin  &lt;br /&gt;
        //Wenn Positionen vorhanden dann kein Positions-Edit&lt;br /&gt;
        if (DB_LSeek(oDB,&#039;ANGPOS&#039;,&#039;az_nr=&#039;+DB_SqlVal(cVGNr))) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
                          &lt;br /&gt;
    if (Result) then begin&lt;br /&gt;
                &lt;br /&gt;
        //DebugLine(iif(lInsertMode,&#039;True&#039;,&#039;False&#039;));&lt;br /&gt;
        &lt;br /&gt;
        //Bei nicht Insert immer False&lt;br /&gt;
        if (lInsertMode = False) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==User-Reiter==&lt;br /&gt;
In OBS ab Version 003191 können Edit-Masken per Customizing-Script um eigene Reiter erweitert werden. Diese darin verwalteten Felder können mit [[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|eigenen Datenbankfeldern]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Usertab.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Beispiel-Userdatenbank===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
#DBNAME TODO&lt;br /&gt;
&lt;br /&gt;
  #FELDNAME USER_BEMERK           , C  ,    8 ,  0 , &amp;quot;CCCCCCCC&amp;quot;&lt;br /&gt;
  #FELDNAME USER_WGR              , C ,     3 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
  #FELDNAME USER_TOGGLE           , C ,     1 ,  0 , &amp;quot;C&amp;quot;&lt;br /&gt;
  #FELDNAME USER_BETRAG           , N  ,   11 ,  0 , &amp;quot;NNNNNNNN.NNNN&amp;quot;&lt;br /&gt;
  #FELDNAME USER_DATUM            , D  ,    4 ,  0 , &amp;quot;TT.MM.JJ&amp;quot;&lt;br /&gt;
  #FELDNAME USER_LANGTEXT         , M  , 2000 ,  0 , &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Beispielscript===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit(): String;&lt;br /&gt;
var oTab : TTabSheet;&lt;br /&gt;
    oStr : TStringEdit;     &lt;br /&gt;
    oLbl : TLabel;   &lt;br /&gt;
    oNEd : TNumericEdit;    &lt;br /&gt;
    oDVE : TDateValEdit;  &lt;br /&gt;
    oChB : TxCheckBox;   &lt;br /&gt;
    oCBL : TCombiListe;      &lt;br /&gt;
    oTRE : TTextRichEdit;&lt;br /&gt;
begin&lt;br /&gt;
    oTab := frmEdit.AddUserTab();               // Erstellt neuen User-Tab auf dem Edit&lt;br /&gt;
    if assigned(oTab) then begin&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); // Damit die Ressourcenverwaltung funktioniert&lt;br /&gt;
        oLbl.Caption := &#039;Textzeile:&#039;;   &lt;br /&gt;
        oLbl.Top     := 10;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;                   // Damit die Anzeige korrekt funktioniert&lt;br /&gt;
        &lt;br /&gt;
        oStr         := TStringEdit.Create(frmEdit);&lt;br /&gt;
        oStr.Name    := &#039;stred_db_user_bemerk&#039;; // Damit automatisches Speichern/Laden von Datenbankfeldern funktioniert, muss im Komponentennamen &#039;_db_&#039; und der Feldname stehen.&lt;br /&gt;
        oStr.Top     := 10;        &lt;br /&gt;
        oStr.Left    := 130;&lt;br /&gt;
        oStr.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Summe:&#039;;   &lt;br /&gt;
        oLbl.Top     := 40;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oNEd         := TNumericEdit.Create(frmEdit);&lt;br /&gt;
        oNEd.Name    := &#039;numed_db_user_betrag&#039;;&lt;br /&gt;
        oNEd.Top     := 40;        &lt;br /&gt;
        oNEd.Left    := 130;&lt;br /&gt;
        oNEd.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Datum:&#039;;   &lt;br /&gt;
        oLbl.Top     := 70;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oDVE         := TDateValEdit.Create(frmEdit);&lt;br /&gt;
        oDVE.Name    := &#039;datev_db_user_datum&#039;;&lt;br /&gt;
        oDVE.Top     := 70;        &lt;br /&gt;
        oDVE.Left    := 130;&lt;br /&gt;
        oDVE.Parent  := oTab;&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Schalter:&#039;;   &lt;br /&gt;
        oLbl.Top     := 100;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
        &lt;br /&gt;
        oChB         := TxCheckBox.Create(frmEdit);&lt;br /&gt;
        oChB.Name    := &#039;cb_db_user_toggle&#039;;   &lt;br /&gt;
        oChB.Caption := &#039;Schalter&#039;;&lt;br /&gt;
        oChB.Top     := 100;        &lt;br /&gt;
        oChB.Left    := 130;&lt;br /&gt;
        oChB.Parent  := oTab;  &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------      &lt;br /&gt;
    &lt;br /&gt;
        oLbl         := TLabel.Create(frmEdit); &lt;br /&gt;
        oLbl.Caption := &#039;Suchliste:&#039;;   &lt;br /&gt;
        oLbl.Top     := 130;        &lt;br /&gt;
        oLbl.Left    := 10;&lt;br /&gt;
        oLbl.Parent  := oTab;&lt;br /&gt;
             &lt;br /&gt;
        oCBL         := FrmEdit.AddCombiliste();   &lt;br /&gt;
        oCBL.Name    := &#039;cbl_db_user_wgr&#039;;    &lt;br /&gt;
        oCBL.Top     := 130;                &lt;br /&gt;
        oCBL.Left    := 130;            &lt;br /&gt;
        oCBL.Parent  := oTab;    &lt;br /&gt;
                                      &lt;br /&gt;
        oCBL.GetSuli.Tablename         := &#039;WARENGR&#039;;          // Verknüpfte Tabelle  &lt;br /&gt;
        oCBL.GetSuli.CompareField      := &#039;wg_nr&#039;;            // Feld mit eindeutiger ID zur Zuordnung&lt;br /&gt;
        oCBL.GetSuli.ShowField         := &#039;wg_name&#039;;          // Feld, das als Bezeichnung in der Kombiliste angezeigt wird&lt;br /&gt;
        oCBL.GetSuli.Caption           := ML(&#039;Warengruppe&#039;);  // Fenstertitel der Suchliste, die sich beim Klick auf # öffnet&lt;br /&gt;
        oCBL.GetSuli.SQLOrder          := &#039;wg_nr&#039;;            // Feld, nach dem die Suchliste sortiert werden soll&lt;br /&gt;
        oCBL.GetSuli.SQlWhere          := &#039;&#039;;                 // Filter für Daten in der Suchliste, z. bsp. &#039;az_nr like &amp;quot;5%&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
        oCBL.GetSuli.Width             := 500;                // Weite des Suchlistenfensters &lt;br /&gt;
        oCBL.GetSuli.Height            := 400;                // Höhe des Suchlistenfensters&lt;br /&gt;
              &lt;br /&gt;
        oCBL.GetSuli.InitColumn(&#039;Nr&#039;,  &#039;wg_nr&#039;,   30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
        oCBL.GetSuli.AddColumn(&#039;Name&#039;, &#039;wg_name&#039;, 30, nil, &#039;&#039;, System.Classes.TAlignment.taLeftJustify);&lt;br /&gt;
&lt;br /&gt;
        // Die erste Spalte der Suchliste muss mit InitColumn erstellt werden, alle weiteren mit AddColumn.&lt;br /&gt;
        // Parameter:&lt;br /&gt;
&lt;br /&gt;
        // Anzeigename        : String, &lt;br /&gt;
        // Feldname           : String, &lt;br /&gt;
        // relative_Breite    : Integer, &lt;br /&gt;
        // Anzeigefunktion    : Function of String, vorerst immer nil, &lt;br /&gt;
        // Anzeigenmaskierung : String = &#039;&#039;, Beispiel: &#039;##9,99&#039;: Es werden immer eine Vorkommastelle und immer zwei Nachkommastellen angezeigt, und optional zwei zusätzliche Vorkommastellen, wenn vorhanden.&lt;br /&gt;
        // Ausrichtung        : System.Classes.TAlignment.[taLeftJustify, taRightJustify, taCenter]&lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
        oTRE         := TTextRichEdit.Create(frmEdit);&lt;br /&gt;
        oTRE.Name    := &#039;riced_db_user_langtext&#039;;&lt;br /&gt;
        oTRE.Top     := 170;&lt;br /&gt;
        oTRE.Left    := 10;&lt;br /&gt;
        oTRE.Height  := 300;&lt;br /&gt;
        oTRE.Width   := 400;   &lt;br /&gt;
        oTRE.RulerH  := false; &lt;br /&gt;
        oTRE.Parent  := oTab;        &lt;br /&gt;
&lt;br /&gt;
        //------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    end;    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57675</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57675"/>
		<updated>2020-03-25T09:17:01Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Liste==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnListNew || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnResize || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnRefresh || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|Before_OnClose || OnF4&lt;br /&gt;
|-&lt;br /&gt;
| || OnF5&lt;br /&gt;
|-&lt;br /&gt;
| || OnF6&lt;br /&gt;
|-&lt;br /&gt;
| || OnF7&lt;br /&gt;
|-&lt;br /&gt;
| || OnF8&lt;br /&gt;
|-&lt;br /&gt;
| || OnF9&lt;br /&gt;
|-&lt;br /&gt;
| || OnF10&lt;br /&gt;
|-&lt;br /&gt;
| || OnF11&lt;br /&gt;
|-&lt;br /&gt;
| || OnF12&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnInsert&lt;br /&gt;
|-&lt;br /&gt;
| || OnDelete&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Beispiele Liste==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnListNew():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmListe.cmdF12.Enabled := True;&lt;br /&gt;
    frmListe.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmListe.InitButtons(frmListe);&lt;br /&gt;
    frmListe.PaintButtons(frmListe);    &lt;br /&gt;
end;              &lt;br /&gt;
&lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Andere Buttons Mit Funktion versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
Var cMyF8 : String;&lt;br /&gt;
                           &lt;br /&gt;
function OnListNew():String; &lt;br /&gt;
begin                         &lt;br /&gt;
    cMyF8  := &#039;Init&#039;; &lt;br /&gt;
    Result := &#039;&#039;;&lt;br /&gt;
end;  &lt;br /&gt;
&lt;br /&gt;
function OnF8():string;&lt;br /&gt;
begin&lt;br /&gt;
    Meldung(&#039;Hallo &#039;+cMyF8);     &lt;br /&gt;
    Result := &#039;OK&#039;;&lt;br /&gt;
end; &lt;br /&gt;
&lt;br /&gt;
function Before_OnF8():String;&lt;br /&gt;
begin&lt;br /&gt;
    Meldung(&#039;Before Hallo &#039;+cMyF8);&lt;br /&gt;
    &lt;br /&gt;
    //Dann wird Standard F8 nicht ausgeführt&lt;br /&gt;
    Result := &#039;READY&#039;; &lt;br /&gt;
    cMyF8  := Result;&lt;br /&gt;
end;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Button F12 mit Auswahlfunktion===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function OnListNew():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmListe.cmdF12.Enabled := True;&lt;br /&gt;
    frmListe.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmListe.InitButtons(frmListe);&lt;br /&gt;
    frmListe.PaintButtons(frmListe);    &lt;br /&gt;
end;                                                  &lt;br /&gt;
&lt;br /&gt;
procedure OnF12();      &lt;br /&gt;
var oLines  : TStringList;&lt;br /&gt;
    oResult : TStringList;            &lt;br /&gt;
    lEsc    : Boolean;&lt;br /&gt;
    cSelect : String;&lt;br /&gt;
begin&lt;br /&gt;
    oLines := TStringList.Create();    &lt;br /&gt;
    oLines.Add(&#039;A - Test 1&#039;);&lt;br /&gt;
    oLines.Add(&#039;B - Test 2&#039;);&lt;br /&gt;
    oLines.Add(&#039;C - Test 3&#039;);&lt;br /&gt;
    &lt;br /&gt;
    oResult := GetSelectionExt(oLines, //Auswahl &lt;br /&gt;
                               &#039;Test&#039;, //Caption        &lt;br /&gt;
                               lEsc,   //Abruch? (var)            &lt;br /&gt;
                               Nil,    //uInit : DefGetSelection;&lt;br /&gt;
                               Nil,    //uOnChange : DefGetSelection;   &lt;br /&gt;
                               False,  //Sort      &lt;br /&gt;
                               -1,     //Width&lt;br /&gt;
                               False,  //MultiSel     &lt;br /&gt;
                               False   //AllLines &lt;br /&gt;
                               ); &lt;br /&gt;
    &lt;br /&gt;
    cSelect := LeftStr(oResult.Text, 1);&lt;br /&gt;
                                                 &lt;br /&gt;
    if          (cSelect = &#039;A&#039;) then begin&lt;br /&gt;
        Meldung(&#039;A&#039;);&lt;br /&gt;
    end else if (cSelect = &#039;B&#039;) then begin&lt;br /&gt;
        Meldung(&#039;B&#039;);&lt;br /&gt;
    end else if (cSelect = &#039;C&#039;) then begin&lt;br /&gt;
        Meldung(&#039;C&#039;);&lt;br /&gt;
    end;   &lt;br /&gt;
                                 &lt;br /&gt;
    MyFreeAndNil(oLines);&lt;br /&gt;
    MyFreeAndNil(oResult);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=57674</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Edits&amp;diff=57674"/>
		<updated>2020-03-25T08:55:32Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: Die Seite wurde neu angelegt: „{{Makros und Scripting}}  ==Methoden der Eingabemaske== Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine List…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Eingabemaske==&lt;br /&gt;
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnEdFormInit || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnEdInit || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnEdVorb || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|OnEdShow || OnF4&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF5&lt;br /&gt;
|-&lt;br /&gt;
|OnEdReadDirect || OnF6&lt;br /&gt;
|-&lt;br /&gt;
|OnEdRead || OnF7&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF8&lt;br /&gt;
|-&lt;br /&gt;
|OnEdCheck || OnF9&lt;br /&gt;
|-&lt;br /&gt;
|OnEdqSQL || OnF10&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSaveDirect || OnF11&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSave || OnF12&lt;br /&gt;
|-&lt;br /&gt;
|CheckIfChanged || OnPGDN&lt;br /&gt;
|-&lt;br /&gt;
|OnEdClose || OnPGUP&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
Die hier aufgeführten &#039;&#039;&#039;internen Funktionen&#039;&#039;&#039; sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.&lt;br /&gt;
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039; gegeben werden. Für Tastatur-Funktionen gilt dies nur für &#039;&#039;&#039;OnESC&#039;&#039;&#039;.}}&lt;br /&gt;
==Zugriff auf Komponenten==&lt;br /&gt;
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen &#039;&#039;&#039;xGet&#039;&#039;&#039; (Daten lesen) und &#039;&#039;&#039;xSet&#039;&#039;&#039; (Daten schreiben) verwenden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Auslesen einer Komponente&lt;br /&gt;
cName := FrmEdit.xGet(&#039;a_name&#039;);&lt;br /&gt;
//Setzen einer Komponente&lt;br /&gt;
FrmEdit.xSet(&#039;a_name&#039;,&amp;quot;Meier&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Globale Variablen der Eingabemaske==&lt;br /&gt;
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property&#039;s stehen zu Verfügung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Property !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|lEditMode || True  = Insertmodus False = Editmodus&lt;br /&gt;
|-&lt;br /&gt;
|lDataUpdate || True = Daten des Edits wurden verändert&lt;br /&gt;
|-&lt;br /&gt;
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)&lt;br /&gt;
|-&lt;br /&gt;
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen&lt;br /&gt;
|-&lt;br /&gt;
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf&lt;br /&gt;
|-&lt;br /&gt;
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)&lt;br /&gt;
|}&lt;br /&gt;
==Beispiele Eingabemaske==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aufruf von weiteren Macros innerhalb des Macros===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
var oParams: TStringlist; //Parameter für Aufruf&lt;br /&gt;
begin&lt;br /&gt;
    //Aufruf ohne Parameter&lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;);&lt;br /&gt;
&lt;br /&gt;
    //Aufruf mit Parameter&lt;br /&gt;
    oParams := TStringlist.Create;&lt;br /&gt;
    oParams.Add(&#039;TEST456&#039;);      &lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;, frmEdit, oParams);  &lt;br /&gt;
    MyFreeAndNil(oParams);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingaben prüfen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdCheck():string;&lt;br /&gt;
var oSte     : TEdit;&lt;br /&gt;
    cEdit    : String;&lt;br /&gt;
    cVorname : String;&lt;br /&gt;
begin&lt;br /&gt;
    if (FrmEdit.lEditMode) then begin&lt;br /&gt;
        Meldung(&#039;Edit Mode True&#039;);&lt;br /&gt;
    end else begin&lt;br /&gt;
        Meldung(&#039;Edit Mode False&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
    Meldung(FrmEdit.stred_db_a_name.Text);&lt;br /&gt;
    oSte := FrmEdit.FindComponent(&#039;stred_db_a_name&#039;);&lt;br /&gt;
    Meldung(oSte.Text);&lt;br /&gt;
    cVorname:= FrmEdit.xGet(&#039;a_vorname&#039;);&lt;br /&gt;
    Meldung(cVorname);&lt;br /&gt;
    if (Empty(cVorname)) then begin&lt;br /&gt;
        FrmEdit.lCheckOk := False;&lt;br /&gt;
        Meldung(&#039;Bitte Vorname eingtragen&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Positionen in Vorgängen blockieren===&lt;br /&gt;
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Name: AN_VORGANG_EDIT Function OpenClose&lt;br /&gt;
{{Hinweis| Der Prefix &amp;quot;AN&amp;quot; steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;&lt;br /&gt;
begin&lt;br /&gt;
   //DebugLine(&#039;cVgNr&#039;+cVgNr);&lt;br /&gt;
&lt;br /&gt;
    //02 = Möbel&lt;br /&gt;
    Result := oOBS.cBenutzergruppe &amp;lt;&amp;gt; &#039;02&#039;;  &lt;br /&gt;
    &lt;br /&gt;
    if (Result) then begin  &lt;br /&gt;
        //Wenn Positionen vorhanden dann kein Positions-Edit&lt;br /&gt;
        if (DB_LSeek(oDB,&#039;ANGPOS&#039;,&#039;az_nr=&#039;+DB_SqlVal(cVGNr))) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
                          &lt;br /&gt;
    if (Result) then begin&lt;br /&gt;
                &lt;br /&gt;
        //DebugLine(iif(lInsertMode,&#039;True&#039;,&#039;False&#039;));&lt;br /&gt;
        &lt;br /&gt;
        //Bei nicht Insert immer False&lt;br /&gt;
        if (lInsertMode = False) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57673</id>
		<title>OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Makros_und_Scripting/Anwendungsbereiche/Customize_Listen&amp;diff=57673"/>
		<updated>2020-03-25T08:55:05Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: Die Seite wurde neu angelegt: „{{Makros und Scripting}}  ==Methoden der Eingabemaske== Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine List…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Makros und Scripting}}&lt;br /&gt;
&lt;br /&gt;
==Methoden der Eingabemaske==&lt;br /&gt;
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Interne Funktionen !! Tastatur-Funktionen&lt;br /&gt;
|-&lt;br /&gt;
|OnEdFormInit || OnF1&lt;br /&gt;
|-&lt;br /&gt;
|OnEdInit || OnF2&lt;br /&gt;
|-&lt;br /&gt;
|OnEdVorb || OnF3&lt;br /&gt;
|-&lt;br /&gt;
|OnEdShow || OnF4&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF5&lt;br /&gt;
|-&lt;br /&gt;
|OnEdReadDirect || OnF6&lt;br /&gt;
|-&lt;br /&gt;
|OnEdRead || OnF7&lt;br /&gt;
|-&lt;br /&gt;
|OnEdStable || OnF8&lt;br /&gt;
|-&lt;br /&gt;
|OnEdCheck || OnF9&lt;br /&gt;
|-&lt;br /&gt;
|OnEdqSQL || OnF10&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSaveDirect || OnF11&lt;br /&gt;
|-&lt;br /&gt;
|OnEdSave || OnF12&lt;br /&gt;
|-&lt;br /&gt;
|CheckIfChanged || OnPGDN&lt;br /&gt;
|-&lt;br /&gt;
|OnEdClose || OnPGUP&lt;br /&gt;
|-&lt;br /&gt;
| || OnReturn&lt;br /&gt;
|-&lt;br /&gt;
| || OnESC&lt;br /&gt;
|}&lt;br /&gt;
Die hier aufgeführten &#039;&#039;&#039;internen Funktionen&#039;&#039;&#039; sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.&lt;br /&gt;
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix &#039;&#039;&#039;Before_&#039;&#039;&#039; gegeben werden. Für Tastatur-Funktionen gilt dies nur für &#039;&#039;&#039;OnESC&#039;&#039;&#039;.}}&lt;br /&gt;
==Zugriff auf Komponenten==&lt;br /&gt;
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen &#039;&#039;&#039;xGet&#039;&#039;&#039; (Daten lesen) und &#039;&#039;&#039;xSet&#039;&#039;&#039; (Daten schreiben) verwenden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Auslesen einer Komponente&lt;br /&gt;
cName := FrmEdit.xGet(&#039;a_name&#039;);&lt;br /&gt;
//Setzen einer Komponente&lt;br /&gt;
FrmEdit.xSet(&#039;a_name&#039;,&amp;quot;Meier&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Globale Variablen der Eingabemaske==&lt;br /&gt;
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property&#039;s stehen zu Verfügung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Property !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.&lt;br /&gt;
|-&lt;br /&gt;
|lEditMode || True  = Insertmodus False = Editmodus&lt;br /&gt;
|-&lt;br /&gt;
|lDataUpdate || True = Daten des Edits wurden verändert&lt;br /&gt;
|-&lt;br /&gt;
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)&lt;br /&gt;
|-&lt;br /&gt;
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen&lt;br /&gt;
|-&lt;br /&gt;
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf&lt;br /&gt;
|-&lt;br /&gt;
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)&lt;br /&gt;
|}&lt;br /&gt;
==Beispiele Eingabemaske==&lt;br /&gt;
===Button F12 anzeigen und mit Funktionalität versehen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
begin                          &lt;br /&gt;
    Meldung(&#039;Test&#039;);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aufruf von weiteren Macros innerhalb des Macros===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdInit():string;&lt;br /&gt;
begin&lt;br /&gt;
    frmEdit.cmdF12.Enabled := True;&lt;br /&gt;
    frmEdit.cmdF12.Caption := &#039;F12 Test&#039;;&lt;br /&gt;
    frmEdit.InitButtons(frmEdit);&lt;br /&gt;
    frmEdit.PaintButtons(frmEdit);   &lt;br /&gt;
end;                         &lt;br /&gt;
       &lt;br /&gt;
procedure OnF12();  &lt;br /&gt;
var oParams: TStringlist; //Parameter für Aufruf&lt;br /&gt;
begin&lt;br /&gt;
    //Aufruf ohne Parameter&lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;);&lt;br /&gt;
&lt;br /&gt;
    //Aufruf mit Parameter&lt;br /&gt;
    oParams := TStringlist.Create;&lt;br /&gt;
    oParams.Add(&#039;TEST456&#039;);      &lt;br /&gt;
    RunMacroFile(&#039;data\MACRO\Spezial\Test123.pmac&#039;, frmEdit, oParams);  &lt;br /&gt;
    MyFreeAndNil(oParams);&lt;br /&gt;
end;        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingaben prüfen===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OnEdCheck():string;&lt;br /&gt;
var oSte     : TEdit;&lt;br /&gt;
    cEdit    : String;&lt;br /&gt;
    cVorname : String;&lt;br /&gt;
begin&lt;br /&gt;
    if (FrmEdit.lEditMode) then begin&lt;br /&gt;
        Meldung(&#039;Edit Mode True&#039;);&lt;br /&gt;
    end else begin&lt;br /&gt;
        Meldung(&#039;Edit Mode False&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
    Meldung(FrmEdit.stred_db_a_name.Text);&lt;br /&gt;
    oSte := FrmEdit.FindComponent(&#039;stred_db_a_name&#039;);&lt;br /&gt;
    Meldung(oSte.Text);&lt;br /&gt;
    cVorname:= FrmEdit.xGet(&#039;a_vorname&#039;);&lt;br /&gt;
    Meldung(cVorname);&lt;br /&gt;
    if (Empty(cVorname)) then begin&lt;br /&gt;
        FrmEdit.lCheckOk := False;&lt;br /&gt;
        Meldung(&#039;Bitte Vorname eingtragen&#039;);&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Positionen in Vorgängen blockieren===&lt;br /&gt;
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Name: AN_VORGANG_EDIT Function OpenClose&lt;br /&gt;
{{Hinweis| Der Prefix &amp;quot;AN&amp;quot; steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;&lt;br /&gt;
begin&lt;br /&gt;
   //DebugLine(&#039;cVgNr&#039;+cVgNr);&lt;br /&gt;
&lt;br /&gt;
    //02 = Möbel&lt;br /&gt;
    Result := oOBS.cBenutzergruppe &amp;lt;&amp;gt; &#039;02&#039;;  &lt;br /&gt;
    &lt;br /&gt;
    if (Result) then begin  &lt;br /&gt;
        //Wenn Positionen vorhanden dann kein Positions-Edit&lt;br /&gt;
        if (DB_LSeek(oDB,&#039;ANGPOS&#039;,&#039;az_nr=&#039;+DB_SqlVal(cVGNr))) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
                          &lt;br /&gt;
    if (Result) then begin&lt;br /&gt;
                &lt;br /&gt;
        //DebugLine(iif(lInsertMode,&#039;True&#039;,&#039;False&#039;));&lt;br /&gt;
        &lt;br /&gt;
        //Bei nicht Insert immer False&lt;br /&gt;
        if (lInsertMode = False) then begin&lt;br /&gt;
            Result := False;&lt;br /&gt;
        end;&lt;br /&gt;
    end;&lt;br /&gt;
    &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=Vorlage:Makros_und_Scripting&amp;diff=57672</id>
		<title>Vorlage:Makros und Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=Vorlage:Makros_und_Scripting&amp;diff=57672"/>
		<updated>2020-03-25T08:52:49Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-left:2px; padding:0px; background:#FFFFFF; width:19em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:none;margin-top:0pt;padding:0pt;&amp;quot; id=&amp;quot;navigation&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;top:-20pt;color:#000000;background:#ffffff; border: 3pt double #cfcfcf; padding: 5pt; margin: 0pt;margin-bottom:-20pt; z-index:1;border-top-right-radius:7pt;-moz-border-radius-topright:7pt;-webkit-border-top-right-radius:7pt;border-bottom-left-radius:7pt;-moz-border-radius-bottomleft:7pt;-webkit-border-bottom-left-radius:7pt;box-shadow: 3px 3px 4px #c0c0c0;-webkit-box-shadow: 3px 3px 4px #c0c0c0;-moz-box-shadow: 3px 3px 4px #c0c0c0;&amp;quot;&amp;gt;[[Hauptseite|Wiki]] » [[OBS/Makros und Scripting|Makros und Scripting]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Vorlage:Textbox-Blau|1=Makros und Scripting|2=&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros_und_Scripting#Allgemeines|&#039;&#039;&#039;Allgemeines&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Syntax|Syntax]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Funktionen|Übersicht Funktionen]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Prozeduren|Übersicht Prozeduren]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Konstanten|Übersicht Konstanten]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Globale Variablen|Übersicht Globale Variablen]]&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros und Scripting/Allgemeines/Klassen|&#039;&#039;&#039;Klassen&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge|&#039;&#039;&#039;Vorgangsgenerierung&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Angebot|Angebot]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Auftrag|Auftrag]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Reparaturauftrag|Reparaturauftrag]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Produktionsauftrag|Produktionsauftrag]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Lieferschein|Lieferschein]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Rechnung|Rechnung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Bestellung|Bestellung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Einkaufslieferschein|Einkaufslieferschein]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Einkauf|Einkauf]]&lt;br /&gt;
}}&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros und Scripting/Allgemeines/Klassen/Importdatei|&#039;&#039;&#039;Import-Dateien&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Importdatei/TxImportFile|TxImportFile]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Importdatei/TxImportFileCSV|TxImportFileCSV]]&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Script Library|Script Bibliothek]]&lt;br /&gt;
}}&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros_und_Scripting#Anwendungsbereiche|&#039;&#039;&#039;Anwendungsbereiche&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Drucke|Drucke]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Makrodateien|Sonstige Makrodateien]]&lt;br /&gt;
{{Vorlage:Klapptext|kopf=Customizing|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize|Übersicht]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen|Listen]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits|Edits]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen|Select-Listen]]&lt;br /&gt;
}}&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Preislisten|Preislisten]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Bildverwaltung|Bildverwaltung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Artikelpflege|Artikelpflege]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Positionserfassung|Positionserfassung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/DataInOut|Data In/Out]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Wiederkehrende Aufgaben|Wiederkehrende Aufgaben]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/OFML-Kalkulation|OFML-Kalkulation]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Zugriff auf externe Datenquellen|Zugriff auf externe Datenquellen (ODBC)]]&lt;br /&gt;
}}&lt;br /&gt;
[[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|Benutzerdefinierte Datenbanktabellen]]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Folgender Code muss in die jeweils gewünschte Seite hinzugefügt werden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Makros und Scripting}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
[[Kategorie:Templates/Navigationen]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=Vorlage:Makros_und_Scripting&amp;diff=57671</id>
		<title>Vorlage:Makros und Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=Vorlage:Makros_und_Scripting&amp;diff=57671"/>
		<updated>2020-03-25T08:49:13Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-left:2px; padding:0px; background:#FFFFFF; width:19em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:none;margin-top:0pt;padding:0pt;&amp;quot; id=&amp;quot;navigation&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;top:-20pt;color:#000000;background:#ffffff; border: 3pt double #cfcfcf; padding: 5pt; margin: 0pt;margin-bottom:-20pt; z-index:1;border-top-right-radius:7pt;-moz-border-radius-topright:7pt;-webkit-border-top-right-radius:7pt;border-bottom-left-radius:7pt;-moz-border-radius-bottomleft:7pt;-webkit-border-bottom-left-radius:7pt;box-shadow: 3px 3px 4px #c0c0c0;-webkit-box-shadow: 3px 3px 4px #c0c0c0;-moz-box-shadow: 3px 3px 4px #c0c0c0;&amp;quot;&amp;gt;[[Hauptseite|Wiki]] » [[OBS/Makros und Scripting|Makros und Scripting]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Vorlage:Textbox-Blau|1=Makros und Scripting|2=&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros_und_Scripting#Allgemeines|&#039;&#039;&#039;Allgemeines&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Syntax|Syntax]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Funktionen|Übersicht Funktionen]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Prozeduren|Übersicht Prozeduren]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Konstanten|Übersicht Konstanten]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Übersicht Globale Variablen|Übersicht Globale Variablen]]&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros und Scripting/Allgemeines/Klassen|&#039;&#039;&#039;Klassen&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge|&#039;&#039;&#039;Vorgangsgenerierung&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Angebot|Angebot]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Auftrag|Auftrag]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Reparaturauftrag|Reparaturauftrag]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Produktionsauftrag|Produktionsauftrag]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Lieferschein|Lieferschein]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Rechnung|Rechnung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Bestellung|Bestellung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Einkaufslieferschein|Einkaufslieferschein]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Vorgänge/Einkauf|Einkauf]]&lt;br /&gt;
}}&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros und Scripting/Allgemeines/Klassen/Importdatei|&#039;&#039;&#039;Import-Dateien&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Importdatei/TxImportFile|TxImportFile]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Klassen/Importdatei/TxImportFileCSV|TxImportFileCSV]]&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
* [[OBS/Makros und Scripting/Allgemeines/Script Library|Script Bibliothek]]&lt;br /&gt;
}}&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros_und_Scripting#Anwendungsbereiche|&#039;&#039;&#039;Anwendungsbereiche&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Drucke|Drucke]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Makrodateien|Sonstige Makrodateien]]&lt;br /&gt;
{{Vorlage:Klapptext|kopf=[[OBS/Makros_und_Scripting#Anwendungsbereiche|&#039;&#039;&#039;Anwendungsbereiche&#039;&#039;&#039;]]|inhalt=&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen|Customize Listen]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Edits|Customize Edits]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Customize Select-Listen|Customize Select-Listen]]&lt;br /&gt;
}}&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Preislisten|Preislisten]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Bildverwaltung|Bildverwaltung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Artikelpflege|Artikelpflege]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Positionserfassung|Positionserfassung]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/DataInOut|Data In/Out]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Wiederkehrende Aufgaben|Wiederkehrende Aufgaben]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/OFML-Kalkulation|OFML-Kalkulation]]&lt;br /&gt;
* [[OBS/Makros und Scripting/Anwendungsbereiche/Zugriff auf externe Datenquellen|Zugriff auf externe Datenquellen (ODBC)]]&lt;br /&gt;
}}&lt;br /&gt;
[[OBS/Makros und Scripting/Benutzerdefinierte Datenbanktabellen|Benutzerdefinierte Datenbanktabellen]]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Folgender Code muss in die jeweils gewünschte Seite hinzugefügt werden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Makros und Scripting}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
[[Kategorie:Templates/Navigationen]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=FRMCUSTOMIZE&amp;diff=57670</id>
		<title>FRMCUSTOMIZE</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=FRMCUSTOMIZE&amp;diff=57670"/>
		<updated>2020-03-25T08:47:45Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: Weiterleitung nach OBS/Makros und Scripting/Anwendungsbereiche/Customize erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[OBS/Makros und Scripting/Anwendungsbereiche/Customize]]&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57122</id>
		<title>OBS/Kostenpflichtige Module/ZUGFeRD</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57122"/>
		<updated>2020-01-23T09:06:14Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Positionsliste */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kostenpflichtige Module}}&lt;br /&gt;
&lt;br /&gt;
==Über ZUGFeRD==&lt;br /&gt;
ZUGFeRD ist ein Standard zur elektronischen Übermittlung von Rechnungsdaten. Dabei wird eine computerlesbare Textdatei im XRechnungs-Standard an eine gewöhnliche, auf langzeitarchivierung optimierte PDF-Rechnung angehängt. &lt;br /&gt;
&lt;br /&gt;
Mit dem OBS-ZUGFeRD-Modul können Sie sowohl ZUGFeRD-PDF-Dateien, die Sie von Lieferanten oder Dienstleistern erhalten, in OBS-Einkäufe umwandeln, als auch ZUGFeRD-Rechnungen an Kunden schicken, die diese Dateien verarbeiten können. (Vorraussichtlich wird dies bei kommunalen Ausschreibungen ab einem gewissen Auftragswert in Zukunft verpflichtend.)&lt;br /&gt;
&lt;br /&gt;
OBS unterstützt ab Version 003220 sowohl das Einlesen von empfangenen Einkaufsrechnungen als auch das Erstellen und Versenden von ZUGFeRD-PDFs für ausgehenden Rechnungen.&lt;br /&gt;
&lt;br /&gt;
==Vorraussetzungen==&lt;br /&gt;
* Generell:&lt;br /&gt;
** Modul mieten und freischalten lassen&lt;br /&gt;
* Zum Einlesen: &lt;br /&gt;
** Stammdaten pflegen: Erlöskonto (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
* Zum Erstellen: &lt;br /&gt;
** Konstanten pflegen (System - I Konstanten) &lt;br /&gt;
** Programmparameter 908 auf 3 setzen (PDF-Archivierung)&lt;br /&gt;
** Steuerschlüssel pflegen (Stammdaten - Weitere Stammdaten - Mehrwertsteuer): Den Schlüsseln 00-09 müssen korrekte TSE-Schlüssel zugeordnet werden. &lt;br /&gt;
** Stammdaten pflegen: Bankdaten (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
&lt;br /&gt;
==Anleitung==&lt;br /&gt;
&lt;br /&gt;
===Einlesen von Einkaufsrechnungen===&lt;br /&gt;
&lt;br /&gt;
# Zug-Vorgangsliste öffnen (Programme - Zugferd)&lt;br /&gt;
# Import per F6 oder Drag&amp;amp;Drop&lt;br /&gt;
# Bei rot hinterlegten Einträgen:&lt;br /&gt;
## Fehler bearbeiten&lt;br /&gt;
## F10 - Daten neu verarbeiten&lt;br /&gt;
# Enter:&lt;br /&gt;
## Lieferanten prüfen&lt;br /&gt;
## Landeszuordnung prüfen&lt;br /&gt;
## Zahlungsbedingung zuordnen (kann in den allermeisten Fällen nicht automatisch zugeordnet werden)&lt;br /&gt;
## Skonto- und Fälligkeitsdatum prüfen und ggbf. manuell eintragen&lt;br /&gt;
# Positionen einzeln prüfen:&lt;br /&gt;
## Erlöskonto und Mehrwertsteuerschlüssel prüfen&lt;br /&gt;
## Artikelnummer zuordnen, falls gewünscht&lt;br /&gt;
# F10 - Einkaufsrechnung generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
===Erstellen von ZUGFeRD-Rechnungen===&lt;br /&gt;
&lt;br /&gt;
# Stammdaten pflegen und PMode 908 einstellen, s. Vorraussetzungen&lt;br /&gt;
# Rechnung per Mail versenden oder in der Rechnungsliste mit &amp;quot;F10 - Z Zugferd-Rechnung erstellen&amp;quot; manuell generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
==ZUGFeRD-Daten==&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Vorgänge===&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
In dieser Liste können Sie Zugferd-Einkaufsrechnungsdateien importieren, die Sie von Lieferanten oder Dienstleistern erhalten. Ziehen Sie dazu die entsprechende PDF, beispielsweise aus einer Mail, vom Desktop oder aus einem Ordner, auf das Feld &amp;quot;Drag&amp;amp;Drop&amp;quot;, oder wählen Sie sie mit &amp;quot;{{F6}} Import&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Mit dem Haken &amp;quot;Erweiterte Info&amp;quot; öffnet sich das Feld auf der rechten Seite, in dem Sie die Rohdaten des importierten Zugferd-Datensatzes einsehen können.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} öffnen Sie die Bearbeitungsmaske (s.u.) des Datensatzes. Hier können Sie die importierten Zugferd-Daten kontrollieren und korrigieren, bevor Sie aus einer empfangenen Rechnung einen OBS-Einkauf generieren. &lt;br /&gt;
&lt;br /&gt;
Mit {{F10}} Weit. öffnen Sie die weiteren Infos (s.u.)&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie die Daten der importierten Zugferddatei bearbeiten, bevor Sie einen OBS-Einkauf generieren.&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie dabei vor allem, dass &lt;br /&gt;
*der richtige Lieferant eingetragen ist (1), &lt;br /&gt;
*die Zahlungsbedingungen korrekt erfasst sind (3) und &lt;br /&gt;
*Fälligkeits- und Skontodatum erkannt wurden (4), sofern vorhanden.&lt;br /&gt;
&lt;br /&gt;
====F10 Weitere Informationen====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki f10.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie weitere Zugferd-Funktionen aufrufen.&lt;br /&gt;
&lt;br /&gt;
* PDF anzeigen: Zeigt die PDF des aktuellen Datensatzes an. &lt;br /&gt;
* XML anzeigen: Zeigt die an die PDF angehängten Zugferd-Daten in Rohform an.&lt;br /&gt;
* ILN-Verwaltung: derzeit nicht unterstützt&lt;br /&gt;
* Einkaufsrechnung generieren: Erstellt einen Einkauf aus dem gewählten Datensatz. (Wichtig:  Anleitung (s.o.) beachten!!!)&lt;br /&gt;
* Zugferd Stammdaten: Öffnet die Stammdatenmaske und prüft, ob grundlegend Zugferdrechnungen verarbeitet werden können (s. Vorraussetzungen)&lt;br /&gt;
* Protokoll: Nach dem Einlesen oder Erstellen von Zugferddateien kann hier geprüft werden, ob Fehler oder Warnungen vorliegen.&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Stammdaten===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki stamm.jpg]]&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen der Stammdatenmaske werden die Vorraussetzungen (s.o.) geprüft. Probleme werden als Meldungen ausgegeben und müssen bearbeitet werden, bevor Zugferd-Daten korrekt verarbeitet werden können!&lt;br /&gt;
&lt;br /&gt;
====Erlöskonto====&lt;br /&gt;
Wenn der Haken &amp;quot;Automatisches Setzen des Erlöskontos&amp;quot; gesetzt ist, wird beim Import jeder Position das im Feld &amp;quot;Erlöskonto&amp;quot; eingetragene Erlöskonto zugeordnet. &lt;br /&gt;
&lt;br /&gt;
Wenn der Haken nicht gesetzt ist, muss nach dem Import der Zugferd-Einkaufsrechnung für jede Position ein Erlöskonto händisch gewählt werden!&lt;br /&gt;
&lt;br /&gt;
====Bankdaten====&lt;br /&gt;
In den Feldern Bank 1 bis Bank 5 und den zugehörigen IBAN-Feldern können verschiedene Bankkonten eingetragen werden, die beim Erstellen von ausgehenden Zugferd-Rechnungen als akzeptierte Zahlungsmethoden hinterlegt werden. &lt;br /&gt;
&lt;br /&gt;
Wichtig: Der europäische Standard setzt hier mindestens eine eingetragene IBAN vorraus!&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Positionen===&lt;br /&gt;
====Positionsliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier werden alle Positionen aufgelistet, die in den importierten Zugferd-Daten gefunden wurden. &lt;br /&gt;
&lt;br /&gt;
Da der ZUGFeRD-Standard den Entwicklern von Warenwirtschaftssystemen viele Freiheiten bei der Umsetzung lässt, wie verschiedene Daten wie Langtexte, Zahlungsbedingungen und weitere Daten erfasst werden, werden von OBS alle Daten, die nicht automatisch OBS-Datenfeldern zugeordnet werden können, als Langtextpositionen erfasst.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} können die aktuellen Positionsdaten geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
====Positionsbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Positionsdaten des importierten Zugferd-Datensatzes geprüft werden. Vor dem Generieren von OBS-Einkäufen aus importierten Zugferd-Rechnungen muss für jede Position geprüft werden, ob Erlöskonto und MwSt-Schlüssel gesetzt sind!&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57118</id>
		<title>OBS/Kostenpflichtige Module/ZUGFeRD</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57118"/>
		<updated>2020-01-22T12:27:52Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Vorraussetzungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kostenpflichtige Module}}&lt;br /&gt;
&lt;br /&gt;
==Über ZUGFeRD==&lt;br /&gt;
ZUGFeRD ist ein Standard zur elektronischen Übermittlung von Rechnungsdaten. Dabei wird eine computerlesbare Textdatei im XRechnungs-Standard an eine gewöhnliche, auf langzeitarchivierung optimierte PDF-Rechnung angehängt. &lt;br /&gt;
&lt;br /&gt;
Mit dem OBS-ZUGFeRD-Modul können Sie sowohl ZUGFeRD-PDF-Dateien, die Sie von Lieferanten oder Dienstleistern erhalten, in OBS-Einkäufe umwandeln, als auch ZUGFeRD-Rechnungen an Kunden schicken, die diese Dateien verarbeiten können. (Vorraussichtlich wird dies bei kommunalen Ausschreibungen ab einem gewissen Auftragswert in Zukunft verpflichtend.)&lt;br /&gt;
&lt;br /&gt;
OBS unterstützt ab Version 003220 sowohl das Einlesen von empfangenen Einkaufsrechnungen als auch das Erstellen und Versenden von ZUGFeRD-PDFs für ausgehenden Rechnungen.&lt;br /&gt;
&lt;br /&gt;
==Vorraussetzungen==&lt;br /&gt;
* Generell:&lt;br /&gt;
** Modul mieten und freischalten lassen&lt;br /&gt;
* Zum Einlesen: &lt;br /&gt;
** Stammdaten pflegen: Erlöskonto (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
* Zum Erstellen: &lt;br /&gt;
** Konstanten pflegen (System - I Konstanten) &lt;br /&gt;
** Programmparameter 908 auf 3 setzen (PDF-Archivierung)&lt;br /&gt;
** Steuerschlüssel pflegen (Stammdaten - Weitere Stammdaten - Mehrwertsteuer): Den Schlüsseln 00-09 müssen korrekte TSE-Schlüssel zugeordnet werden. &lt;br /&gt;
** Stammdaten pflegen: Bankdaten (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
&lt;br /&gt;
==Anleitung==&lt;br /&gt;
&lt;br /&gt;
===Einlesen von Einkaufsrechnungen===&lt;br /&gt;
&lt;br /&gt;
# Zug-Vorgangsliste öffnen (Programme - Zugferd)&lt;br /&gt;
# Import per F6 oder Drag&amp;amp;Drop&lt;br /&gt;
# Bei rot hinterlegten Einträgen:&lt;br /&gt;
## Fehler bearbeiten&lt;br /&gt;
## F10 - Daten neu verarbeiten&lt;br /&gt;
# Enter:&lt;br /&gt;
## Lieferanten prüfen&lt;br /&gt;
## Landeszuordnung prüfen&lt;br /&gt;
## Zahlungsbedingung zuordnen (kann in den allermeisten Fällen nicht automatisch zugeordnet werden)&lt;br /&gt;
## Skonto- und Fälligkeitsdatum prüfen und ggbf. manuell eintragen&lt;br /&gt;
# Positionen einzeln prüfen:&lt;br /&gt;
## Erlöskonto und Mehrwertsteuerschlüssel prüfen&lt;br /&gt;
## Artikelnummer zuordnen, falls gewünscht&lt;br /&gt;
# F10 - Einkaufsrechnung generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
===Erstellen von ZUGFeRD-Rechnungen===&lt;br /&gt;
&lt;br /&gt;
# Stammdaten pflegen und PMode 908 einstellen, s. Vorraussetzungen&lt;br /&gt;
# Rechnung per Mail versenden oder in der Rechnungsliste mit &amp;quot;F10 - Z Zugferd-Rechnung erstellen&amp;quot; manuell generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
==ZUGFeRD-Daten==&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Vorgänge===&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
In dieser Liste können Sie Zugferd-Einkaufsrechnungsdateien importieren, die Sie von Lieferanten oder Dienstleistern erhalten. Ziehen Sie dazu die entsprechende PDF, beispielsweise aus einer Mail, vom Desktop oder aus einem Ordner, auf das Feld &amp;quot;Drag&amp;amp;Drop&amp;quot;, oder wählen Sie sie mit &amp;quot;{{F6}} Import&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Mit dem Haken &amp;quot;Erweiterte Info&amp;quot; öffnet sich das Feld auf der rechten Seite, in dem Sie die Rohdaten des importierten Zugferd-Datensatzes einsehen können.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} öffnen Sie die Bearbeitungsmaske (s.u.) des Datensatzes. Hier können Sie die importierten Zugferd-Daten kontrollieren und korrigieren, bevor Sie aus einer empfangenen Rechnung einen OBS-Einkauf generieren. &lt;br /&gt;
&lt;br /&gt;
Mit {{F10}} Weit. öffnen Sie die weiteren Infos (s.u.)&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie die Daten der importierten Zugferddatei bearbeiten, bevor Sie einen OBS-Einkauf generieren.&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie dabei vor allem, dass &lt;br /&gt;
*der richtige Lieferant eingetragen ist (1), &lt;br /&gt;
*die Zahlungsbedingungen korrekt erfasst sind (3) und &lt;br /&gt;
*Fälligkeits- und Skontodatum erkannt wurden (4), sofern vorhanden.&lt;br /&gt;
&lt;br /&gt;
====F10 Weitere Informationen====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki f10.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie weitere Zugferd-Funktionen aufrufen.&lt;br /&gt;
&lt;br /&gt;
* PDF anzeigen: Zeigt die PDF des aktuellen Datensatzes an. &lt;br /&gt;
* XML anzeigen: Zeigt die an die PDF angehängten Zugferd-Daten in Rohform an.&lt;br /&gt;
* ILN-Verwaltung: derzeit nicht unterstützt&lt;br /&gt;
* Einkaufsrechnung generieren: Erstellt einen Einkauf aus dem gewählten Datensatz. (Wichtig:  Anleitung (s.o.) beachten!!!)&lt;br /&gt;
* Zugferd Stammdaten: Öffnet die Stammdatenmaske und prüft, ob grundlegend Zugferdrechnungen verarbeitet werden können (s. Vorraussetzungen)&lt;br /&gt;
* Protokoll: Nach dem Einlesen oder Erstellen von Zugferddateien kann hier geprüft werden, ob Fehler oder Warnungen vorliegen.&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Stammdaten===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki stamm.jpg]]&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen der Stammdatenmaske werden die Vorraussetzungen (s.o.) geprüft. Probleme werden als Meldungen ausgegeben und müssen bearbeitet werden, bevor Zugferd-Daten korrekt verarbeitet werden können!&lt;br /&gt;
&lt;br /&gt;
====Erlöskonto====&lt;br /&gt;
Wenn der Haken &amp;quot;Automatisches Setzen des Erlöskontos&amp;quot; gesetzt ist, wird beim Import jeder Position das im Feld &amp;quot;Erlöskonto&amp;quot; eingetragene Erlöskonto zugeordnet. &lt;br /&gt;
&lt;br /&gt;
Wenn der Haken nicht gesetzt ist, muss nach dem Import der Zugferd-Einkaufsrechnung für jede Position ein Erlöskonto händisch gewählt werden!&lt;br /&gt;
&lt;br /&gt;
====Bankdaten====&lt;br /&gt;
In den Feldern Bank 1 bis Bank 5 und den zugehörigen IBAN-Feldern können verschiedene Bankkonten eingetragen werden, die beim Erstellen von ausgehenden Zugferd-Rechnungen als akzeptierte Zahlungsmethoden hinterlegt werden. &lt;br /&gt;
&lt;br /&gt;
Wichtig: Der europäische Standard setzt hier mindestens eine eingetragene IBAN vorraus!&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Positionen===&lt;br /&gt;
====Positionsliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier werden alle Positionen aufgelistet, die in den importierten Zugferd-Daten gefunden wurden. &lt;br /&gt;
&lt;br /&gt;
Da der ZUGFeRD-Standard den Warenwirtschaften viele Freiheiten bei der Umsetzung lässt, wie verschiedene Daten wie Langtexte, Zahlungsbedingungen und weitere Daten erfasst werden, werden von OBS alle Daten, die nicht automatisch OBS-Datenfeldern zugeordnet werden können, als Langtextpositionen erfasst.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} können die aktuellen Positionsdaten geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
====Positionsbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Positionsdaten des importierten Zugferd-Datensatzes geprüft werden. Vor dem Generieren von OBS-Einkäufen aus importierten Zugferd-Rechnungen muss für jede Position geprüft werden, ob Erlöskonto und MwSt-Schlüssel gesetzt sind!&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57117</id>
		<title>OBS/Kostenpflichtige Module/ZUGFeRD</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57117"/>
		<updated>2020-01-22T11:57:35Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Über ZUGFeRD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kostenpflichtige Module}}&lt;br /&gt;
&lt;br /&gt;
==Über ZUGFeRD==&lt;br /&gt;
ZUGFeRD ist ein Standard zur elektronischen Übermittlung von Rechnungsdaten. Dabei wird eine computerlesbare Textdatei im XRechnungs-Standard an eine gewöhnliche, auf langzeitarchivierung optimierte PDF-Rechnung angehängt. &lt;br /&gt;
&lt;br /&gt;
Mit dem OBS-ZUGFeRD-Modul können Sie sowohl ZUGFeRD-PDF-Dateien, die Sie von Lieferanten oder Dienstleistern erhalten, in OBS-Einkäufe umwandeln, als auch ZUGFeRD-Rechnungen an Kunden schicken, die diese Dateien verarbeiten können. (Vorraussichtlich wird dies bei kommunalen Ausschreibungen ab einem gewissen Auftragswert in Zukunft verpflichtend.)&lt;br /&gt;
&lt;br /&gt;
OBS unterstützt ab Version 003220 sowohl das Einlesen von empfangenen Einkaufsrechnungen als auch das Erstellen und Versenden von ZUGFeRD-PDFs für ausgehenden Rechnungen.&lt;br /&gt;
&lt;br /&gt;
==Vorraussetzungen==&lt;br /&gt;
* Generell:&lt;br /&gt;
** Modul mieten und freischalten lassen&lt;br /&gt;
* Zum Einlesen: &lt;br /&gt;
** Stammdaten pflegen: Erlöskonto (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
* Zum Erstellen: Konstanten pflegen (System - I Konstanten) &lt;br /&gt;
** Programmparameter 908 auf 3 setzen (PDF-Archivierung)&lt;br /&gt;
** Steuerschlüssel pflegen (Stammdaten - Weitere Stammdaten - Mehrwertsteuer): Den Schlüsseln 00-09 müssen korrekte TSE-Schlüssel zugeordnet werden. &lt;br /&gt;
** Stammdaten pflegen: Bankdaten (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
&lt;br /&gt;
==Anleitung==&lt;br /&gt;
&lt;br /&gt;
===Einlesen von Einkaufsrechnungen===&lt;br /&gt;
&lt;br /&gt;
# Zug-Vorgangsliste öffnen (Programme - Zugferd)&lt;br /&gt;
# Import per F6 oder Drag&amp;amp;Drop&lt;br /&gt;
# Bei rot hinterlegten Einträgen:&lt;br /&gt;
## Fehler bearbeiten&lt;br /&gt;
## F10 - Daten neu verarbeiten&lt;br /&gt;
# Enter:&lt;br /&gt;
## Lieferanten prüfen&lt;br /&gt;
## Landeszuordnung prüfen&lt;br /&gt;
## Zahlungsbedingung zuordnen (kann in den allermeisten Fällen nicht automatisch zugeordnet werden)&lt;br /&gt;
## Skonto- und Fälligkeitsdatum prüfen und ggbf. manuell eintragen&lt;br /&gt;
# Positionen einzeln prüfen:&lt;br /&gt;
## Erlöskonto und Mehrwertsteuerschlüssel prüfen&lt;br /&gt;
## Artikelnummer zuordnen, falls gewünscht&lt;br /&gt;
# F10 - Einkaufsrechnung generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
===Erstellen von ZUGFeRD-Rechnungen===&lt;br /&gt;
&lt;br /&gt;
# Stammdaten pflegen und PMode 908 einstellen, s. Vorraussetzungen&lt;br /&gt;
# Rechnung per Mail versenden oder in der Rechnungsliste mit &amp;quot;F10 - Z Zugferd-Rechnung erstellen&amp;quot; manuell generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
==ZUGFeRD-Daten==&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Vorgänge===&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
In dieser Liste können Sie Zugferd-Einkaufsrechnungsdateien importieren, die Sie von Lieferanten oder Dienstleistern erhalten. Ziehen Sie dazu die entsprechende PDF, beispielsweise aus einer Mail, vom Desktop oder aus einem Ordner, auf das Feld &amp;quot;Drag&amp;amp;Drop&amp;quot;, oder wählen Sie sie mit &amp;quot;{{F6}} Import&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Mit dem Haken &amp;quot;Erweiterte Info&amp;quot; öffnet sich das Feld auf der rechten Seite, in dem Sie die Rohdaten des importierten Zugferd-Datensatzes einsehen können.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} öffnen Sie die Bearbeitungsmaske (s.u.) des Datensatzes. Hier können Sie die importierten Zugferd-Daten kontrollieren und korrigieren, bevor Sie aus einer empfangenen Rechnung einen OBS-Einkauf generieren. &lt;br /&gt;
&lt;br /&gt;
Mit {{F10}} Weit. öffnen Sie die weiteren Infos (s.u.)&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie die Daten der importierten Zugferddatei bearbeiten, bevor Sie einen OBS-Einkauf generieren.&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie dabei vor allem, dass &lt;br /&gt;
*der richtige Lieferant eingetragen ist (1), &lt;br /&gt;
*die Zahlungsbedingungen korrekt erfasst sind (3) und &lt;br /&gt;
*Fälligkeits- und Skontodatum erkannt wurden (4), sofern vorhanden.&lt;br /&gt;
&lt;br /&gt;
====F10 Weitere Informationen====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki f10.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie weitere Zugferd-Funktionen aufrufen.&lt;br /&gt;
&lt;br /&gt;
* PDF anzeigen: Zeigt die PDF des aktuellen Datensatzes an. &lt;br /&gt;
* XML anzeigen: Zeigt die an die PDF angehängten Zugferd-Daten in Rohform an.&lt;br /&gt;
* ILN-Verwaltung: derzeit nicht unterstützt&lt;br /&gt;
* Einkaufsrechnung generieren: Erstellt einen Einkauf aus dem gewählten Datensatz. (Wichtig:  Anleitung (s.o.) beachten!!!)&lt;br /&gt;
* Zugferd Stammdaten: Öffnet die Stammdatenmaske und prüft, ob grundlegend Zugferdrechnungen verarbeitet werden können (s. Vorraussetzungen)&lt;br /&gt;
* Protokoll: Nach dem Einlesen oder Erstellen von Zugferddateien kann hier geprüft werden, ob Fehler oder Warnungen vorliegen.&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Stammdaten===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki stamm.jpg]]&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen der Stammdatenmaske werden die Vorraussetzungen (s.o.) geprüft. Probleme werden als Meldungen ausgegeben und müssen bearbeitet werden, bevor Zugferd-Daten korrekt verarbeitet werden können!&lt;br /&gt;
&lt;br /&gt;
====Erlöskonto====&lt;br /&gt;
Wenn der Haken &amp;quot;Automatisches Setzen des Erlöskontos&amp;quot; gesetzt ist, wird beim Import jeder Position das im Feld &amp;quot;Erlöskonto&amp;quot; eingetragene Erlöskonto zugeordnet. &lt;br /&gt;
&lt;br /&gt;
Wenn der Haken nicht gesetzt ist, muss nach dem Import der Zugferd-Einkaufsrechnung für jede Position ein Erlöskonto händisch gewählt werden!&lt;br /&gt;
&lt;br /&gt;
====Bankdaten====&lt;br /&gt;
In den Feldern Bank 1 bis Bank 5 und den zugehörigen IBAN-Feldern können verschiedene Bankkonten eingetragen werden, die beim Erstellen von ausgehenden Zugferd-Rechnungen als akzeptierte Zahlungsmethoden hinterlegt werden. &lt;br /&gt;
&lt;br /&gt;
Wichtig: Der europäische Standard setzt hier mindestens eine eingetragene IBAN vorraus!&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Positionen===&lt;br /&gt;
====Positionsliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier werden alle Positionen aufgelistet, die in den importierten Zugferd-Daten gefunden wurden. &lt;br /&gt;
&lt;br /&gt;
Da der ZUGFeRD-Standard den Warenwirtschaften viele Freiheiten bei der Umsetzung lässt, wie verschiedene Daten wie Langtexte, Zahlungsbedingungen und weitere Daten erfasst werden, werden von OBS alle Daten, die nicht automatisch OBS-Datenfeldern zugeordnet werden können, als Langtextpositionen erfasst.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} können die aktuellen Positionsdaten geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
====Positionsbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Positionsdaten des importierten Zugferd-Datensatzes geprüft werden. Vor dem Generieren von OBS-Einkäufen aus importierten Zugferd-Rechnungen muss für jede Position geprüft werden, ob Erlöskonto und MwSt-Schlüssel gesetzt sind!&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57116</id>
		<title>OBS/Kostenpflichtige Module/ZUGFeRD</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57116"/>
		<updated>2020-01-22T11:52:59Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Vorraussetzungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kostenpflichtige Module}}&lt;br /&gt;
&lt;br /&gt;
==Über ZUGFeRD==&lt;br /&gt;
ZUGFeRD ist ein Standard zur elektronischen Übermittlung von Rechnungsdaten. Dabei wird eine computerlesbare Textdatei im XRechnungs-Standard an eine gewöhnliche, auf langzeitarchivierung optimierte PDF-Rechnung angehängt. &lt;br /&gt;
&lt;br /&gt;
OBS unterstützt ab Version 003220 sowohl das Einlesen von empfangenen Einkaufsrechnungen als auch das Erstellen und Versenden von ZUGFeRD-PDFs für ausgehenden Rechnungen.&lt;br /&gt;
&lt;br /&gt;
==Vorraussetzungen==&lt;br /&gt;
* Generell:&lt;br /&gt;
** Modul mieten und freischalten lassen&lt;br /&gt;
* Zum Einlesen: &lt;br /&gt;
** Stammdaten pflegen: Erlöskonto (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
* Zum Erstellen: Konstanten pflegen (System - I Konstanten) &lt;br /&gt;
** Programmparameter 908 auf 3 setzen (PDF-Archivierung)&lt;br /&gt;
** Steuerschlüssel pflegen (Stammdaten - Weitere Stammdaten - Mehrwertsteuer): Den Schlüsseln 00-09 müssen korrekte TSE-Schlüssel zugeordnet werden. &lt;br /&gt;
** Stammdaten pflegen: Bankdaten (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
&lt;br /&gt;
==Anleitung==&lt;br /&gt;
&lt;br /&gt;
===Einlesen von Einkaufsrechnungen===&lt;br /&gt;
&lt;br /&gt;
# Zug-Vorgangsliste öffnen (Programme - Zugferd)&lt;br /&gt;
# Import per F6 oder Drag&amp;amp;Drop&lt;br /&gt;
# Bei rot hinterlegten Einträgen:&lt;br /&gt;
## Fehler bearbeiten&lt;br /&gt;
## F10 - Daten neu verarbeiten&lt;br /&gt;
# Enter:&lt;br /&gt;
## Lieferanten prüfen&lt;br /&gt;
## Landeszuordnung prüfen&lt;br /&gt;
## Zahlungsbedingung zuordnen (kann in den allermeisten Fällen nicht automatisch zugeordnet werden)&lt;br /&gt;
## Skonto- und Fälligkeitsdatum prüfen und ggbf. manuell eintragen&lt;br /&gt;
# Positionen einzeln prüfen:&lt;br /&gt;
## Erlöskonto und Mehrwertsteuerschlüssel prüfen&lt;br /&gt;
## Artikelnummer zuordnen, falls gewünscht&lt;br /&gt;
# F10 - Einkaufsrechnung generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
===Erstellen von ZUGFeRD-Rechnungen===&lt;br /&gt;
&lt;br /&gt;
# Stammdaten pflegen und PMode 908 einstellen, s. Vorraussetzungen&lt;br /&gt;
# Rechnung per Mail versenden oder in der Rechnungsliste mit &amp;quot;F10 - Z Zugferd-Rechnung erstellen&amp;quot; manuell generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
==ZUGFeRD-Daten==&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Vorgänge===&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
In dieser Liste können Sie Zugferd-Einkaufsrechnungsdateien importieren, die Sie von Lieferanten oder Dienstleistern erhalten. Ziehen Sie dazu die entsprechende PDF, beispielsweise aus einer Mail, vom Desktop oder aus einem Ordner, auf das Feld &amp;quot;Drag&amp;amp;Drop&amp;quot;, oder wählen Sie sie mit &amp;quot;{{F6}} Import&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Mit dem Haken &amp;quot;Erweiterte Info&amp;quot; öffnet sich das Feld auf der rechten Seite, in dem Sie die Rohdaten des importierten Zugferd-Datensatzes einsehen können.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} öffnen Sie die Bearbeitungsmaske (s.u.) des Datensatzes. Hier können Sie die importierten Zugferd-Daten kontrollieren und korrigieren, bevor Sie aus einer empfangenen Rechnung einen OBS-Einkauf generieren. &lt;br /&gt;
&lt;br /&gt;
Mit {{F10}} Weit. öffnen Sie die weiteren Infos (s.u.)&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie die Daten der importierten Zugferddatei bearbeiten, bevor Sie einen OBS-Einkauf generieren.&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie dabei vor allem, dass &lt;br /&gt;
*der richtige Lieferant eingetragen ist (1), &lt;br /&gt;
*die Zahlungsbedingungen korrekt erfasst sind (3) und &lt;br /&gt;
*Fälligkeits- und Skontodatum erkannt wurden (4), sofern vorhanden.&lt;br /&gt;
&lt;br /&gt;
====F10 Weitere Informationen====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki f10.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie weitere Zugferd-Funktionen aufrufen.&lt;br /&gt;
&lt;br /&gt;
* PDF anzeigen: Zeigt die PDF des aktuellen Datensatzes an. &lt;br /&gt;
* XML anzeigen: Zeigt die an die PDF angehängten Zugferd-Daten in Rohform an.&lt;br /&gt;
* ILN-Verwaltung: derzeit nicht unterstützt&lt;br /&gt;
* Einkaufsrechnung generieren: Erstellt einen Einkauf aus dem gewählten Datensatz. (Wichtig:  Anleitung (s.o.) beachten!!!)&lt;br /&gt;
* Zugferd Stammdaten: Öffnet die Stammdatenmaske und prüft, ob grundlegend Zugferdrechnungen verarbeitet werden können (s. Vorraussetzungen)&lt;br /&gt;
* Protokoll: Nach dem Einlesen oder Erstellen von Zugferddateien kann hier geprüft werden, ob Fehler oder Warnungen vorliegen.&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Stammdaten===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki stamm.jpg]]&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen der Stammdatenmaske werden die Vorraussetzungen (s.o.) geprüft. Probleme werden als Meldungen ausgegeben und müssen bearbeitet werden, bevor Zugferd-Daten korrekt verarbeitet werden können!&lt;br /&gt;
&lt;br /&gt;
====Erlöskonto====&lt;br /&gt;
Wenn der Haken &amp;quot;Automatisches Setzen des Erlöskontos&amp;quot; gesetzt ist, wird beim Import jeder Position das im Feld &amp;quot;Erlöskonto&amp;quot; eingetragene Erlöskonto zugeordnet. &lt;br /&gt;
&lt;br /&gt;
Wenn der Haken nicht gesetzt ist, muss nach dem Import der Zugferd-Einkaufsrechnung für jede Position ein Erlöskonto händisch gewählt werden!&lt;br /&gt;
&lt;br /&gt;
====Bankdaten====&lt;br /&gt;
In den Feldern Bank 1 bis Bank 5 und den zugehörigen IBAN-Feldern können verschiedene Bankkonten eingetragen werden, die beim Erstellen von ausgehenden Zugferd-Rechnungen als akzeptierte Zahlungsmethoden hinterlegt werden. &lt;br /&gt;
&lt;br /&gt;
Wichtig: Der europäische Standard setzt hier mindestens eine eingetragene IBAN vorraus!&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Positionen===&lt;br /&gt;
====Positionsliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier werden alle Positionen aufgelistet, die in den importierten Zugferd-Daten gefunden wurden. &lt;br /&gt;
&lt;br /&gt;
Da der ZUGFeRD-Standard den Warenwirtschaften viele Freiheiten bei der Umsetzung lässt, wie verschiedene Daten wie Langtexte, Zahlungsbedingungen und weitere Daten erfasst werden, werden von OBS alle Daten, die nicht automatisch OBS-Datenfeldern zugeordnet werden können, als Langtextpositionen erfasst.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} können die aktuellen Positionsdaten geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
====Positionsbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Positionsdaten des importierten Zugferd-Datensatzes geprüft werden. Vor dem Generieren von OBS-Einkäufen aus importierten Zugferd-Rechnungen muss für jede Position geprüft werden, ob Erlöskonto und MwSt-Schlüssel gesetzt sind!&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
	<entry>
		<id>https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57115</id>
		<title>OBS/Kostenpflichtige Module/ZUGFeRD</title>
		<link rel="alternate" type="text/html" href="https://wiki.bergau.de/index.php?title=OBS/Kostenpflichtige_Module/ZUGFeRD&amp;diff=57115"/>
		<updated>2020-01-22T11:52:27Z</updated>

		<summary type="html">&lt;p&gt;Heibutzki: /* Vorraussetzungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kostenpflichtige Module}}&lt;br /&gt;
&lt;br /&gt;
==Über ZUGFeRD==&lt;br /&gt;
ZUGFeRD ist ein Standard zur elektronischen Übermittlung von Rechnungsdaten. Dabei wird eine computerlesbare Textdatei im XRechnungs-Standard an eine gewöhnliche, auf langzeitarchivierung optimierte PDF-Rechnung angehängt. &lt;br /&gt;
&lt;br /&gt;
OBS unterstützt ab Version 003220 sowohl das Einlesen von empfangenen Einkaufsrechnungen als auch das Erstellen und Versenden von ZUGFeRD-PDFs für ausgehenden Rechnungen.&lt;br /&gt;
&lt;br /&gt;
==Vorraussetzungen==&lt;br /&gt;
# Generell:&lt;br /&gt;
## Modul mieten und freischalten lassen&lt;br /&gt;
# Zum Einlesen: &lt;br /&gt;
## Stammdaten pflegen: Erlöskonto (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
# Zum Erstellen: Konstanten pflegen (System - I Konstanten) &lt;br /&gt;
## Programmparameter 908 auf 3 setzen (PDF-Archivierung)&lt;br /&gt;
## Steuerschlüssel pflegen (Stammdaten - Weitere Stammdaten - Mehrwertsteuer): Den Schlüsseln 00-09 müssen korrekte TSE-Schlüssel zugeordnet werden. &lt;br /&gt;
## Stammdaten pflegen: Bankdaten (Programme - Zugferd - F10 Stammdaten)&lt;br /&gt;
&lt;br /&gt;
==Anleitung==&lt;br /&gt;
&lt;br /&gt;
===Einlesen von Einkaufsrechnungen===&lt;br /&gt;
&lt;br /&gt;
# Zug-Vorgangsliste öffnen (Programme - Zugferd)&lt;br /&gt;
# Import per F6 oder Drag&amp;amp;Drop&lt;br /&gt;
# Bei rot hinterlegten Einträgen:&lt;br /&gt;
## Fehler bearbeiten&lt;br /&gt;
## F10 - Daten neu verarbeiten&lt;br /&gt;
# Enter:&lt;br /&gt;
## Lieferanten prüfen&lt;br /&gt;
## Landeszuordnung prüfen&lt;br /&gt;
## Zahlungsbedingung zuordnen (kann in den allermeisten Fällen nicht automatisch zugeordnet werden)&lt;br /&gt;
## Skonto- und Fälligkeitsdatum prüfen und ggbf. manuell eintragen&lt;br /&gt;
# Positionen einzeln prüfen:&lt;br /&gt;
## Erlöskonto und Mehrwertsteuerschlüssel prüfen&lt;br /&gt;
## Artikelnummer zuordnen, falls gewünscht&lt;br /&gt;
# F10 - Einkaufsrechnung generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
===Erstellen von ZUGFeRD-Rechnungen===&lt;br /&gt;
&lt;br /&gt;
# Stammdaten pflegen und PMode 908 einstellen, s. Vorraussetzungen&lt;br /&gt;
# Rechnung per Mail versenden oder in der Rechnungsliste mit &amp;quot;F10 - Z Zugferd-Rechnung erstellen&amp;quot; manuell generieren&lt;br /&gt;
&lt;br /&gt;
Auffälligkeiten werden im Zugferdprotokoll (Zugferd-Kopfdaten - F10 - Zugferdprotokoll) erfasst!&lt;br /&gt;
&lt;br /&gt;
==ZUGFeRD-Daten==&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Vorgänge===&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
In dieser Liste können Sie Zugferd-Einkaufsrechnungsdateien importieren, die Sie von Lieferanten oder Dienstleistern erhalten. Ziehen Sie dazu die entsprechende PDF, beispielsweise aus einer Mail, vom Desktop oder aus einem Ordner, auf das Feld &amp;quot;Drag&amp;amp;Drop&amp;quot;, oder wählen Sie sie mit &amp;quot;{{F6}} Import&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Mit dem Haken &amp;quot;Erweiterte Info&amp;quot; öffnet sich das Feld auf der rechten Seite, in dem Sie die Rohdaten des importierten Zugferd-Datensatzes einsehen können.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} öffnen Sie die Bearbeitungsmaske (s.u.) des Datensatzes. Hier können Sie die importierten Zugferd-Daten kontrollieren und korrigieren, bevor Sie aus einer empfangenen Rechnung einen OBS-Einkauf generieren. &lt;br /&gt;
&lt;br /&gt;
Mit {{F10}} Weit. öffnen Sie die weiteren Infos (s.u.)&lt;br /&gt;
&lt;br /&gt;
====Kopfdatenbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki kopf edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie die Daten der importierten Zugferddatei bearbeiten, bevor Sie einen OBS-Einkauf generieren.&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie dabei vor allem, dass &lt;br /&gt;
*der richtige Lieferant eingetragen ist (1), &lt;br /&gt;
*die Zahlungsbedingungen korrekt erfasst sind (3) und &lt;br /&gt;
*Fälligkeits- und Skontodatum erkannt wurden (4), sofern vorhanden.&lt;br /&gt;
&lt;br /&gt;
====F10 Weitere Informationen====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki f10.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie weitere Zugferd-Funktionen aufrufen.&lt;br /&gt;
&lt;br /&gt;
* PDF anzeigen: Zeigt die PDF des aktuellen Datensatzes an. &lt;br /&gt;
* XML anzeigen: Zeigt die an die PDF angehängten Zugferd-Daten in Rohform an.&lt;br /&gt;
* ILN-Verwaltung: derzeit nicht unterstützt&lt;br /&gt;
* Einkaufsrechnung generieren: Erstellt einen Einkauf aus dem gewählten Datensatz. (Wichtig:  Anleitung (s.o.) beachten!!!)&lt;br /&gt;
* Zugferd Stammdaten: Öffnet die Stammdatenmaske und prüft, ob grundlegend Zugferdrechnungen verarbeitet werden können (s. Vorraussetzungen)&lt;br /&gt;
* Protokoll: Nach dem Einlesen oder Erstellen von Zugferddateien kann hier geprüft werden, ob Fehler oder Warnungen vorliegen.&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Stammdaten===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki stamm.jpg]]&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen der Stammdatenmaske werden die Vorraussetzungen (s.o.) geprüft. Probleme werden als Meldungen ausgegeben und müssen bearbeitet werden, bevor Zugferd-Daten korrekt verarbeitet werden können!&lt;br /&gt;
&lt;br /&gt;
====Erlöskonto====&lt;br /&gt;
Wenn der Haken &amp;quot;Automatisches Setzen des Erlöskontos&amp;quot; gesetzt ist, wird beim Import jeder Position das im Feld &amp;quot;Erlöskonto&amp;quot; eingetragene Erlöskonto zugeordnet. &lt;br /&gt;
&lt;br /&gt;
Wenn der Haken nicht gesetzt ist, muss nach dem Import der Zugferd-Einkaufsrechnung für jede Position ein Erlöskonto händisch gewählt werden!&lt;br /&gt;
&lt;br /&gt;
====Bankdaten====&lt;br /&gt;
In den Feldern Bank 1 bis Bank 5 und den zugehörigen IBAN-Feldern können verschiedene Bankkonten eingetragen werden, die beim Erstellen von ausgehenden Zugferd-Rechnungen als akzeptierte Zahlungsmethoden hinterlegt werden. &lt;br /&gt;
&lt;br /&gt;
Wichtig: Der europäische Standard setzt hier mindestens eine eingetragene IBAN vorraus!&lt;br /&gt;
&lt;br /&gt;
===ZUGFeRD-Positionen===&lt;br /&gt;
====Positionsliste====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos liste.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier werden alle Positionen aufgelistet, die in den importierten Zugferd-Daten gefunden wurden. &lt;br /&gt;
&lt;br /&gt;
Da der ZUGFeRD-Standard den Warenwirtschaften viele Freiheiten bei der Umsetzung lässt, wie verschiedene Daten wie Langtexte, Zahlungsbedingungen und weitere Daten erfasst werden, werden von OBS alle Daten, die nicht automatisch OBS-Datenfeldern zugeordnet werden können, als Langtextpositionen erfasst.&lt;br /&gt;
&lt;br /&gt;
Mit {{Return}} können die aktuellen Positionsdaten geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
====Positionsbearbeitungsmaske====&lt;br /&gt;
&lt;br /&gt;
[[Datei:Zug wiki pos edit.jpg]]&lt;br /&gt;
&lt;br /&gt;
Hier können Positionsdaten des importierten Zugferd-Datensatzes geprüft werden. Vor dem Generieren von OBS-Einkäufen aus importierten Zugferd-Rechnungen muss für jede Position geprüft werden, ob Erlöskonto und MwSt-Schlüssel gesetzt sind!&lt;/div&gt;</summary>
		<author><name>Heibutzki</name></author>
	</entry>
</feed>