<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
|Default|@@""" AlertCusAdj = 0 """@@|
คำสั่งเกี่ยวกับการฟ้อง error เมื่อโปรแกรมทำการลดหนี้ลูกหนี้ แล้วยอดหนี้คงเหลือติดลบทั้งจากการป้อนข้อมูลรายการลดหนี้ และการผ่านรายการลดหนี้จากการชำระบิลขาย
* ค่า default 0 คือ ให้โปรแกรมฟ้องเตือน รอให้ผู้ใช้ตัดสินใจว่าจะยอมให้ทำงานต่อ หรือหยุดทำงาน
* ถ้าใช้ค่า 1 โปรแกรมจะเก็บสถานะ error โดยไม่แจ้งให้ผู้ใช้ตัดสินใจ
* ถ้าใช้ค่าเป็น 2, 4, 6 โปรแกรมจะฟ้องเตือน และรอผู้ให้ผู้ใช้ตัดสินใจภายในเวลาที่กำหนด (2,4 หรือ 6 วินาที) ถ้าผู้ใช้ไม่กดภายในเวลา โปรแกรมจะเก็บสถานะเป็น error 
|Default|@@""" AlertStkAdj = 0 """@@|
คำสั่งเกี่ยวกับการฟ้อง error เมื่อโปรแกรมทำการตัดสต็อก แล้วยอดคงเหลือติดลบ
ทั้งจากการป้อนข้อมูลรายการสต็อกสินค้าออก และการผ่านรายการตัดสต็อกจากบิลขาย

* ค่า default 0 คือ ให้โปรแกรมฟ้องเตือน รอให้ผู้ใช้ตัดสินใจว่าจะยอมให้ทำงานต่อ หรือหยุดทำงาน
* ถ้าใช้ค่า 1 โปรแกรมจะเก็บสถานะ error โดยไม่แจ้งให้ผู้ใช้ตัดสินใจ
* ถ้าใช้ค่าเป็น 2, 4, 6 โปรแกรมจะฟ้องเตือน และรอผู้ให้ผู้ใช้ตัดสินใจภายในเวลาที่กำหนด (2,4 หรือ 6 วินาที) ถ้าผู้ใช้ไม่กดภายในเวลา โปรแกรมจะเก็บสถานะเป็น error 
|Default|@@"""  AlertVndAdj = 0 """@@|
คำสั่งเกี่ยวกับการฟ้อง error เมื่อโปรแกรมทำการลดหนี้เจ้าหนี้ แล้วยอดหนี้คงเหลือติดลบทั้งจากการป้อนข้อมูลรายการลดหนี้ และการผ่านรายการลดหนี้จากการชำระบิลซื้อ
* ค่า default 0 คือ ให้โปรแกรมฟ้องเตือน รอให้ผู้ใช้ตัดสินใจว่าจะยอมให้ทำงานต่อ หรือหยุดทำงาน
* ถ้าใช้ค่า 1 โปรแกรมจะเก็บสถานะ error โดยไม่แจ้งให้ผู้ใช้ตัดสินใจ
* ถ้าใช้ค่าเป็น 2, 4, 6 โปรแกรมจะฟ้องเตือน และรอผู้ให้ผู้ใช้ตัดสินใจภายในเวลาที่กำหนด (2,4 หรือ 6 วินาที) ถ้าผู้ใช้ไม่กดภายในเวลา โปรแกรมจะเก็บสถานะเป็น error 
text/plain
.txt .text .js .vbs .asp .cgi .pl
----
text/html
.htm .html .hta .htx .mht
----
text/comma-separated-values
.csv
----
text/javascript
.js
----
text/css
.css
----
text/xml
.xml .xsl .xslt
----
image/gif
.gif
----
image/jpeg
.jpg .jpe .jpeg
----
image/png
.png
----
image/bmp
.bmp
----
image/tiff
.tif .tiff
----
audio/basic
.au .snd
----
audio/wav
.wav
----
audio/x-pn-realaudio
.ra .rm .ram
----
audio/x-midi
.mid .midi
----
audio/mp3
.mp3
----
audio/m3u
.m3u
----
video/x-ms-asf
.asf
----
video/avi
.avi
----
video/mpeg
.mpg .mpeg
----
video/quicktime
.qt .mov .qtvr
----
application/pdf
.pdf
----
application/rtf
.rtf
----
application/postscript
.ai .eps .ps
----
application/wordperfect
.wpd
----
application/mswrite
.wri
----
application/msexcel
.xls .xls3 .xls4 .xls5 .xlw
----
application/msword
.doc
----
application/mspowerpoint
.ppt .pps
----
application/x-director
.swa
----
application/x-shockwave-flash
.swf
----
application/x-zip-compressed
.zip
----
application/x-gzip
.gz
----
application/x-rar-compressed
.rar
----
application/octet-stream
.com .exe .dll .ocx
----
application/java-archive
.jar
/***
|Name|AttachFilePlugin|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|4.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|AttachFilePluginFormatters, AttachFileMIMETypes|
|Description|Store binary files as base64-encoded tiddlers with fallback links for separate local and/or remote file storage|
Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
!!!!!Documentation
>see [[AttachFilePluginInfo]]
!!!!!Inline interface (live)
>see [[AttachFile]] (shadow tiddler)
><<tiddler AttachFile>>
!!!!!Revisions
<<<
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
|please see [[AttachFilePluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePlugin= {major: 4, minor: 0, revision: 0, date: new Date(2009,6,4)};

// shadow tiddler
config.shadowTiddlers.AttachFile="<<attach inline>>";

// add 'attach' backstage task (insert before built-in 'importTask')
if (config.tasks) { // for TW2.2b or above
	config.tasks.attachTask = {
		text: "attach",
		tooltip: "Attach a binary file as a tiddler",
		content: "<<attach inline>>"
	}
	config.backstageTasks.splice(config.backstageTasks.indexOf("importTask"),0,"attachTask");
}

config.macros.attach = {
// // lingo
//{{{
	label: "attach file",
	tooltip: "Attach a file to this document",
	linkTooltip: "Attachment: ",

	typeList: "AttachFileMIMETypes",

	titlePrompt: " enter tiddler title...",
	MIMEPrompt: "<option value=''>select MIME type...</option><option value='editlist'>[edit list...]</option>",
	localPrompt: " enter local path/filename...",
	URLPrompt: " enter remote URL...",

	tiddlerErr: "Please enter a tiddler title",
	sourceErr: "Please enter a source path/filename",
	storageErr: "Please select a storage method: embedded, local or remote",
	MIMEErr: "Unrecognized file format.  Please select a MIME type",
	localErr: "Please enter a local path/filename",
	URLErr: "Please enter a remote URL",
	fileErr: "Invalid path/file or file not found",

	tiddlerFormat: '!usage\n{{{%0}}}\n%0\n!notes\n%1\n!type\n%2\n!file\n%3\n!url\n%4\n!data\n%5\n',

//}}}
// // macro definition
//{{{
	handler:
	function(place,macroName,params) {
		if (params && !params[0])
			{ createTiddlyButton(place,this.label,this.tooltip,this.toggleAttachPanel); return; }
		var id=params.shift();
		this.createAttachPanel(place,id+"_attachPanel",params);
		document.getElementById(id+"_attachPanel").style.position="static";
		document.getElementById(id+"_attachPanel").style.display="block";
	},
//}}}
//{{{
	createAttachPanel:
	function(place,panel_id,params) {
		if (!panel_id || !panel_id.length) var panel_id="_attachPanel";
		// remove existing panel (if any)
		var panel=document.getElementById(panel_id); if (panel) panel.parentNode.removeChild(panel);
		// set styles for this panel
		setStylesheet(this.css,"attachPanel");
		// create new panel
		var title=""; if (params && params[0]) title=params.shift();
		var types=this.MIMEPrompt+this.formatListOptions(store.getTiddlerText(this.typeList)); // get MIME types
		panel=createTiddlyElement(place,"span",panel_id,"attachPanel",null);
		var html=this.html.replace(/%id%/g,panel_id);
		html=html.replace(/%title%/g,title);
		html=html.replace(/%disabled%/g,title.length?"disabled":"");
		html=html.replace(/%IEdisabled%/g,config.browser.isIE?"disabled":"");
		html=html.replace(/%types%/g,types);
		panel.innerHTML=html;
		if (config.browser.isGecko) { // FF3 FIXUP
			document.getElementById("attachSource").style.display="none";
			document.getElementById("attachFixPanel").style.display="block";
		}
		return panel;
	},
//}}}
//{{{
	toggleAttachPanel:
	function (e) {
		if (!e) var e = window.event;
		var parent=resolveTarget(e).parentNode;
		var panel = document.getElementById("_attachPanel");
		if (panel==undefined || panel.parentNode!=parent)
			panel=config.macros.attach.createAttachPanel(parent,"_attachPanel");
		var isOpen = panel.style.display=="block";
		if(config.options.chkAnimate)
			anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));
		else
			panel.style.display = isOpen ? "none" : "block" ;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		return(false);
	},
//}}}
//{{{
	formatListOptions:
	function(text) {
		if (!text || !text.trim().length) return "";
		// get MIME list content from text
		var parts=text.split("\n----\n");
		var out="";
		for (var p=0; p<parts.length; p++) {
			var lines=parts[p].split("\n");
			var label=lines.shift(); // 1st line=display text
			var value=lines.shift(); // 2nd line=item value
			out +='<option value="%1">%0</option>'.format([label,value]);
		}
		return out;
	},
//}}}
// // interface definition
//{{{
	css:
	".attachPanel { display: none; position:absolute; z-index:10; width:35em; right:105%; top:0em;\
		background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\
		border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\
		padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em; text-align:left }\
	.attachPanel form { display:inline;border:0;padding:0;margin:0; }\
	.attachPanel select { width:99%;margin:0px;font-size:8pt;line-height:110%;}\
	.attachPanel input  { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
	.attachPanel textarea { width:98%;margin:0px;height:2em;font-size:8pt;line-height:110%}\
	.attachPanel table { width:100%;border:0;margin:0;padding:0;color:inherit; }\
	.attachPanel tbody, .attachPanel tr, .attachPanel td { border:0;margin:0;padding:0;color:#000; }\
	.attachPanel .box { border:1px solid black; padding:.3em; margin:.3em 0px; background:#f8f8f8; \
		-moz-border-radius:5px;-webkit-border-radius:5px; }\
	.attachPanel .chk { width:auto;border:0; }\
	.attachPanel .btn { width:auto; }\
	.attachPanel .btn2 { width:49%; }\
	",
//}}}
//{{{
	html:
	'<form>\
		attach from source file\
		<input type="file" id="attachSource" name="source" size="56"\
			onChange="config.macros.attach.onChangeSource(this)">\
		<div id="attachFixPanel" style="display:none"><!-- FF3 FIXUP -->\
			<input type="text" id="attachFixSource" style="width:90%"\
				title="Enter a path/file to attach"\
				onChange="config.macros.attach.onChangeSource(this);">\
			<input type="button" style="width:7%" value="..."\
				title="Enter a path/file to attach"\
				onClick="config.macros.attach.askForFilename(document.getElementById(\'attachFixSource\'));">\
		</div><!--end FF3 FIXUP-->\
		<div class="box">\
		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			embed data <input type=checkbox class=chk name="useData" %IEdisabled% \
				onclick="if (!this.form.MIMEType.value.length)\
					this.form.MIMEType.selectedIndex=this.checked?1:0; ">&nbsp;\
		</td><td style="border:0">\
			<select size=1 name="MIMEType" \
				onchange="this.title=this.value; if (this.value==\'editlist\')\
					{ this.selectedIndex=this.form.useData.checked?1:0; story.displayTiddler(null,config.macros.attach.typeList,2); return; }">\
				<option value=""></option>\
				%types%\
			</select>\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			local link <input type=checkbox class=chk name="useLocal"\
				onclick="this.form.local.value=this.form.local.defaultValue=this.checked?config.macros.attach.localPrompt:\'\';">&nbsp;\
		</td><td style="border:0">\
			<input type=text name="local" size=15 autocomplete=off value=""\
				onchange="this.form.useLocal.checked=this.value.length" \
				onkeyup="this.form.useLocal.checked=this.value.length" \
				onfocus="if (!this.value.length) this.value=config.macros.attach.localPrompt; this.select()">\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			remote link <input type=checkbox class=chk name="useURL"\
				onclick="this.form.URL.value=this.form.URL.defaultValue=this.checked?config.macros.attach.URLPrompt:\'\';\">&nbsp;\
		</td><td style="border:0">\
			<input type=text name="URL" size=15 autocomplete=off value=""\
				onfocus="if (!this.value.length) this.value=config.macros.attach.URLPrompt; this.select()"\
				onchange="this.form.useURL.checked=this.value.length;"\
				onkeyup="this.form.useURL.checked=this.value.length;">\
		</td></tr></table>\
		</div>\
		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;vertical-align:top;width:1%;white-space:nowrap">\
			notes&nbsp;\
		</td><td style="border:0" colspan=2>\
			<textarea name="notes" style="width:98%;height:3.5em;margin-bottom:2px"></textarea>\
		</td><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			attach as&nbsp;\
		</td><td style="border:0" colspan=2>\
			<input type=text name="tiddlertitle" size=15 autocomplete=off value="%title%"\
				onkeyup="if (!this.value.length) { this.value=config.macros.attach.titlePrompt; this.select(); }"\
				onfocus="if (!this.value.length) this.value=config.macros.attach.titlePrompt; this.select()" %disabled%>\
		</td></tr></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			add tags&nbsp;\
		</td><td style="border:0">\
			<input type=text name="tags" size=15 autocomplete=off value="" onfocus="this.select()">\
		</td><td style="width:40%;text-align:right;border:0">\
			<input type=button class=btn2 value="attach"\
				onclick="config.macros.attach.onClickAttach(this)"><!--\
			--><input type=button class=btn2 value="close"\
				onclick="var panel=document.getElementById(\'%id%\'); if (panel) panel.parentNode.removeChild(panel);">\
		</td></tr></table>\
	</form>',
//}}}
// // control processing
//{{{
	onChangeSource:
	function(here) {
		var form=here.form;
		var list=form.MIMEType;
		var theFilename  = here.value;
		var theExtension = theFilename.substr(theFilename.lastIndexOf('.')).toLowerCase();
		// if theFilename is in current document folder, remove path prefix and use relative reference
		var h=document.location.href; folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
		if (theFilename.substr(0,folder.length)==folder) theFilename='./'+theFilename.substr(folder.length);
		else theFilename='file:///'+theFilename; // otherwise, use absolute reference
		theFilename=theFilename.replace(/\\/g,"/"); // fixup: change \ to /
		form.useLocal.checked = true;
		form.local.value = theFilename;
		form.useData.checked = !form.useData.disabled;
		list.selectedIndex=1;
		for (var i=0; i<list.options.length; i++) // find matching MIME type
			if (list.options[i].value.indexOf(theExtension)!=-1) { list.selectedIndex = i; break; }
		if (!form.tiddlertitle.disabled)
			form.tiddlertitle.value=theFilename.substr(theFilename.lastIndexOf('/')+1); // get tiddlername from filename
	},
//}}}
//{{{
	onClickAttach:
	function (here) {
		clearMessage();
		// get input values
		var form=here.form;
		var src=form.source; if (config.browser.isGecko) src=document.getElementById("attachFixSource");
		src=src.value!=src.defaultValue?src.value:"";
		var when=(new Date()).formatString(config.macros.timeline.dateFormat);
		var title=form.tiddlertitle.value;
		var local = form.local.value!=form.local.defaultValue?form.local.value:"";
		var url = form.URL.value!=form.URL.defaultValue?form.URL.value:"";
		var notes = form.notes.value;
		var tags = "attachment excludeMissing "+form.tags.value;
		var useData=form.useData.checked;
		var useLocal=form.useLocal.checked;
		var useURL=form.useURL.checked;
		var mimetype = form.MIMEType.value.length?form.MIMEType.options[form.MIMEType.selectedIndex].text:"";
		// validate checkboxes and get filename
		if (useData) {
			if (src.length) { if (!theLocation) var theLocation=src; }
			else { alert(this.sourceErr); src.focus(); return false; }
		}
		if (useLocal) {
			if (local.length) { if (!theLocation) var theLocation = local; }
			else { alert(this.localErr); form.local.focus(); return false; }
		}
		if (useURL) {
			if (url.length) { if (!theLocation) var theLocation = url; }
			else { alert(this.URLErr); form.URL.focus(); return false; }
		}
		if (!(useData||useLocal||useURL))
			{ form.useData.focus(); alert(this.storageErr); return false; }
		if (!theLocation)
			{ src.focus(); alert(this.sourceErr); return false; }
		if (!title || !title.trim().length || title==this.titlePrompt)
			{ form.tiddlertitle.focus(); alert(this.tiddlerErr); return false; }
		// if not already selected, determine MIME type based on filename extension (if any)
		if (useData && !mimetype.length && theLocation.lastIndexOf('.')!=-1) {
			var theExt = theLocation.substr(theLocation.lastIndexOf('.')).toLowerCase();
			var theList=form.MIMEType;
			for (var i=0; i<theList.options.length; i++)
				if (theList.options[i].value.indexOf(theExt)!=-1)
					{ var mimetype=theList.options[i].text; theList.selectedIndex=i; break; }
		}
		// attach the file
		return this.createAttachmentTiddler(src, when, notes, tags, title,
			useData, useLocal, useURL, local, url, mimetype);
	},
	getMIMEType:
	function(src,def) {
		var ext = src.substr(src.lastIndexOf('.')).toLowerCase();
		var list=store.getTiddlerText(this.typeList);
		if (!list || !list.trim().length) return def;
		// get MIME list content from tiddler
		var parts=list.split("\n----\n");
		for (var p=0; p<parts.length; p++) {
			var lines=parts[p].split("\n");
			var mime=lines.shift(); // 1st line=MIME type
			var match=lines.shift(); // 2nd line=matching extensions
			if (match.indexOf(ext)!=-1) return mime;
		}
		return def;
	},
	createAttachmentTiddler:
	function (src, when, notes, tags, title, useData, useLocal, useURL, local, url, mimetype, noshow) {
		if (useData) { // encode the data
			if (!mimetype.length) {
				alert(this.MIMEErr);
				form.MIMEType.selectedIndex=1; form.MIMEType.focus();
				return false;
			}
			var d = this.readFile(src); if (!d) { return false; }
			displayMessage('encoding '+src);
			var encoded = this.encodeBase64(d);
			displayMessage('file size='+d.length+' bytes, encoded size='+encoded.length+' bytes');
		}
		var usage=(mimetype.substr(0,5)=="image"?'[img[%0]]':'[[%0|%0]]').format([title]);
		var theText=this.tiddlerFormat.format([
			usage, notes.length?notes:'//none//', mimetype,
			useLocal?local.replace(/\\/g,'/'):'', useURL?url:'',
			useData?('data:'+mimetype+';base64,'+encoded):'' ]);
		store.saveTiddler(title,title,theText,config.options.txtUserName,new Date(),tags);
		var panel=document.getElementById("attachPanel"); if (panel) panel.style.display="none";
		if (!noshow) { story.displayTiddler(null,title); story.refreshTiddler(title,null,true); }
		displayMessage('attached "'+title+'"');
		return true;
	},
//}}}
// // base64 conversion
//{{{
	encodeBase64:
	function (d) {
		if (!d) return null;
		// encode as base64
		var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		var out="";
		var chr1,chr2,chr3="";
		var enc1,enc2,enc3,enc4="";
		for (var count=0,i=0; i<d.length; ) {
			chr1=d.charCodeAt(i++);
			chr2=d.charCodeAt(i++);
			chr3=d.charCodeAt(i++);
			enc1=chr1 >> 2;
			enc2=((chr1 & 3) << 4) | (chr2 >> 4);
			enc3=((chr2 & 15) << 2) | (chr3 >> 6);
			enc4=chr3 & 63;
			if (isNaN(chr2)) enc3=enc4=64;
			else if (isNaN(chr3)) enc4=64;
			out+=keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);
			chr1=chr2=chr3=enc1=enc2=enc3=enc4="";
		}
		return out;
	},
	decodeBase64: function(input) {
		var out="";
		var chr1,chr2,chr3;
		var enc1,enc2,enc3,enc4;
		var i = 0;
		// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
		input=input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
		do {
			enc1=keyStr.indexOf(input.charAt(i++));
			enc2=keyStr.indexOf(input.charAt(i++));
			enc3=keyStr.indexOf(input.charAt(i++));
			enc4=keyStr.indexOf(input.charAt(i++));
			chr1=(enc1 << 2) | (enc2 >> 4);
			chr2=((enc2 & 15) << 4) | (enc3 >> 2);
			chr3=((enc3 & 3) << 6) | enc4;
			out=out+String.fromCharCode(chr1);
			if (enc3!=64) out=out+String.fromCharCode(chr2);
			if (enc4!=64) out=out+String.fromCharCode(chr3);
		} while (i<input.length);
		return out;
	},
//}}}
// // I/O functions
//{{{
	readFile: // read local BINARY file data
	function(filePath) {
		if(!window.Components) { return null; }
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { alert("access denied: "+filePath); return null; }
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(filePath); } catch(e) { alert("cannot read file - invalid path: "+filePath); return null; }
		if (!file.exists()) { alert("cannot read file - not found: "+filePath); return null; }
		var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
		inputStream.init(file, 0x01, 00004, null);
		var bInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
		bInputStream.setInputStream(inputStream);
		return(bInputStream.readBytes(inputStream.available()));
	},
//}}}
//{{{
	writeFile:
	function(filepath,data) {
		// TBD: decode base64 and write BINARY data to specified local path/filename
		return(false);
	},
//}}}
//{{{
	askForFilename: // for FF3 fixup
	function(target) {
		var msg=config.messages.selectFile;
		if (target && target.title) msg=target.title; // use target field tooltip (if any) as dialog prompt text
		// get local path for current document
		var path=getLocalPath(document.location.href);
		var p=path.lastIndexOf("/"); if (p==-1) p=path.lastIndexOf("\\"); // Unix or Windows
		if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
		var file=""
		var result=window.mozAskForFilename(msg,path,file,true); // FF3 FIXUP ONLY
		if (target && result.length) // set target field and trigger handling
			{ target.value=result; target.onchange(); }
		return result; 
	}
};
//}}}
//{{{
if (window.mozAskForFilename===undefined) { // also defined by CoreTweaks (for ticket #604)
	window.mozAskForFilename=function(msg,path,file,mustExist) {
		if(!window.Components) return false;
		try {
			netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
			var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
			var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
			picker.init(window, msg, mustExist?nsIFilePicker.modeOpen:nsIFilePicker.modeSave);
			var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
			thispath.initWithPath(path);
			picker.displayDirectory=thispath;
			picker.defaultExtension='';
			picker.defaultString=file;
			picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
			if (picker.show()!=nsIFilePicker.returnCancel)
				var result=picker.file.persistentDescriptor;
		}
		catch(ex) { displayMessage(ex.toString()); }
		return result;
	}
}
//}}}
/***
|Name|AttachFilePluginFormatters|
|Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
|Version|4.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Description|run-time library for displaying attachment tiddlers|
Runtime processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]].   Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server.  Note: after creating new attachment tiddlers, you can remove [[AttachFilePlugin]], as long as you retain //this// tiddler (so that images can be rendered later on).
!!!!!Formatters
<<<
This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
* embedded images: {{{[img[tooltip|image]]}}}
* linked embedded images: {{{[img[tooltip|image][link]]}}}
* external/"pretty" links: {{{[[label|link]]}}}
''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
<<<
!!!!!Revisions
<<<
2009.10.10 [4.0.1] in fileExists(), check for IE to avoid hanging Chrome during startup
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly.  This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePluginFormatters= {major: 4, minor: 0, revision: 1, date: new Date(2009,10,10)};
//}}}

//{{{
if (config.macros.attach==undefined) config.macros.attach= { };
//}}}
//{{{
if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
	var tiddler = store.getTiddler(title);
	if (tiddler==undefined || tiddler.tags==undefined) return false;
	return (tiddler.tags.indexOf("attachment")!=-1);
}
//}}}

//{{{
// test for local file existence - returns true/false without visible error display
if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(f) {
	if(window.Components) { // MOZ
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { return false; } // security access denied
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(f); }
		catch(e) { return false; } // invalid directory
		return file.exists();
	}
	else if (config.browser.isIE) { // IE
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		return fso.FileExists(f);
	}
	else return true; // other browsers: assume file exists
}
//}}}

//{{{
if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {

	// extract embedded data, local and remote links (if any)
	var text=store.getTiddlerText(title,'');
	var embedded=store.getTiddlerText(title+'##data','').trim();
	var locallink=store.getTiddlerText(title+'##file','').trim();
	var remotelink=store.getTiddlerText(title+'##url','').trim();

	// backward-compatibility for older attachments (pre 4.0.0)
	var startmarker="---BEGIN_DATA---\n";
	var endmarker="\n---END_DATA---";
	var pos=0; var endpos=0;
	if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
		embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
	if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
		locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
	if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
		remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));

	// if there is a data: URI defined (not supported by IE)
	if (embedded.length && !config.browser.isIE) return embedded;

	// document is being served remotely... use remote URL (if any)  (avoids security alert)
	if (remotelink.length && document.location.protocol!="file:")
		return remotelink;  

	// local link only... return link without checking file existence (avoids security alert)
	if (locallink.length && !remotelink.length) 
		return locallink; 

	// local link, check for file exist... use local link if found
	if (locallink.length) { 
		locallink=locallink.replace(/^\.[\/\\]/,''); // strip leading './' or '.\' (if any)
		if (this.fileExists(getLocalPath(locallink))) return locallink;
		// maybe local link is relative... add path from current document and try again
		var pathPrefix=document.location.href;  // get current document path and trim off filename
		var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\"); 
		if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
		if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
	}

	// no embedded data, no local (or not found), fallback to remote URL (if any)
	if (remotelink.length) return remotelink;

	// attachment URL doesn't resolve, just return input as is
	return title;
}
//}}}
//{{{
if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
	if (this.initialized) return;

	// find the formatter for "image" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
			{
			var e = w.output;
			if(lookaheadMatch[5])
				{
				var link = lookaheadMatch[5];
				// ELS -------------
				var external=config.formatterHelpers.isExternalLink(link);
				if (external)
					{
					if (config.macros.attach.isAttachment(link))
						{
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title = config.macros.attach.linkTooltip + link;
						}
					else
						e = createExternalLink(w.output,link);
					}
				else 
					e = createTiddlyLink(w.output,link,false,null,w.isStatic);
				// ELS -------------
				addClass(e,"imageLink");
				}
			var img = createTiddlyElement(e,"img");
			if(lookaheadMatch[1])
				img.align = "left";
			else if(lookaheadMatch[2])
				img.align = "right";
			if(lookaheadMatch[3])
				img.title = lookaheadMatch[3];
			img.src = lookaheadMatch[4];
			// ELS -------------
			if (config.macros.attach.isAttachment(lookaheadMatch[4]))
				img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
			// ELS -------------
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
//}}}
//{{{
	// find the formatter for "prettyLink" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
	if (i<config.formatters.length)	{
		config.formatters[i].handler=function(w) {
			this.lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
				var e;
				var text = lookaheadMatch[1];
				if(lookaheadMatch[3]) {
					// Pretty bracketted link
					var link = lookaheadMatch[3];
					if (config.macros.attach.isAttachment(link)) {
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title=config.macros.attach.linkTooltip+link;
					}
					else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
						? createExternalLink(w.output,link)
						: createTiddlyLink(w.output,link,false,null,w.isStatic);
				} else {
					e = createTiddlyLink(w.output,text,false,null,w.isStatic);
				}
				createTiddlyText(e,text);
				w.nextMatch = this.lookaheadRegExp.lastIndex;
			}
		}
	} // if "prettyLink" formatter found
	this.initialized=true;
}
//}}}
//{{{
config.macros.attach.init_formatters(); // load time init
//}}}
//{{{
if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
	TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
	TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
		return config.macros.attach.isAttachment(title)?
			config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
	}
}
//}}}
/***
|''Name:''|BackupOptionsPlugin|
|''Version:''|1.0.1 (2007-09-29)|
|''Source:''|None|
|''Author:''|Tyler Akins|
|''Licence:''|Public domain|
|''TiddlyWiki:''|2.0+|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|

!Description
Tired of having thousands of backups made due to saving every minor edit?  Do you only want one backup per hour, day, or just one backup ever?  Not a problem.

This plugin lets you define a file format that you want to use when saving backups.  Because backups will overwrite each other if they have the same name, you can now control how often new backup files are created.  If you want one created every day, just include the year, month, and day in your format and avoid using the hours, minutes, seconds, and milliseconds.  If you want only one backup, set a static name and it will just keep overwriting the old file.

!Configuration
Select what attributes you want to include in the backup filename in the order you like.  Dates are all in UTC format.  If the format field is left blank, it defaults to what the backups would normally be named:  {{{%N.%Y%M%D.%h%m%s%n.html}}}

{{wideInput{<<option txtBackupOptionsFormat 40>>}}}

|!Code|!Description|!Example|
| ''%D'' |Day of month, two digits| 18 |
| ''%h'' |Hour, two digits, 24 hour format| 21 |
| ''%M'' |Month number, two digits| 11 |
| ''%m'' |Minute, two digits| 59 |
| ''%N'' |Base name of the wiki| TiddlyWiki |
| ''%n'' |Millisecond, four digits| 8441 |
| ''%s'' |Seconds, two digits| 06 |
| ''%Y'' |Year, four digits| 2006 |
| ''%y'' |Year, two digits| 06 |
| ''%%'' |A percent symbol| % |

!Examples
Based on a base filename of "TiddlyWiki.html", and a date of 2006-11-18 21:59:06.8441, here are a few format options:

|!''Format''|!Description|
|!//Sample//|~|
| ''%N.bak'' |Saves only one backup, ever.  Always overwrites the .bak file with a new backup, keeping just one file around.|
| //TiddlyWiki.bak// |~|
| ''%N.%Y%M%D.%h%m%s%n.html'' |This is the default format that TiddlyWiki uses when making a new backup.|
| //TiddlyWiki.20061118.2159068441.html// |~|
| ''%N-%Y-%M-%D.html'' |Keep around only one backup per day.  When a new backup is made, it will overwrite any other backups made on that day.|
| //TiddlyWiki-2006-11-18.html// |~|
| ''Backups\%Y%M\%N-%D-%h%m.bak'' |Save all backups in a set of directories, with one directory that contains all, then another subdirectory that holds a year and month, and then the backup file.|
| //Backups\200611\TiddlyWiki-18-2159.bak// |~|

!Revision history
* v1.0.0 (2007-09-29)
** Initial release

!Code
***/
//{{{
//============================================================================
//                           BackupOptionsPlugin

// Ensure that the BackupOptionsPlugin is only installed once.
//

if (!version.extensions.BackupOptionsPlugin) {

setStylesheet(".wideInput input { width:30em; }","BackupOptionsStylesheet");

version.extensions.BackupOptionsPlugin = {
    major: 1, minor: 0, revision: 0,
    date: new Date(2007, 9, 11), 
    type: 'plugin',
    source: "http://rumkin.com/tools/tiddlywiki/#BackupOptionsPlugin"
};


if (!config.options.txtBackupOptionsFormat)
	config.options.txtBackupOptionsFormat = "%N.%Y%M%D.%h%m%s%n.html"; // Same as default format
if (config.optionsDesc)
	config.optionsDesc.txtBackupOptionsFormat = "Filename format for backups."

if (version.major < 2) alertAndThrow("BackupOptionsPlugin requires TiddlyWiki 2.0 or newer.");

//============================================================================
// Overwrite the built-in functions

getBackupPath = function(localPath) {
	var formatString = config.options['txtBackupOptionsFormat'];
	if (formatString == undefined || ! formatString || formatString == '')
		formatString = '%N.%Y%M%D.%h%m%s%n.html';
	var backSlash = true;
	var dirPathPos = localPath.lastIndexOf("\\");
	if (dirPathPos == -1)
	{
		dirPathPos = localPath.lastIndexOf("/");
		backSlash = false;
	}
	var backupFolder = config.options.txtBackupFolder;
	if (! backupFolder || backupFolder == '')
		backupFolder = '.';
	backupFolder += (backSlash ? "\\" : '/');
	var backupPath = localPath.substr(0, dirPathPos) + (backSlash ? "\\" : '/') + backupFolder;
	var backupBase = localPath.substr(dirPathPos)
	backupBase = backupBase.substr(0, backupBase.lastIndexOf('.'));
	var d = new Date()
	while (formatString.length > 0)
	{
		var formatHandled = 0;
		if (formatString.length > 1 && formatString.charAt(0) == '%')
		{
			formatHandled = 1;
			switch (formatString.charAt(1))
			{
				case 'D':
					backupPath += String.zeroPad(d.getUTCDate(), 2);
					break;
				case 'h':
					backupPath += String.zeroPad(d.getUTCHours(), 2);
					break;
				case 'M':
					backupPath += String.zeroPad(d.getUTCMonth(), 2);
					break;
				case 'm':
					backupPath += String.zeroPad(d.getUTCMinutes(), 2);
					break;
				case 'N':
					backupPath += backupBase;
					break;
				case 'n':
					backupPath += String.zeroPad(d.getUTCMilliseconds(), 4);
					break;
				case 's':
					backupPath += String.zeroPad(d.getUTCSeconds(), 4);
					break;
				case 'Y':
					backupPath += String.zeroPad(d.getUTCFullYear(), 4);
					break;
				case 'y':
					backupPath += String.zeroPad(d.getUTCFullYear() % 100, 4);
					break;
				case '%':
					backupPath += '%';
					break;
				default:
					formatHandled = 0;
			}
			if (formatHandled)
				formatString = formatString.substr(2);
		}
		if (! formatHandled)
		{
			backupPath += formatString.charAt(0);
			formatString = formatString.substr(1);
		}
	}

	return backupPath;
}


} // of "install only once"
//}}}
/***

!Licence and Copyright
You are free to use this however you like.  I place this code into the public domain.
***/
!usage
{{{[img[Bracket2SubFld01.jpg]]}}}
[img[Bracket2SubFld01.jpg]]
!notes
//none//
!type
image/jpeg
!file
./img/Bracket2SubFld01.jpg
!url

!data
data:image/jpeg;base64,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
!usage
{{{[img[Bracket2SubFld02.jpg]]}}}
[img[Bracket2SubFld02.jpg]]
!notes
//none//
!type
image/jpeg
!file
./img/Bracket2SubFld02.jpg
!url

!data
data:image/jpeg;base64,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
!usage
{{{[img[Bracket2SubFld03.jpg]]}}}
[img[Bracket2SubFld03.jpg]]
!notes
//none//
!type
image/jpeg
!file
./img/Bracket2SubFld03.jpg
!url

!data
data:image/jpeg;base64,/9j/4AAQSkZJRgABAAEAYABgAAD//gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/2wCEAAgFBgcGBQgHBgcJCAgJDBQNDAsLDBgREg4UHRkeHhwZHBsgJC4nICIrIhscKDYoKy8xMzQzHyY4PDgyPC4yMzEBCAkJDAoMFw0NFzEhHCExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMf/EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foRAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/AABEIAJwC0QMBIgACEQEDEQH/2gAMAwEAAhEDEQA/APf6K53xV478NeEriG31/VEtJ50MiRiN5G2g4yQikgE5AzjODjODjnfEfxn8JaTo0N9p93/a81zvENtb/K4K55kDYMak4GSMnOQGANbww9WdnGLd/IV0j0SivMfDvx08JX+mLPrU0mj3YYq1s0Uk4x2YOicgj1AOcjHQn03I9aVahVoS5akbME09hlzPDa28txdSxwQQoXkkkYKqKBkkk8AAc5rzfQPjVoWu+NYNBs7adLW53RxX87rGHlBO1dh52sANpJ3FmC7R1rl/j/8AEqEwS+E/D91J5u/bqNxC4CgAEGDPUnP3sEYxtOcsB4XBNLbTxz20skM0TB45I2KsjA5BBHIIPcV7eAyj6xRdSppf4f8AMzlUs7I+6KK+f/hv8ZIdP8Oiw8U3073VvK2y4kWSZ5Y2O75m+Ykglh2G3aB0NeheH/i94Q1OzvZptTSw+xMQVu8RtMoBO+NckuDg4UDd6qMjPlVsFXozlFxenW2nl95akmdlqurabo1utxq+oWmnwM4RZLqZYlLYJ2gsQM4BOPY1wg+OXgf7RBH9suwkrSB5fsj7YQpO0sMZIfGV2gkZ+YLXz1448Y6r4y1dr3VJ3MUbOLW3JBW2jZidgwACcYBYjJ2jPQY5+vfw2QJwvWlq+i6GTq9j6osfjf4FuLSOa41K4sZHzmCazlZ05I5MasvPXgnrXTaT418M6ta2txY65Ysl5K0MCySiJ5JAQCgRsNu+ZeMZ+ZT0Iz8Y0YHOQOeK0nw/T+xNoFVZ92VHczw2tvLcXUscEEKF5JJGCqigZJJPAAHOa86+GXxOtvEmiW6X8gTVIEEdwrMm6UqFzKFGMKxI7AA5HYE+VfFX4raxrer6npWjaiYNAP8Ao4SFUBuFH3mMgySrHONpAKYBHJz4FDLq1as6NrNb3NHNJXPoO08X+HrrQLfXV1e1g0u6YpFc3TfZ1dgWBH7zac5RuPYmr+latpus27XGkahaahArlGktZllUNgHaSpIzgg49xXxEZZDCkJkcxIzOsZY7VZgAxA6AkKoJ77R6CvQvgT4ztfCPia5j1S5Nvp+owiN22jasqtlGZuqqAXGenzZPAyPSxORyo0pVIyvbpbp/wxKqXdj6norH0nxHp2rRrLYXUVxE+dskThlODg4I46gitcHivndjUWiiigAoqhomt6Zr1m13ot9BfW6StC0kL7gHU4I/qPUEEZBBp+q6tpujW63Gr6haafAzhFkupliUtgnaCxAzgE49jTacXZgXKK47R/in4K1nU7fTtP1tHurlgkSPBLEGY9BudQMnoBnk4HUiuxq50509Jpr1EmFFFFZjCiiigAooooAKKKKACiiuC+OXiS30H4f6hbmeBb3VImtLeCTJMithZSAOflRmOTwDtz1AN06cqk1CO7E3Y7XUL60020e71G6gs7aPG+aeQRouSAMseBkkD6mrFfCQUAAAAAdK1fCniHUvCetxatokwguY+GBGUlQnlHHdTge/QgggEfRT4fnGN4zu+1jJVUfbFFfG3/Cf+MPt/wBt/wCEn1bzvN83H2p/L3Zz/q87Nuf4du3HGMcV9L/Dz4j6V43sJpbWKazurXYLi3mAO0sMgqw4ZchgDwfl5AyK8zF5bXwkVKeq8unroXGalsdlRTUYMMqeKdXmlhRRRQAUUVzPxH8SJ4b8G61fW85W9tbUGMRhXeJ5WMcTlTxt3889QrdcYqoxcmox3DY6aivknSvi14z0/XG1WTV5L93Uo9vdc27DAA/drtCkYByuDnOc5OYNU+J/jLUdYXUm167tnjfdHBbSGKBQGLBTGPlcDOPn3EgAEmvc/sHE3tdff+Gxl7VH17RXzBoXx18Y6fPnUpbXVoWdSyTwLGyqCdwRowoBIPVg2MDjrn3/AMH+NND8YWTXOiXfmGPaJoXXZJCSMgMp/EZGQSDgnBrgxWXV8JrUWndbFxmpbHQV534r+M/hbw1rU+lTLfX09t8szWcaMiPzlCWdcsO+MgE4zkEDiPjT8WNVtNduvDvhe8S2t7dRHc3UQBlMhDb0V8naBuUZAV1dTyMV4cBgYHAr08vyZ1oqrW0i9l19SJVLaI908T/tBBrvTX8LafOsEUrNfRX8aKZ0wAERldtvVjnHBC9RuBt6P+0TaXGpQQ6t4fews3bbJcRXfnmIf3tnlqSAcZwc4zgE8HwCivY/sTC8vLZ+t/62M/aSPpmX4+eEo9Za0WO/lsv3YW+jh+TJzvJRsOFXjkAkndheAW9Tr4Tr3r4IfE6W5gtvDOrBBJaQhLSYYUPGoACEf3gOhHUA55GT4+Y5OsPSVSjqlv8A5/5mkKl3ZnuVFcr488d6X4L0H+0L1vOuJcra2iNh7hx/JRkbm7ZHUkA/PXgX4raz4SuNamMMeovqzNcMJnKLHckk+btX5cHPzKApOFww215mGy+tiYSnTW34/wDDFuSi9T6vor5n8N/HTxLa+Ixda/Kt9pUrMJLOKGNDCpOcxsACSvYMxyMgnJ3D6N0zU7TVLG3vbGXzbe5iWWJsFdysAQcHkcHoajFYKthGvaLcIyT2LdFFeZ/H/wAY3fhfwtb2ukXf2XUNTlaMOqtvWFV/eMjDhWy0Yz1wxI5GRhRpSrTVOO7G3ZXOPh+L9vYfGLVbu4nefw9cKlgrxqjeWIydsoK5LpvaUjByVkzgkBa9u0nWNN1iFptJv7W+hRyjSW0yyKrAAkEqTzgjj3r4hrpfAnjnV/A93cz6OLaRbpVWWK4jLK20naeCCCMt3x8x46Y+qxmSRlBOh8SSXr5+RjGprqfY9Fc54D8YWXjHw9b6paL5LPlZYC4ZoXHVSR+BGcEgg4GcV0Yr5KUXCTjLdG4UUUVIBVe8v7Ow8j7ddwW32iVYIfOkCeZI33UXPVjg4A5NSXM8Nrby3F1LHBBCheSSRgqooGSSTwABzmvlj4zfEL/hNdbWDTJZ10Sy4hjf5RPJzmYrgEZBwA2SAM/KWYV24LBzxlTkjour7Eylyo+q6K+SfC/xY8YeHZ5pE1N9UWZdpi1R5LhVIOQy/MCp6jg4OeQcDF+T44eOG02G0W+tY5o23NeLap5so5+VgQUxyOig/KOeue95FilLlVrd7/09CfaRPqeoLO+tL3zvsV1BcfZ5Whl8qQP5ci/eRsdGGRkHmvkLVPiP4z1OcTXPiXUUcJsAtpjbrjJP3Y9ozz1xnpzwK5fAGAAOOntXTT4fqNe/NL01/wAiXVXQ+7KK+M9T8ceKtVt1t7/xDqMsIt/szRi4ZFkjwRhwuA5IJBZsk9yav6R8UfGmjaZBp2na5JFaWyeXCjwRSFFHQBmUnA6AZ4AAHArL+wMRy35lf5/5D9qj69orwjwB8ekitFs/GyTzT+aAl9bRJjYTyZEGMbfVASR2yMt634j8W6N4d8OHXb+8Q2RUGEwkObgsMqsfOGLDkc4xkkgAkeViMHWw0+ScfTs/QtSTWhuUV8i+IPih4r1nW4tQGqz2yWd09xZW8ewLb5zhSVUeZhTty4OQWH8RB+kfht4vXxh4Ts9UlEEN226O4hhk3CORSR9VyMMAeQGHJ6nbFZdWwlONSfX8BRmm7I6miiivOLCq95f2dh5H267gtvtEqwQ+dIE8yRvuouerHBwByaoeKfE+j+E9Pjv9fuzaW0kohVxE8mXIJAwgJ6KeenFfJXjjxjqvjLV2vdUncxRs4tbckFbaNmJ2DAAJxgFiMnaM9Bj0sBl9TGyaTsl1IlJRPsysjT/Ffh3UbuO007X9Lu7mXOyGC8jd2wCThQcngE/QGvjiz1nVLLT59PstTvbayuN3nW0Nw6RS7htbcoOGyODnqKZpOp3ujalBqOl3MlreWzb4pYzyp/kQRwQeCCQcg16q4fnaV569NPzI9qfcNFfI2nfFTxjYaHfaWmsTzLeY/wBJuHaS4g7Hy5Ccrkcd8dV2nmsC78Ta/e+T9t13VLn7PKs8PnXkknlSL911yxwwycEc1hHIMQ5WclYftUfbFFfKvgj4w+JvDV0ft91Prli+4vb3k5L7iBgrKQzLjA45Xk8ZOR6TqX7QWjQaLY3Gn6ZPd6jOD9os2kMS22OuZNpDZPTA6cnaeDyVsoxVKSio81+xSnFnsNFeGQ/H691RZrbT/D1vZXSwSzLLPdNOg8uNpCCgVCchCPvDGc84wfY/D2qDWdB07UxF5H261iuPK3btm9Q23OBnGcZwK5K+DrYdJ1Y2uCnFuyNCiiiuUs+Ntd8d654i1QapqrWU8+xkRXsYXWJCd2wBlPA7ZyRk88nNB9fvHaNmh00GNtw26bbKCcEcgJyOTwcjOD1ArJi/1Sf7orR0BrRNas31CXyrZJQzsYw445AIKsNpOAflfAJO1/un9Jo04QoxtHZfocEqcG7tI0P7TurjRri7dbFWguYECJo8ADbg7ZMgTAwYwNp+8C3UA1p3vi/XdO0/SJbC++zTXGmPE88USLKsZuJhsRwNyIAq4VSAuBgDFbXxK1K+vtI1a01TW31e70nVoLWWdbSG3jf5bnauAgclNrcltuZHABADtxWuf8gvQP8Arwf/ANKZ6xhCFdJzgt+1+nml+RnOnGLikuv6MQeI74DAt9LA/wCwVa//ABumw6/eQwpEkOmlY1Cgvpts7YHqxQkn3PNZdFdvsoLSyK9lD+VfcakWv3kSlVh00gszfNptsxySSeSnTngdAOBwKI9fvI2kZYdNzI247tNtiAcAcApwOBwMDOT1JrLop+zh2Qeyh/KjUGv3izNKIdN3MoUg6bbbcDOMLswDyeRyeM9BQdfvDMsvk6buVSoA022C4OM5XZgngcnkc46msuij2cOyD2UP5Uaj6/eO0bNDpoMbbht022UE4I5ATkcng5GcHqBRLr95KoVodNADK3y6bbKcggjkJ045HQjg8Gsuij2cOyD2UP5UbC+JtSj3GD7DbuVK+ZBp9vFIoIIO11QMpwTyCDSf8JHff88NL/8ABVa//G6yKKXsqd78q+4PZQ/lRqQ6/eQwpEkOmlY1Cgvpts7YHqxQkn3PNEWv3kSlVh00gszfNptsxySSeSnTngdAOBwKy6Kfs4dkHsofyo7bwb8Rr7QL3N1BHNaM+4pCixGPoDtVcIBgE7QBkknPJrrdZ/aC1gXu3w/ptklkqAA38bPKzdz8jgAdgOemc84HjlFedUynCVJ88o7+bN1NxVkdvdfF3xzdaebOTXHUEuWmiiSOVgwAxuUDAGCQVwQWPPC4wh4v8R+fFcPrmoTXEO/yZ5rhpZIdyFG2OxJTIY52kZwp6qCM7TRZG+hGpvcJZ7v3pt1VpMeihiBk9Mnp1welafiTTdOsb+wayW/t9PvbdJ1N0FafYXZS20BRztJAycjByM4GywuGpvlVNden9fcYyqJS5X1CLxhr1tA8On6gdMWRlaQ6dElmzkAgbmiCkgbjwTjmq0uvXcsLxNBpqq6lCU0y2RgD6MEBB9xyKXVLSy/s211DTo7iCKeaWAwzyrKwKCNt24KvB8wDGONvU5wNHWPDlrp9xqccM1xNHaWSXEMxTak5M0ce9SR8yEMSCOM8AsBubRRoKXNypN+S9DLmp6Jr8POxQPiO+IwbfS8f9gq1/wDjde9eAfi/ba1ZWdnqEhTVljCzBwB5zKBl1wAOeu0YxzxgZrxFdI04qlkVulv2sGvTMZl2LiEzBTHs7qAAQ5+8CQDlBW0W3sblDFE15HqKQzXK3CyKscRiRpAoXBLZCfe3Lgt0O35uPG4Kji4bWa2a/rb8S6dWFO7iv+G7n2Rp14l5AJEPWrdfLfwy8c65ZXEmmW1/fXt7qbrDEJgZRbAAnzFZmIHUg5QgABjuC7GxYPij43g006fH4juzAUZMuEeXDZyfNKmTPPB3ZHGMYFfOLJMS5yiraW/H/I61Xi3Y+ttRvbfTdPub+9k8u2tYmmlfaW2ooJY4GSeAeBzWT4f8aeHPEOn3d/pGrQTW1jzcu+YvJGM7mDgELgH5unB54NfIt94l1/UbV7XUNe1W8tpMb4bi9lkRsEEZVmIOCAfqKzo5ZI0kSOR0WVdkiqxAddwbB9RuVTg91B7V2U+H58j55e90tt530H7XsfVMPxr8BOm59YlhO5gFeynJIDEBvlQjBAyO+CMgHIF/Rvir4K1nUoNO0/XFa6uHCRJJbyxBmPRdzqBk9AM8kgDkivkSgjIweldMuH6WtpsXtWfaOt+L/D2g6nbadrOr2tjdXSNJGkz7RtH8TN0QHBALEZIIGSK57Xfi94R07wy2r2GpQ6nK3ywWUT7JpH5A3Iw3RrwSWYdOmSQD8ngBRhQAPQUVMOH6aS55vzD2rPdLD9opo9ET+0NAFxqwlIcQTeTbtHgkMCd7Bs4G3BHfd/CPIn8S6jJPNPMunzT3ErzSyy6bbO7u7FmJJTPUn6dBxWRRXrYfLsPh5OUI799behlP31aR0vhvVZrjUblZrbTXVra5nw2nW+A6W7lSPk4AKKcDgnORyc5w1+8WZpRDpu5lCkHTbbbgZxhdmAeTyOTxnoKf4U/5Ck3/AF4Xv/pNLU3hHQ7fxBNe2XnTLqAtZJbOGOIv57ojOU4BJYhcAcfeJ3ZUI+8vZwcnJaJLp6nOqcHNqy2X6lY6/eGZZfJ03cqlQBptsFwcZyuzBPA5PI5x1NW9O8Zaxpt2lzYmyt5F4Yw2EERdcglSUQHBwM4I6Vrr4P0c+KtH0r+13+z6vAPInVQ4WYyvDglcgjdGW+XcpOEDlf31ZWs2bJpPhW4vJLpbK4s3USiJWEYW6m3qn3QxAIbBbOX6gEYyk6FZcjjdPy9f8jVU4xd0kdRY/G/xbbarbXMjWr2cWBLZJEFSYZOfnOWVsHgg4BA4PIO7aftE6umnzJeaFYzXrbvKmileOJOPl3RncWweThhkccda861DTNPuPDMmt6VZahZQwXkdo32qdZ1mZ0d/lZY0AKiMZHOfMXpjm9r/AITstLutZiguLqeKx06O6t5zHsjuSbiKLehI+eNg7MCOM8BnC7345YHAtqLhZ7fj5Pz/AKsbc0u56Np/x81O20GC+1fQ7S7luLqaFRazNbqiosZyQwfJJk9R0rF8R/H/AMRX6mPQrG00eNlAMjf6RMrBskqWAXBGBgoe/PTHnd1/yKGm/wDX/d/+i7esirp5Tg/i5Ovd9/Uzp1JNavq/zPYl/aD1qLw9ZwR6bay6xGxW4upwTFIgA2sEUqQ5JOecDbwPmwnnur+MtV1bWLzVL1NPkuLyXzHL6fBJtwoVVUupIAVQBz2yckknT+H/AIeM/k+IZLi9hjsb6NYhZwxNJJKuHCJ5zorOcfKqCRsjlRld2Td2um6Tr2rWmuWs0klrdPAtvp0/lRqVZgxEkiu20YAAKkkHJYYw1UMNhaVSSpxu/wDg7duxU/fVpbFYa/eLM0oh03cyhSDptttwM4wuzAPJ5HJ4z0FB1+8Myy+Tpu5VKgDTbYLg4zldmCeByeRzjqa25fCdlDrWq6Xc3F1ZXUGnfbraCeP5lP2f7Q0TnHLqPk6IDy3BURvAfCrf8JTpWlQ2moXKahZ21zFHEqiScyQK7BWIChN+5d5yEAJIbaQepVaD6dL7dDL2MP5UZb6/eO0bNDpoMbbht022UE4I5ATkcng5GcHqBWp4f8f63oF811YCxVmjKNGtokMbcggssQTcRjgnONzY6mrd74Ohkv8Aw/HarNp8Ws3xsV8y5jvVGDEPNSWMKjr++27R0MbAtnIWp4i0C2s9IlvIdP1DS5beeGJ4by5SfzBKspyCsabShgZWU5O7IO0oQc5PD1o8kopp+ne359io04wd0rWMufxDf3EUiXAs5mlUh5ZLGBpXJ6sZCm8seu7O7POc0/8A4SO+/wCeGl/+Cq1/+N1kUV1qlBK3KiHSh2R0tjqs0fha6mFtprS21zbQRu+nW7MEZJiQSU5J2LycnjryazotfvIlKrDppBZm+bTbZjkkk8lOnPA6AcDgU+1/5FDUv+v+0/8ARdxWRUxhG8tOv6IiNODctFv+iNSPX7yNpGWHTcyNuO7TbYgHAHAKcDgcDAzk9SaQ69fCR5EWyikZQoeKxgRkwSQyFUGxsn7y4PA54GMytLw7aW17qSwXUF1cAqSsNvIkRYjklpHBWNFXcxYqQAvOASyk4U1F3irGipwvokSyeJtWneB7y4jvpLeMxRyXlvHcPsLbsFpFJODnGc4yQMAmmPr947Rs0OmgxtuG3TbZQTgjkBORyeDkZweoFa8+l6LpWsWP9qW17b2d/au3kXEp8yzkEskJEjKgJwYmPCZUsMrJsKPRm0jTbPU9Ma4vpm0jUIvPSZofKlCB3jIdQX2fPG3K78KQ21j8lZQdGKtGNl6et0rDdKLd2kVpdfvJVCtDpoAZW+XTbZTkEEchOnHI6EcHg12fw++K174euWi1YedpwQ+XDaW0UZjbdngLtXBy2ffHvXOeJvC/9iWE00bTXH2bWLvTJZ9m2P8AdCMocc7WbdIcEnheOhNH9l6TqGh6rd6RbanH/ZMUckl1cSo8c26VIwuxUHlM28uBvfARh833hlWp4fEUuWS91/hrYcIKDvFWPcz8evCo0K4u4kvDfRZWGxli2tMeMHeu5VXnkk54PB4B8e8dfEzU/FmtC+NnaWtvHEsUNrLEl2seMlmzIuAzE8lVXIVAc7QaguvCdk1pcXWk3F1exDRRqcIWPDArdLBJvGOgAkcgcL03OF3tyFc2Dy7C05upTu2u/Q0m+ZcstjUi1+8iUqsOmkFmb5tNtmOSSTyU6c8DoBwOBRHr95G0jLDpuZG3HdptsQDgDgFOBwOBgZyepNZdFet7OHZGHsofyo7/AOHHjvVNN8RQWgit3h1CaKAxxRrbrGxbG8KihScNzxk4XngV2GqftDTJDLDomhLvG3yri9myO27dEv4gYf0PtXk/g3/kb9E/6/4P/Ri1kV5lTK8NVrOco9vT+tC4zcXyLZJfqetzfH/xCfEYvYLG1j0raqf2c53HGQWfzQAd55A42gEfKSMmfxl8fdXvLmWDwlbx6dZFVCT3MQe53A5YgZKKD93BDcZOQThfIbcRNcRrcu8cJYCR40Dsq55IUkAnHbIz6iuk8ZaTolrpul6p4ah1eOwvmmjD6oyb5Gj2ZKqigbPnxu3HJDDA28zLLMFCcFyf5d9TXnkXvE3xZ8YeIre7tLrUUtbG7UJJa2kKou3AyoY5fBxyN3OSOhxWB/wkd9/zw0v/AMFVr/8AG6mvrDSZtBn1HSBex/Y7qG2kNzIjfaPMWVg4VVHl48k/Luf74+b5ctsy+DraKwiSS01BZptO+3JqBnTyCfspuQnk7NwBCvGG34LI5GdrIOiEcNQjyxgl/X+VvMzlBT+JXOdh1+8hhSJIdNKxqFBfTbZ2wPVihJPueaItfvIlKrDppBZm+bTbZjkkk8lOnPA6AcDgVZ0Sw0nUraS0xejURa3Fz5/mIsMflRvJs8vaS+Vjxu3Lgv8AdO35qOlab9s82e4l+y2Ntg3FwV3bc5wqrkbnbB2rkZwSSqqzL0/u9brbyI9lD+VEsev3kbSMsOm5kbcd2m2xAOAOAU4HA4GBnJ6k0DX7xZmlEOm7mUKQdNttuBnGF2YB5PI5PGegrU8OeHdP8Q22qPaz3VvcWbLOsBCyFbYyIjMWOxSVEm5mYxqAncMTHPL4W0pda1XT49TfMWnfb7FghKyL9n+0FSSoJO35RlUzkt8pURtm6tFNxa1W+np/mHsYfyoxDr94Zll8nTdyqVAGm2wXBxnK7ME8Dk8jnHU0Pr947Rs0OmgxtuG3TbZQTgjkBORyeDkZweoFaHiW0S112wbWDevay6ZZTKyoqvKn2WPCocABdw2bsNjaSQ5BBkm0DT7lNAvLc3Wj2Gr3j2he+kWURqjRhpw4WMFP3pGMcGNvm5wGp07Rbjv/AJXt+Yexh2Rly6/eSqFaHTQAyt8um2ynIII5CdOOR0I4PBrZ1/xLqr+GtF095oDZy200/kC1iWNGeZ0O1AoUECPIYDeDJJ82GwK2veHrfTbbWZFW9iksb62t447mMxtsljmc5DKrH/VrtYhcg5KrnApa5/yC9A/68H/9KZ6nkpVXGSjs/wBCZQUGkla/+T/yD/hI77/nhpf/AIKrX/43Wt4V+I2v+F1EenGzaBVwIXtlVSeBuOzaWbAAySc965KitamHpVI8kopouMYwd4qx1UnxJ8Yy2N1ZT69cz293KZZklVHDZIJXkcIcYMYwmCRjBIN7Q/i5400e8af+1mv0d3keC9HmxsWH4MoBwQFIAx0xkHE8P2Fjc2F3cXWm6nqBt/mkFpcR26xIBnOWRy7EB22gDasbNyA2y3NpmgaXea3o2sXF0l1YXjxR3kMW8yKjlMLHuAyeSQzDjBDApsl5XQwqvD2a+SXl8+35ovd3E1j4g+Jdb8n+2by21DyN3lfadPtn2bsbsZj4zgfkKzDr94Zll8nTdyqVAGm2wXBxnK7ME8Dk8jnHU1oWPhq3/tXXtH1G98nUNMiuTF5alo5XgV2cZxnkRkAELwS2cqEeDWNItNG1eyjvkvRY3FjbXgKgB5fMgVyEYjAXzCybsNtweGK4OtNUIe5CK2vsQ6cW7tIrPr947Rs0OmgxtuG3TbZQTgjkBORyeDkZweoFEuv3kqhWh00AMrfLptspyCCOQnTjkdCODwa1J9H0cW+i6rJHqGm6XqE80LLcSCViIgn7xZFjX5CZNpIRiuxjhz8lR+JvC/8AYlhNNG01x9m1i70yWfZtj/dCMocc7WbdIcEnheOhNUp0m0ravy7bi9jD+VGfNr95NC8Tw6aFdSpKabbIwB9GCAg+45p//CR33/PDS/8AwVWv/wAbpNY0j7BpGh36JN5epWskjO4+TzEnkQqpx2VUJHJ+b3Fdf4f1vXtQ8H3OhXmqJbaW2nXD2VutjA0Uvkq0kilghIk+UHkq3ziTdnaJJqShGPNGKavr+vR32BUae3KvuOOh1+8hhSJIdNKxqFBfTbZ2wPVihJPueaItfvIlKrDppBZm+bTbZjkkk8lOnPA6AcDgVt6X4TstTtdJl0+4urqW+gvla3jj/eC4t7fzVUDByCXRcDdkDOQW2JyFawdKbaS/Dza/Rg6UP5UdL4c1a5uL69ieKyVZ7K8ZjHZQowItX+6yqCo+UcLgHn1OfoL4T6pLceHdJt2PyxWcKD8EAr5v8Kf8hSb/AK8L3/0mlr6A+Dn/ACCNP/69o/8A0EV87n6UYxt/W5dCKjUlZdF+p6lmjNFFfKHafCkX+qT/AHRTqbF/qk/3RTq/T6P8KPojje5fvdZv737d9qn3/wBoXQu7n5FHmSjfhuBx/rX4GBz04FWNc/5Begf9eD/+lM9ZFa+uf8gvQP8Arwf/ANKZ6HFRcbLr+jMp/FH1/RmRRRRWpoFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFWb+/utQmEt7O80irtBb05J/Ekkk9SSSckk1WopWW4rK9yZrqZ7OO0Z8wRSPIi4HDMFDHPXkIv5VbvNcv7y3eCeSLEmPNdII0km5z88iqGfkAncTkgE8jNZ1FLlj2FyRfQt/2nefavtPnfvvs/2bdtH+r8rytuMf3OM9e/XmorS6ms5Wkt32O0bxk4B+V1KMOfVWI/GoaKfKtrByraxZsL+606Yy2U7wyFdpK+nBH4ggEHqCARggGq1FFFktR2SdwooopjCiiigAooooAKKKKANvwYivrFwGGQNNvz+ItJiKy7G8uLCZprSTy5GikhJwD8kiMjjn1ViPx4osby4sJmmtJPLkaKSEnAPySIyOOfVWI/HioKz5PebezS/UNNy/BrN/b3OmXEM+2XSsfZG2KfKxI0o4xz87Mec9cdOKfqev6rqlutvf3jywo25Y8BVXAIVQAAAigttQfKm5toG45zaKfs4XvbUC3Lqd7LpsWnSXLtaQtvSI9Aece5ALOQOgLuRgs2bd/4k1S/tHt7mWErLjzpI7WKOWfBz+8lVQ8mWAY7icsAxyQDWTRR7OG9gNu8RR4G0pwPmOpXoJ9hFa/4msSp3vLh7CGxaTNtBK80aYHyu4QMc9eRGn5e5qCiEXFWfd/mFkti3Fqd7FpsunR3LraTNveIdCeM+4BKoSOhKITkquC41O9uNXk1WS5cX8k5uWnj+RhKW3bhtxg554xiqlFPkj2A0oNe1GDWDqqTIbsq0eXhR02MhjKeWQU2bDtC4wBgAAAVJN4m1q4u7e6udRmnnt9215iJC24Ybfuzv3KAh3ZygVTlQAMmip9lC9+VdvkO5ffWtSfyS17MZILp7yOXd+8WZ9m6Tf8Ae3Hy0Oc9Rnuan1fxLq+sRvFqF35sTeTiNY0REESusaoqgBFAkf5VwPmJIzWTRT9nC97ILhRRRViNe1/5FDUv+v8AtP8A0XcVkVr2v/Ioal/1/wBp/wCi7isis4by9f0RnD4pev6IKkt55ba4jntpXhmiYPHJGxVkYHIII5BB71HRWhoX9b1m/wBdv2vdUn86ds8hFRRkljhVAAyzMxwOWZieSTVe5vLi5htYZ5N0dpEYYRgDYhdnI46/M7Hn1+lQUVKhGKSS2A2dX8Wa5rCTx6hqDyR3Db3jVVRMltzYVQAoZgGYDAZgrNlgCKMWp3sWmy6dHcutpM294h0J4z7gEqhI6EohOSq4qUUo04RVkkkO5s2vizXLOxt7K01B4Le2UpGsaqvBZnG4gZYq7MyFslGOV2nmsaiinGEY3cVa4goooqgNfwb/AMjfon/X/B/6MWsitfwb/wAjfon/AF/wf+jFrIrNfG/RfqZr+I/RfqFW73U72+t7aC7uXlitV2RK38IwB+Jwqrk87UReiqBUoq7K9zQnS8uI7CaxWTFtNKkzpgcugcKc9eBI/wCfsKttr+qtKkjXjkxwNbopA2qjQCBgFxgExKqk4ydoOcjNZtFJwi90BPY3lxYTNNaSeXI0UkJOAfkkRkcc+qsR+PFE15cTWlvaySfuLbd5cYAUAscsxx1Y4A3HJwqjOFAEFFPlV72Antry4tYbqGCTZHdxCGYYB3oHVwOenzIp49PrVu317UbfVI9SjmQ3UcAtlaSFHUxCLydpRgVI8v5eQc/Xms2ik4Rd7rcC/qutalq/lf2pezXZizhpW3MScZZj1ZsBRuOThVGcKACXWtSl+xbr2YGwx9mZW2tERjDAjncAqAN1ARBnCqBQopKEUrJbAaWp67falbrb3H2WKFW3mO1tIbZXYAgFhGqhiATgnONzYxk5l1z/AJBegf8AXg//AKUz1kVr65/yC9A/68H/APSmepcVBxUVbX9GZz+KPr+jMiiiitTQv6LrN/od29zpk/kySRNDIGRXSWNhhkdGBVlPoQRwD2qpcTy3NxJPcyvNNKxeSSRizOxOSSTyST3qOip5UnzW1A0ode1GLXZtaWZGv52leV5IUdXMoYSZQgqQQ7DGMc0zVda1LV/K/tS9muzFnDStuYk4yzHqzYCjccnCqM4UAUKKXs4Jp21QFu91O9vre2gu7l5YrVdkSt/CMAficKq5PO1EXoqgXtX8Wa5rCTx6hqDyR3Db3jVVRMltzYVQAoZgGYDAZgrNlgCMaij2cNNFoO5fudZv7nSrXS5p82dpnyowir/EzfMQMtgyPjcTt3tjGTk0vWb/AEqO6jsZ/Lju4milUorhlZWUkBgcNtd13DBAZgDyc0KKOSNrW0Ea2m+JdX0ywFjY3fk2wlaUoI0O/cFDqxIyyMETdGco20ZBxWbcTy3NxJPcyvNNKxeSSRizOxOSSTyST3qOimoRi7pAa/hT/kKTf9eF7/6TS19AfBz/AJBGn/8AXtH/AOgivn/wp/yFJv8Arwvf/SaWvoD4Of8AII0//r2j/wDQRXzPEG0f67jo/wASXov1PUqKKK+TOw+JbXW7qKK32xWB8mLy13afA2Rxy2U+Y/KPmOT155OZX1+8do2aHTQY23DbptsoJwRyAnI5PByM4PUCsmL/AFSf7op1fplGnD2cdOiPPdOF9kaN5rd1d27wSxWCo+MmLT4Im4OeGVAR+BqbXP8AkF6B/wBeD/8ApTPR4ttbOz1hY9NheC2e0tZljeTzGBe3jc5bAycsegA9ABxRrn/IL0D/AK8H/wDSmeppTjUhTnFWT1+9EygoSikuv6M0bXUJNI8FWE9pbae01xqN2kklzYQXDFUjtioBkRiAC7cD1NVP+Et1L/n20X/wSWX/AMaovf8AkQ9I/wCwnff+irSp7Hwbd3fhaXXEuYVjjwwhOd7LtnLEL9448jqoZeWJYeXJtlKlGPNUS3a282b69CpB4o1CBCiW+kEFmf59ItHOWYk8mMnGTwOgGAMAAUReKNQieV1t9IJlbe27SLRgDgDgGPCjAHAwM5PUknW8J6YLLSIfFAstQvJLa8fyzaTxw/Z2hWOTcd8cgkJDltoAwsTscqDtzbuw0nQte1bTtXF7f/Ybp7aMWsiW/mbWZS5ZlfH3R8u053H5htwwnScmlFP7te/9MNSNfFGoLcPMLfSN7qqEHSLQqACSML5eAfmOSBk8ZzgYG8UagbhJjb6QHRWQAaRaBcEgnK+Xgn5RgkZHOMZOZLuKz8N69q2m3lhDq5srp4I3leSJSUZkJZUYEqRk4BBDBfmwGVr0vg3f8Q77wtHc/YWjupILQ3nytL82IsngfMCrZ4yM7QzFUZt0Fq4q1r3stvz6hqZsvijUJHidrfSAYm3rt0i0UE4I5AjwwwTwcjOD1AIkl8Q6rcWjSmy0zyIpY90kejWqhXyWVSyxDrsPyn7wDAgjNTwaDbto+im9b+zp7y+uI5J5gR+6EVs8eAxCjPmkgkqp3gswX5hpeL49Yl0jU28TzPdX+majBZw3BBCyKFuY5HBwPMJNsimRgWPlgE8YqXKldWiv6dtPn5hqYVx4o1C4t5IZLfSAkilGMekWiMARjhljBB9wQRUn/CW6l/z7aL/4JLL/AONUX1hpM2gz6jpAvY/sd1DbSG5kRvtHmLKwcKqjy8eSfl3P98fN8uWwq1jTpSXwrTyQtTZt/FGoW9vHDHb6QUjUIpk0i0diAMcs0ZJPuSSa0tM165SzX/RNIYszuS+k2rHJYk8mPpzwOgGAMAAVReKzt/A9tcfYIZLy8vriE3TvJviSNLdgFAYJyZHzlT17Vb0PQNZvdLhuLLSL+4gfdtkitndWwxBwQMdQa+Z4kqqjg1On7vv2vtfSXY93I4Up4iSqpNcvX1Xcsxa1PE8rrZ6QTK29t2k2rAHAHAMeFGAOBgZyepJIutTrcPMLPSN7qqEHSbUqACSML5eAfmOSBk8ZzgYp3lrcWNw9ve28ttOmN0cqFGXIyMg8jgg1DXw31zEP/l4/vZ9msFhXqqcfuRpNrU5uEmNnpAdFZABpNqFwSCcr5eCflGCRkc4xk5JdankeJ2s9IBibeu3SbVQTgjkCPDDBPByM4PUAjNoo+uYj/n5L72H1LC/8+4/ci/e65cSWzA2ekLsw4KaTaocqQw5EY4yOR0IyDkEisq48UahcW8kMlvpASRSjGPSLRGAIxwyxgg+4IIp1z/x7y/7h/lTtVis5PCWkX1vYQ2ly11c20zxPIfOEcduVZgzMA2ZGztwOelfa8NVHVpy9r72ul9baX6+h8ln9GnSqQVOKjp0Vuof8JbqX/Ptov/gksv8A41Udv4o1C3t44Y7fSCkahFMmkWjsQBjlmjJJ9ySTWNXbaD4OtrzT9Fa4tNQkOtMqLewzokVoWnaAboyhaQKyqzEMo/eop2llLfUVVRpRvKK+5Hziuyp4f1G9vYbsLd+GLL7P++K3+mWwaRWf5yhMJzt3Z2A5xwinGKov4muobu5NpFpksUkpZWm0WzBIACg7djBOFBKqcZJPJJJ6j4Wana3NmfC90dQupr28ElpZRWNrLbrKU2mSR5UkZRgclUO1VY/NkgcTaQXGr380txJNMfmuLqUYkmKZzI4VmBkYAliM9AxJABIzgo+0mpRSS/rt5D6FpfFGoLcPMLfSN7qqEHSLQqACSML5eAfmOSBk8ZzgYG8UagbhJjb6QHRWQAaRaBcEgnK+Xgn5RgkZHOMZOdK48OabZeINRjlmmutLsrGO/DQybC6SpEyLvZMjmZVDeXycZVASyGo2EOp61o04F7JbahYrIsBkjMsUcPmQhDLtRAu23BMhUBFJJDbSWalR0fKrW3t5Xt9wambL4o1CR4na30gGJt67dItFBOCOQI8MME8HIzg9QCCfxRqEyBHt9IADK/yaRaIcqwI5EYOMjkdCMg5BIq/d6Po8T6fdTx6hpVpLeT2d1b3MgllieIRkksI1KgmUKR5bFdpOHPyVH4m8L/2JYTTRtNcfZtYu9Mln2bY/3QjKHHO1m3SHBJ4XjoTTi6DaXLq9tA1Klx4o1C4t5IZLfSAkilGMekWiMARjhljBB9wQRUn/AAlupf8APtov/gksv/jVHi+KztLixs7KwhttljazSSo8jPO8tvFIxbcxAwzNjaF696vfZtLttB/4mmnWVk0lrugf7TLJfzSFcq2wN5aIWKn94ikxN8hdvmJ+65Yvk38kGpm2/ijULe3jhjt9IKRqEUyaRaOxAGOWaMkn3JJNEHijUIEKJb6QQWZ/n0i0c5ZiTyYycZPA6AYAwABXS6b4Z05hZ6Zd26B9RayhivyX84z3MaSfu13BPLiV135DMSyjKeYpj57wxLpQ8yHULbTDIct5+pvdeWAMAIi2/wAwbliS2QQBjbj5kpUZJtQvbyX3/wBahqRxeKNQieV1t9IJlbe27SLRgDgDgGPCjAHAwM5PUkkXxRqC3DzC30je6qhB0i0KgAkjC+XgH5jkgZPGc4GOhtvDlhp13ezXNj59tDfXtu6agzYtIbcISW8l1DysZURRvVN/HO8FY7Lwtax6hNLFEl5FushDBeSMsUS3UDTl5njwxSJEbcV25xvOAChn2uH1fL+C9AszCbxRqBuEmNvpAdFZABpFoFwSCcr5eCflGCRkc4xk5JfFGoSPE7W+kAxNvXbpFooJwRyBHhhgng5GcHqARJ4htbCxvdO1DT4fMsb+I3SWs4ZQFWaSMocMW2nyicbiVDbdzEbzJ4h0yCXxTa2WmWyWaXsFk6RR+bIqPNBE7YHzuRuc8DcewzWq9i7e70fRdN0LUrz+KNQmQI9vpAAZX+TSLRDlWBHIjBxkcjoRkHIJFFx4o1C4t5IZLfSAkilGMekWiMARjhljBB9wQRVvxP4L1Dw5YR3l5JujeURAfYruHkgnrNCi/wAJ4Bz7dcc3VU40Zrmglb0DVHSa9dHUfCWk309vZRXLX13Cz2tnFb7kWO2KgiNVBwXbr6msJfE2o26iGOPTSkY2Lv0y2dsDjljGST7k5rWvf+RD0j/sJ33/AKKtK5GX/Wv/ALxr5/N5ypUIcjt70ttOrLjCM37yudDZeIb1LcAQ6acszEtplsxyWJPJTpzwOgHA4FSR6/eRtIyw6bmRtx3abbEA4A4BTgcDgYGcnqTWNa/6hfx/nUte5hIxlh6cmrtxX5GMqULv3V9xqDX7xZmlEOm7mUKQdNttuBnGF2YB5PI5PGegoOv3hmWXydN3KpUAabbBcHGcrswTwOTyOcdTWXRXT7OHZE+yh/KjUfX7x2jZodNBjbcNum2ygnBHICcjk8HIzg9QKJdfvJVCtDpoAZW+XTbZTkEEchOnHI6EcHg1l0Uezh2Qeyh/KjUm1+8mheJ4dNCupUlNNtkYA+jBAQfcc0//AISO+/54aX/4KrX/AON1kUUezh2Qeyh/KvuNe1/5FDUv+v8AtP8A0XcVDZ63dWdukEUVgyJnBl0+CVuTnlmQk9e5qa1/5FDUv+v+0/8ARdxWRUqKk5Jrr+iJUVJyTXX9Eakev3kbSMsOm5kbcd2m2xAOAOAU4HA4GBnJ6k0DX7xZmlEOm7mUKQdNttuBnGF2YB5PI5PGegrLoqvZw7Ir2UP5Uah1+8Myy+Tpu5VKgDTbYLg4zldmCeByeRzjqaH1+8do2aHTQY23DbptsoJwRyAnI5PByM4PUCjw3od1r189vaRzOsEZmm8iIyyBAQDtQcsxLAAcDJySqgsNfxPoJsbnw/jw/f2IvoMPaHeJpXE8ibQWU/vCgjzhcZYEKAQK4qmJw9OsqOnM/TTRv8k/1tdFKhG1+VfcZEuv3kqhWh00AMrfLptspyCCOQnTjkdCODwaJtfvJoXieHTQrqVJTTbZGAPowQEH3HNXfEaabHYoi2+m2upCQZi0yeWeNUwc+Y7u6lvuFfLYjG8Ng4Anlg0m+8OXlxZ2dnBNaxrIqQSztcoPNSPdOZMRMpDc+WAdzIcKu4CViafLGXs3Zu2y0vs99n0auvwD2EF0Rnf8JHff88NL/wDBVa//ABumQ6/eQwpEkOmlY1Cgvpts7YHqxQkn3PNZdFd/s4dkT7KH8q+41ItfvIlKrDppBZm+bTbZjkkk8lOnPA6AcDgUR6/eRtIyw6bmRtx3abbEA4A4BTgcDgYGcnqTWXRR7OHZB7KH8qN/w5ey3/jXQ5Z0t0YXsCgQW8cK48wfwoAM89etZNhey2ExlgS3diu0ie3jmXHH8LgjPHXrV7wb/wAjfon/AF/wf+jFrIqVFczVtLL9SVFc7VtLL9TUfX7x2jZodNBjbcNum2ygnBHICcjk8HIzg9QKJdfvJVCtDpoAZW+XTbZTkEEchOnHI6EcHg1l0VXs4dkV7KH8qNSbX7yaF4nh00K6lSU022RgD6MEBB9xzT/+Ejvv+eGl/wDgqtf/AI3WRRR7OHZB7KH8q+41IdfvIYUiSHTSsahQX022dsD1YoST7nmiLX7yJSqw6aQWZvm022Y5JJPJTpzwOgHA4FZdFHs4dkHsofyo1I9fvI2kZYdNzI247tNtiAcAcApwOBwMDOT1JoGv3izNKIdN3MoUg6bbbcDOMLswDyeRyeM9BV3wt/Yv2G+/tT+zftfmRfZ/7Q+1eXsxJ5mPs/O7Pl/e4xms/wAQ25ttWlj+zW1spVJI0tWdoijIrIy+YS+GUhsMcjdggdBywq05V5UeRprq0rPbbva+vZlexha9kPOv3hmWXydN3KpUAabbBcHGcrswTwOTyOcdTQ+v3jtGzQ6aDG24bdNtlBOCOQE5HJ4ORnB6gVSsbWS9ukt4WhV3zgzTJCnAzy7kKOnc1NqelXGmeX9oks38zO37NeQ3GMY6+WzY698Z59K2boqapu3M+ml/uF7KH8q+4kvNburu3eCWKwVHxkxafBE3BzwyoCPwNTa5/wAgvQP+vB//AEpnrIrX1z/kF6B/14P/AOlM9U4qLikuv6MhxUXFJW1/Rh/wkd9/zw0v/wAFVr/8bpkOv3kMKRJDppWNQoL6bbO2B6sUJJ9zzWXRVezh2RXsofyr7jUi1+8iUqsOmkFmb5tNtmOSSTyU6c8DoBwOBRHr95G0jLDpuZG3HdptsQDgDgFOBwOBgZyepNZdbfhm3jk+0TT6fZ3MUW0PNf3DxW8IOSchGVnc4yFUkkK+EY/dyrOnRg5uP5frYapQb2X3EA1+8WZpRDpu5lCkHTbbbgZxhdmAeTyOTxnoKDr94Zll8nTdyqVAGm2wXBxnK7ME8Dk8jnHU0XlpBqHiFbLw+nmC5kjihQEhWkbAIQvyE3k7d/zbcbuc1VntW07VZLTU4XDWs5iuIkkAbKthlDYYA8EZwR9aUZUpW095q9tL29PwD2UP5V9xafX7x2jZodNBjbcNum2ygnBHICcjk8HIzg9QKJdfvJVCtDpoAZW+XTbZTkEEchOnHI6EcHg0eLLSDT/FWr2Vonl29tezRRJknaquQBk8ngd6f4ttbOz1hY9NheC2e0tZljeTzGBe3jc5bAycsegA9ABxUU6lKbhaPxLmWi20/HX8x+xgui0GTa/eTQvE8OmhXUqSmm2yMAfRggIPuOaf/wAJHff88NL/APBVa/8AxutvxNb6NNbalJ4attEmtoG8xXt2vhcwweYFVm84hCcsikAE/NkDAyONpYWrTxMOZQcfJpJ7J7dBOjCOlkakOv3kMKRJDppWNQoL6bbO2B6sUJJ9zzRFr95EpVYdNILM3zabbMckknkp054HQDgcCix0C8vbVLiGbTVR84E2pW0L8HHKO4YdO496y62i6M21Gza3209QdKHWK+46Xw5q1zcX17E8Vkqz2V4zGOyhRgRav91lUFR8o4XAPPqc+5fBz/kEaf8A9e0f/oIr5/8ACn/IUm/68L3/ANJpa+gPg5/yCNP/AOvaP/0EV87n6UYxt/W5dCKjUlZdF+p6lRRRXyh2nwpF/qk/3RTqbF/qk/3RVmwi8++t4fImufMkVfJgOJJMnG1eD8x6Dg89jX6bSfLRi/Jfkcb3JtY1a71i6S4vzCZUjWIGKCOEbVGFGEUDgYA9gB0Aq1rn/IL0D/rwf/0pnq14jTTY7FEW30211ISDMWmTyzxqmDnzHd3Ut9wr5bEY3hsHAFXXP+QXoH/Xg/8A6Uz1jh5wlCHs48sU9Fouj2tpbtbQzqfFH1/Rk17/AMiHpH/YTvv/AEVaVjLPKtu9usriF2V2jDHazKCFJHQkBmwe24+tbN7/AMiHpH/YTvv/AEVaVhVvS+H5v82aMtjU71dNGnJculpudzEvAYv5e7OOSMwxnB4BUEc1HqF5cajf3F9eSeZc3UrTSvgDc7EknA4HJPSoKK0UUtUhE+oXlxqN/cX15J5lzdStNK+ANzsSScDgck9Ktvr+qyava6rJeO97ZsjwyuA2xlbcDgjBJbLEkfMzMxyWJObRRyR2sBf1DWtS1K0htdQvZrqKCWWaMTNvKvIQZDk8/MVBPPXJ6k5n1XxNrWrx3Uep6jNdR3d0LuVZCCDKFKhgP4flO3AwMBRj5RjJopezgraLQdydLy4jsJrFZMW00qTOmBy6Bwpz14Ej/n7CoKKKqyQi+msXiaK2kAwtZtKZgr28bOjnbkrIV3rny0ztIzitnRPiJ4q0LS4dN0rVPs9pBu8uP7PE23LFjyyk9Se9cvRXPXwmHxEeStTjJXvZpNX769fMak1szT1fxDqms6jLf6ldeddTY3v5arnAAHAAHQCqn224/wCen/joqvRWKy3BJWVGP/gK/wAjqWNxMVZVJW9WWPttx/z0/wDHRR9tuP8Anp/46Kr0U/7Owf8Az5j/AOAr/If17Ff8/Zfe/wDMna8nZSrPkEYPAqxfaxeX1hZ2M5hFtZbvJSK3jiwWChmYooLMQi5ZsnjrVCit6WGoUf4cFH0SRhUrVarvUk36u4VpW2v6ranTzBeOg01ke2UAbUZJHkQlcYYhpZCC2fvEdOKzaK1lFS0aMi3pmp3uk3DT6dcvbysuwsnpkEfiCFYHqrKrDBAIgt55ba4jntpXhmiYPHJGxVkYHIII5BB71HRT5V2A0rzXtRvbi8mnmTfewR20wjhSNTEhjKKFUAKB5Uf3QPu/Wix1/VbC8027srx4LjS1KWjoADGpd3I6fMCZHyDnIYg8cVm0VPs4W5bK39L8tB3L+q6xear5QujCscOdkVvbx28ak4y2yNVXccAFsZIVQTwMWtX8Wa5rCTx6hqDyR3Db3jVVRMltzYVQAoZgGYDAZgrNlgCMail7KGnurTYLl/VNYvNUjtUvTC/2SJYY3S3jjcoqqqhmVQXwqqBuJxirU/inU7izFrOunyoIFtxI+m2zShFQIo8wx78hQADnIwOaxqKPZQslyrQLmlBr2owaabCKZBDtaNWMKGWNGzuRJSN6IctlVYA7myPmOTTNdvtMt2t7f7LJCW3iO6tIblUYgAlRIrBSQBkjGdq5zgYzaKfs4aqyFc0rLXtRs7i5mWZLh7tvMnF5Clysj5J3ssgYF/mb5sZ+ZueTllprN/aX816k/mz3G7zzcIs6z5O4+Yrgh/mAb5geQD1ANUKKPZw10Atz6ldXGpDUJ3SW4DKw3xKyDbgKuwjbsAAATG0AAYxxRq2pXWrXzXl86NMyon7uJYlCooRQFUBQAqgYA7VUopqMU7pAFFFFUBu3v/Ih6R/2E77/ANFWlcjL/rX/AN41117/AMiHpH/YTvv/AEVaVyMv+tf/AHjXyud/wYf4pfmzanuXLX/UL+P86lqK1/1C/j/Opa+gwX+7U/8ACvyM5bsKKKK6iQooooAKKKKANe1/5FDUv+v+0/8ARdxWRWva/wDIoal/1/2n/ou4rIrOG8vX9EZw+KXr+iCiiitDQKuw6vfQXGnTxT7ZdMx9kbYp8vEjSDtz87Mec9cdKpUVE4RmrSV/6t+QbGjqWtXWowLDcRWCKrbgbewggbOCPvRopI56Zx+VPvvEOpXtq9vcSw4lx5siW0Ucs+Dn95Iqh5MkBjuJywBOSAay6KzWGoq1oLTbRaeg7sKKKK3EFFFFAGv4N/5G/RP+v+D/ANGLWRWv4N/5G/RP+v8Ag/8ARi1kVmvjfov1M1/Efov1CiiitDQKKKKACiiigC7pmrXemeYLUwskuN8U8Ec8ZIzhtjqV3DJAOMgMR3NA1e+XWItVE+L2GRJY3CLhCmNgC42hVwAFxgAAAY4qlRWToUnJycVd6PTddmO7J7+7n1C+uL27fzLi5kaWV8AbmY5JwOBye1QUUVpGKikkrJCCtfXP+QXoH/Xg/wD6Uz1kVr65/wAgvQP+vB//AEpnqJbx9f0ZnP4o+v6MyKKKK0NArR0rW73SoJ4LX7M0NwyPJHcWkU6llDBTiRWwQHbketZ1FRUpwqx5ZpNdnqNO2xam1CabURfOlsJgyttS2jSLIxj92FCY45GMHnOcmmfa5zffbZX8+4Mnms84Eu9s5JYNkNk9c5z3qCihU4JWSW1vl29AuWtV1C51bUZ7++ZHubht8jJGsYZu52qAMnqTjk5J5NP1jVrvWLpLi/MJlSNYgYoI4RtUYUYRQOBgD2AHQCqVFTGjTjy2ilyqy02XZdloguzUvvEOpXtq9vcSw4lx5siW0Ucs+Dn95Iqh5MkBjuJywBOSAag/te+/sP8Asbz/APiX/aftXk7F/wBbt27t2M/d4xnFUqKmOHoxSSgkk77Lfv6+YXYUUUVuI1/Cn/IUm/68L3/0mlr6A+Dn/II0/wD69o//AEEV8/8AhT/kKTf9eF7/AOk0tfQHwc/5BGn/APXtH/6CK+X4g2j/AF3HR/iS9F+p6lRRRXyZ2HwpF/qk/wB0VZsLufT763vbR/LuLaRZYnwDtZTkHB4PI71Wi/1Sf7oqWAxLPGbhHkhDAuqOEZlzyASDg474P0NfptNJ0Umrq23yON7l7UtautRgWG4isEVW3A29hBA2cEfejRSRz0zj8qm1z/kF6B/14P8A+lM9XtZt9OuPDi6jZW1hDMk8UbrYNcbY96O22XzyctlPlMeV4fJ5XNHXP+QXoH/Xg/8A6Uz1hh505RSpw5bPayXTsjOpdSj6/oxNN8R6jp1gLGAWUlssrTKlzYQXG12ChiDIjEZCL09BT7fxRqFvbxwx2+kFI1CKZNItHYgDHLNGST7kkmsaiup0qb3ivuNLl8+LtTtmeOKHSNu5n+fR7RzliWPLRE4yTgdAMAYAAqOLxhqsTyusOkEytvbdo9mwBwBwDFhRgDgYGcnqSTjXX+vb8P5VFX59i61SOIqJSaXM+vmdUUrI3l8Yaqtw8wh0je6qhB0ezKgAkjC+VgH5jkgZPGc4GBvGGqm4SYw6QHRWQAaPZhcEgnK+Vgn5RgkZHOMZOcGiub29X+Z/ex2RvS+MNVkeJ2h0gGJt67dHs1BOCOQIsMME8HIzg9QCCfxhqs6BHh0gAMr/ACaPZocqwI5EQOMjkdCMg5BIrBoo9vV/mf3sLI3rjxhqtxbyQyQ6QEkUoxj0ezRgCMcMsQIPuCCKk/4TXV/+eGi/+COy/wDjVc7RS9vV/mf3hZG9b+MNVt7eOGOHSCkahFMmj2bsQBjlmiJJ9ySTRB4w1WBCiQ6QQWZ/n0ezc5ZiTyYicZPA6AYAwABWDRT9vV/mf3sLI3ovGGqxPK6w6QTK29t2j2bAHAHAMWFGAOBgZyepJIvjDVVuHmEOkb3VUIOj2ZUAEkYXysA/MckDJ4znAxg0Ue3q/wAz+9hZG83jDVTcJMYdIDorIANHswuCQTlfKwT8owSMjnGMnJL4w1WR4naHSAYm3rt0ezUE4I5AiwwwTwcjOD1AIwaKPb1f5n97CyN6fxhqs6BHh0gAMr/Jo9mhyrAjkRA4yOR0IyDkEii48YarcW8kMkOkBJFKMY9Hs0YAjHDLECD7ggisGij29Vfaf3sLI6L/AITXV/8Anhov/gjsv/jVR2/jDVbe3jhjh0gpGoRTJo9m7EAY5ZoiSfckk1g0Uvb1f5n94WRvQeMNVgQokOkEFmf59Hs3OWYk8mInGTwOgGAMAAUReMNVieV1h0gmVt7btHs2AOAOAYsKMAcDAzk9SScGin7er/M/vYWRvL4w1Vbh5hDpG91VCDo9mVABJGF8rAPzHJAyeM5wMDeMNVNwkxh0gOisgA0ezC4JBOV8rBPyjBIyOcYyc4NFHt6v8z+9hZG9L4w1WR4naHSAYm3rt0ezUE4I5AiwwwTwcjOD1AIJ/GGqzoEeHSAAyv8AJo9mhyrAjkRA4yOR0IyDkEisGij29X+Z/ewsjeuPGGq3FvJDJDpASRSjGPR7NGAIxwyxAg+4IIqT/hNdX/54aL/4I7L/AONVztFL29X+Z/eFkb1v4w1W3t44Y4dIKRqEUyaPZuxAGOWaIkn3JJNEHjDVYEKJDpBBZn+fR7NzlmJPJiJxk8DoBgDAAFYNFP29X+Z/ewsjptM8V6l9qnLQaQ3mJJKQ2j2hAZYuMAx/KPlBwMDOT1JzXXxhqq3DzCHSN7qqEHR7MqACSML5WAfmOSBk8ZzgYy9M/wCPl/8ArhN/6LaqtHt6v8z+9hZG83jDVTcJMYdIDorIANHswuCQTlfKwT8owSMjnGMnJL4w1WR4naHSAYm3rt0ezUE4I5AiwwwTwcjOD1AIwaKPb1f5n97CyN6fxhqs6BHh0gAMr/Jo9mhyrAjkRA4yOR0IyDkEii48YarcW8kMkOkBJFKMY9Hs0YAjHDLECD7ggisGij29Vfaf3sLI39a8Q6jquj2KXRtUSG4nKJbWcNuoLLFkkRqoJO0cn0FYJJJJPU1Zk/5BNv8A9d5f/QY6q1MqtScVGUm0vMEki9a/6hfx/nUtRWv+oX8f51LX6Ngv92p/4V+Ryy3YUUUV1EhRRRQAUUUUAa9r/wAihqX/AF/2n/ou4rIrXtf+RQ1L/r/tP/RdxWRWcN5ev6Izh8UvX9EFFFFaGgUUUUAFFFFABRRRQAUUUUAa/g3/AJG/RP8Ar/g/9GLWRWv4N/5G/RP+v+D/ANGLWRWa+N+i/UzX8R+i/UKKKK0NAooooAKKKKACiiigAooooAK19c/5Begf9eD/APpTPWRWvrn/ACC9A/68H/8ASmes5bx9f0ZnP4o+v6MyKKKK0NAooooAKKKKACiiigAooooAKKKKANfwp/yFJv8Arwvf/SaWvoD4Of8AII0//r2j/wDQRXz/AOFP+QpN/wBeF7/6TS19AfBz/kEaf/17R/8AoIr5fiDaP9dx0f4kvRfqepUUUV8mdh8KRf6pP90VLBNLbzxz28jxTRMHSRGKsjA5BBHQg96ii/1Sf7oq/omlXWtapDp9im6eXcQME4CqWY4AJOFBOACTjABOBX6XGUIUFKeyWvpY4+pJqWt3uowLBP8AZo4Q28x21pFbqzAEAsI1XcQCcE5xuOMZOZtc/wCQXoH/AF4P/wClM9anivw+dL8OafdDRL/Tz9rnt3mvInjkmUJEyMyn5VJJlwF7LjLFSxy9c/5Begf9eD/+lM9Y4WrRq04yoK0bvt0uuhFVNSjfv+jMiiiiu8oY0MbMWZck+9N+zxf3f1NS0VzSwmHk23Ti2/JD5n3Ivs8X939TR9ni/u/qalopfUsN/wA+4/ch8z7kX2eL+7+po+zxf3f1NS0UfUsN/wA+4/cg5n3Ivs8X939TR9ni/u/qaloo+pYb/n3H7kHM+5F9ni/u/qaPs8X939TUtFH1LDf8+4/cg5n3Ivs8X939TR9ni/u/qaloo+pYb/n3H7kHM+5F9ni/u/qaPs8X939TUtFH1LDf8+4/cg5n3Ivs8X939TR9ni/u/qaloo+pYb/n3H7kHM+5F9ni/u/qaPs8X939TUtFH1LDf8+4/cg5n3Ivs8X939TR9ni/u/qaloo+pYb/AJ9x+5BzPuRfZ4v7v6mj7PF/d/U1LRR9Sw3/AD7j9yDmfci+zxf3f1NH2eL+7+pqWij6lhv+fcfuQcz7kX2eL+7+po+zxf3f1NS0UfUsN/z7j9yDmfci+zxf3f1NH2eL+7+pqWij6lhv+fcfuQcz7l/w1ZW82oypJHuUWV2wG4jlbeQj9QKy/s8X939TW54U/wCQpN/14Xv/AKTS1kVmsHhud/u47LovMzU5c7V+i/Ui+zxf3f1NH2eL+7+pqWitPqWG/wCfcfuRpzPuRfZ4v7v6mj7PF/d/U1LRR9Sw3/PuP3IOZ9y/c2VuvhawmEeJHvblSdx5ASAj/wBCNZf2eL+7+prcuv8AkUNN/wCv+7/9F29ZFZwweGt/Dju+i7mdOcmt+r/MRVCKFUYApaKK7YxUUklZIoKKKKYBRRRQAUUUUAa9r/yKGpf9f9p/6LuKyK17X/kUNS/6/wC0/wDRdxWRWcN5ev6Izh8UvX9EFFFFaGgUUUUAFFFFABRRRQAUUUUAa/g3/kb9E/6/4P8A0YtZFa/g3/kb9E/6/wCD/wBGLWRWa+N+i/UzX8R+i/UKKKK0NAooooAKKKKACiiigAooooAK19c/5Begf9eD/wDpTPWRWvrn/IL0D/rwf/0pnrOW8fX9GZz+KPr+jMiiiitDQKKKKACiiigAooooAKKKKACiiigDX8Kf8hSb/rwvf/SaWvoD4Of8gjT/APr2j/8AQRXz/wCFP+QpN/14Xv8A6TS19AfBz/kEaf8A9e0f/oIr5fiDaP8AXcdH+JL0X6nqVFFFfJnYfCkX+qT/AHRTqbF/qk/3RV/QvsP9uaf/AGv/AMg/7TH9q+9/qtw3/d5+7npz6V+mQlyUFK17Lpvt0ON7kL3c72MVkz5t4ZHlRMDhnChjnryEX8vrWhrn/IL0D/rwf/0pnq94it7RtKFzpltojQxzrHLPpzXm5GZWKqwuDyGCscqDjZyRkZo65/yC9A/68H/9KZ6zo1Y1YqUYuOr0ejvZvVee/wA7mdRWlH1/RmRRRRXYWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRT/Jl8nz/ACn8nds8zadu7GcZ6Zx2onikt5mhnjeKVMbkdSrLkZGQannje19QGUUUVQBRRQTj2o2AKKM+naigDX8Kf8hSb/rwvf8A0mlrIrX8Kf8AIUm/68L3/wBJpayKzXxv0X6ma/iP0X6hRRRWhoFFFFAGvdf8ihpv/X/d/wDou3rIrXuv+RQ03/r/ALv/ANF29ZFZ09vm/wAzOn8Pzf5sKKKK0NAooooAKKKKACiiigDXtf8AkUNS/wCv+0/9F3FZFa9r/wAihqX/AF/2n/ou4rIrOG8vX9EZw+KXr+iCiiitDQKKKKACiiigAooooAKKKKANfwb/AMjfon/X/B/6MWsitfwb/wAjfon/AF/wf+jFrIrNfG/RfqZr+I/RfqFFFFaGgUUUUAFFFFABRRRQAUUUUAFa+uf8gvQP+vB//SmesitfXP8AkF6B/wBeD/8ApTPWct4+v6Mzn8UfX9GZFFFFaGgUUUUAFFFFABRRRQAUUUUAFFFFAGv4U/5Ck3/Xhe/+k0tfQHwc/wCQRp//AF7R/wDoIr5/8Kf8hSb/AK8L3/0mlr6A+Dn/ACCNP/69o/8A0EV8vxBtH+u46P8AEl6L9T1KiiivkzsPibTfD2t3zz29jo+oXM9mQlzFDbO7QNyMOAMqcqwwfQ+ld1o/w2ntdOsb/UZNQsdTZvOWOMrG0GD8nYkNwG7EZwQCK+oj0rPutJt7mTfIgJr2a+cVqlJU4+7bt1M1TSdz5n8f+GtWttD+3xNF/ZkLqbiOO2gttrE7UciJED/e2jIJXcccMcclrn/IL0D/AK8H/wDSmevsgaTZm2kt5beKWCVCkkcihldSMEEHggjjFeA/GD4XX9pr+kw+ENMurrTp4fIigiDSC1cOSQzkfKjGTcC7HnfyFAA7cozCEUqFTTW6eiWz3/QyrU22pLp/keSWVrLe3cVrbrmWVgq8HA9zjPA6k+lafivRV0TUVhgaV4JIw6M69+hXI4JGM/8AAh9a9p0v4WL4U0hWZ1udSkX9/Mo+Uf7CZ/hHr1PU44AU/DS28ViEam1xB5DEq8LBWweo5BGOB2zx9a0q52vracf4a0fn5lqn7vmfPlFe16j+ztfQ2Lvp/iKC5uhjbHNamFDzzlgzEcZ7H8OtRwfAvybSMX15cPdbf3hgKiMH0XKk49z164HSvRlnWEik02/l/mR7OR4xRXvdp8HdKlf95YMMf9NpP/iqv3nwQ0m709bW3DWLCZZDLH87kdGXLZOCPwBwcHkHnWf4e/wv8P8AMfsmfOufTtVqLTb6W6e1is52uI1LPEIzuUAZyR9MfXIxyRX1A/w203fHKbK2MkKhYmMS5QDoAccY7Yq9Y+BrFZ/tMlvF9o2eX5uwb9uc7c9cZ5xXJU4glb3IWfm/uKVI+RwQRlSCPajPp2r601f4V+F9ZmWfUtMjkmHWRHaJm4A+YoRuwAMZzjtU178PtHku4LqKygjntovJidUA2J/dGOw7emTjqc6LiGNlenr11/r/AIHmL2XmfItGecd6+sI/hd4bEYVtF04gf9Oqf4VSl+DPhc6d9his2hhMyzMVlcuxXsWJJIwWGO24kYPNVHiCDesGvn94ey8z5coJwMngV9O6v8G/D+omAm1Ft5L7v9FAi8wd1bA5B49x2Iyavx/DTSLdlltdPtIZk+68cKqwyMcED0NOXEFNR92DuHsmfKYORkdKK+orb4O+G/tU11dWXnyzTi4PmOxCt6AZ+6SSSpyDnngACjqXwN8OXTXBhintWmferQykeV0yqqcrjg8EHG44wMYqPEFL7UH/AFb/AIP9MPZM+a6K+i9V+B2kXOm21patJavbkf6QmDJIM/MG7EnsexxjjKmp/wAKH0waobnzpvsWzH2Lc33+mfMzux3x1z3xxV/29h+z6/8AA+8XsmfP9Fe/ar8EtOksLhNNtzBdsh8l2ncqH7ZznjPB46ZxzXhF9Z3Wn3T2t/bTWlzHjfDPGY3TIBGVPI4IP4134LMaWMuoaNdGTKDiQU+GJ55o4YV3SSMERcgZJOAOfemV3fw60hVgfVJ41LyEpASOVUcMw57njpng9jWmOxawlF1HvsvUUY3djpdM8O2jabaaVNAlzFCQfnXIL5yWwScZJPHoSOld1qnwxsvFGgiC6JguVBaC4VctE307qe69/YgEP8E6L9olErrwK9LgjEUYRRgCvzxVZqXOnre/zOqx8UeIdB1Xw3qTadrllJZXaqH8tyDlT0YMpIYdRkE8gjqCKzq+t/i74GPjnw0traGCLU7WUSWs0x2qMnDqzBWYKV5wOrKmeleRXfwB1+3t7V/7UsHkYt9pVQ+Ihn5Shx85I5IITB4yetfY4TOqMqV67tL0evmYSpu+hwfhTw9Lq14klzA4sF+Z3JKB+oAU9+RzjoM8g4r1zRfDUGo3skjWUJaddkrmMZkXphjjkYHQ1oad4Lks44ra2gEUEfCqo4H+fWvRvDujR2NuuVG6vmcdjZ4ypzvRLZeRtGPKjzDxz8GBf6BCfDkcUF7YoRFBgKJ16lCx6NnJBJxknP3tw+fgQRlSCPavuwDFeS/GH4S3njHXLXVtAlsba4aIx3n2higk242MNqElsEgknoqAdK9HKsz9hL2VZ+6+vZ/8EicL6o8O8E6bd3d/NLDERB9muYDM3CK7wSKo9TywzgHGea1LX4ZatdLMILm2Z1I8r7wDjPJbj5eOeN3p7167Y/Ds+H/D9lYRBXuEQNcyJyHlPLEHAyAeASM7QM12XhTQls4AZUG6s8RnOIlVlKk7LpotvmKNGKd3ueD23wX1k3Vv51zCbUgGYoGDqe6qMYPbk469OMHf1b4QreacLfTYUs7mLJic5IYnna55JB9eSO3HB99EMYGAopREg6KK4qmZYqpJSc9vkaKEUfEGqadeaRqM+n6lbSWt3btslikHKnr+IIIII4IIIyDVWvrP4q/Dey8c6aJIjHa6zbIRbXRHDDr5cmOShOcHqpORnLK3n3/Cg7e202D7ZqV1LfFczG3KrEG9FDKTgdMnrjOBnA+jo57R9knVT5uqX5mLpO+h5Jdf8ihpv/X/AHf/AKLt6yK9qi+COoSafa2k+roba3neYhLQq7FwgYbi5A4jGOO561WX4E3H2nnVH8gPnb5A37c9N2cZx3x+Hat6ec4RaOT69GZwoyireb/M8eor0zxD8FfEFkFfRB/aas5BiJWJ0XqpyxAb0PTnHGM4d/wpbVYYk+138aTHO5Yoi6jnjBJBPGO1brN8HyqXP+DuV7OR5jRXqel/BPVJIPM1K8SNxIPkt1Lgp35IGGPGOMDHfPHX2Xwm0yW4ikl06MeUFAALAHHTcM4b3JznvXNVz3DQdo3f9eZSpM+fau2mkajeLG1rY3EiSHCusZ2HnH3unWvpu7+FmiaiHN/YQSNLjfIF2SHGMfOuG7Dv04rRtvAOnWNpDa2MCwwQjCovb/E9yepNcU+Ifd9yGvm9CvZeZ8u2fhjVrrWl0n7I0N2UMmJMlVXGdxZcjGeM9M8da31+F+uvCPLe3e58wKYgTtCn+LcR27jHTpk8H6csvDdjAySNbxtMilFkKjcqnBIB9CVXP0HpVqLSbeKXeqAH6V5887xUrWaVvLcpU4o8OtvhJGunTWHnXnlXE0czEsm5SgcDHy9P3h6+grOb4DaubybbqUEdljMLmMvKenDLwPXkHt0GcD6OEMY/hAp+0YxiuWnmWKp3tN69x+zj2Pk2T4R+MI5riP7FAywpuWVZxsmOB8q55z2+YAcde9Y1x4J8QWuhPq9xp0sVvGTvjdSsqKOrlCMhf1xzjHNfZJiQ/wAIqJrKBusY/KuyOeYpLWz26f1v/wAML2cT4bor2D4y/CSbRWu/EXhyNH0st5k9lDGVNmu0ZccncmdxOANgI42glfH6+twmLp4unzw+a7GEouLsFFAORkdKltbaa7uEt7WJpZpDhUXqa6XJJczehIyNHkkWONWd2ICqoyST0AFI4MchjkBRwSCrDBBHUY9a9M8D+Bbi1vRdXbLJcJkRLExKrkYJJIGTgkYxj+nsfhfwlHEjPNEqtIdzHGNxwBk/gAPwr5zEZ9CnUtSjzLvt/X+ZsqWmp8n5AIGQCelX9P0XVNRCGxsLiZZM7XCYQ4zn5jx2I69eK+rNP+HWhaSlwNKsYrX7Q/mSbM8n0GegGThRwMnAFX7TwraRD5kBrnqcQTs1Thb1GqXc+YfA3hvVJ9ejvI4Aq6TexmYOSMsj5ZFIBBI2889x607xJ4B1fTrtP7K06/v7WRNwaKAyFCOqnaPoc4HXHODX1TDoFhAJDFbxo0rbpCqgF2wBk+pwAPoBVq2sIbdSqoAPpXH/AG3iPa+00t2H7GK16nyDceAvFNushk0ab92CSEkjc4HoAxJ+g5rBu7eeyuHt7yGS3njxvjlUoy5GRkHkcHNfbZ022L7jGM/Smz6Tayrgxr+VbUs/rx+OKf4f5g6S6HxUNPvPtE1v9llWa3jMsyMpUxoBuLNnoMevqPUVFJBNHDFNJFIkU2fLdlIV8HBwe+D1xX2ePDlmDnyxVW68FaJdWkdpc6bazW0WPLhkhVkTAwMKRgYBI+lax4gnf3ofiL2R8e2tld3gf7Haz3GzG7yoy+3PTOB7GhLK7kFwY7S4YWv+v2xMfJ6538fL0PX0NfXVv4F0mzXy7Cyt7SLduKQxhFz64HfitOPw9ZpGF8sflSlxBUv7sFYPZI+K6K+rvEHwk8LaxYm3XTYbB9wZZ7ONIpFx2yByOvBBH4gEYsPwV8P2csbRWZmZFwWnkZw/GCSpO3n6YzXZ/rBR5b8jv2J9kz5ror6h8UfCuz17Qp7YhUvkRmtJi23ZJjgE4Pyk4DDB49wCPma40+9tdQOn3NncwXoZVNtLEySgtgqNhGckEY45yK7sBmdPGJq3K10v/wAMTKDiV619c/5Begf9eD/+lM9Nm8Na5DM8TaResydfLgaRemeCoIP4VqahoGp3d5o2hx2si31vZETIwIWMGeVtxboVw68jPPHXiumWKoNxamu+67MynGV46df0Zy1FaV1oGqWusjSJLR2vXP7uNefMHPzKe68Hntg5xg4tW/g/X7m4uoLXTZZmtJPKkIIRc+xfGRjB+hB7in9dw6jzc6ta/wAjTlZh0Vq6h4Z1zTjL9r0i9RIRueQQs0ajGc7wCuAOpzx3qKLQtWl8nytNun8+JpotsZO9B1Yfp7nK4zuGa+t4e1+dfehcr7GfRQCOMEc8iui8HeGbjWr+J5reT7AvzO5yok6gBTjnkc46DPIOKqviKdCm6k3ogSbdkZcOjalNpz6hDZyvaR5LSDHAHU46kD1AwMH0NUa+qfCXhO3ez8u6to2t2TyzCyAoVxjbjpjHGK8l+Kvwik8HWD6xpV493pUbKsqz7VlgzhQxIwHBY44AIyODyR4mCzqNao4VdLvT/gmkqdloeYUUVItvMbQ3axt9nEgj83+HeQTtHqcAnjp36ivflOMLcztcysR0VevNG1Kxs1ur2ymtoWk8oNKuwlsZxg89AecY4qzpvhjVtT0yW/srVpIo/uqM7pcddg74/wDrDJ4rKWJowjzOattuOzDwp/yFJv8Arwvf/SaWvf8A4Of8gfTyOn2aP/0EV5x4V+HF8iWN7LHOHuIJYrmEYVkSaNkBXcBgqHBYHPQ4yQAfb/B+kPYH5xivkc4xtLEtRpO9i6UHGbb7L9Tq6KdijFeCdItFFFABRRRQBHNCkq4cAikht44BiNQKlooAKQqp6gUtFADQir0AFOoooAKMUUUAFFFFABRRRQAUUUUAFFFFABRiiigBMD0rzz4x/DQ+OrW1udMmgtdWs8orTLhJoyRlXYAsNvJXqOWGPmyPRKK0pVZ0ZqcHZoTV9D5p1/4DeIdOt7J9OvLbUpJiFuUC+ULYkDLAk/OoOeQA3TCnJx1+l+CrnTLG2tFUEQoFLKm0Me7Y7ZOT+NezEA9RTDDGeqiujEY6tiYqNV3tf8RKKjsY/hbT/sVkoYYOK3KRVCjAGKWuMoKQqDwRS0UAM8pB/CKeBjpxRRQAUUUUANZFPUZpVULwBilooAKKKKACkKg9RS0UAIFA4Ao2r6ClooATavoKY8EbnLKD+FSUUAMESAYCjFKEVegAp1FABRRRQAUUUUAFFFFABRRRQAV5lZ/BTwxpOptqNiLuVwWaGG4lDxwknI28ZO3oCxPryea9NorWnWqUk1CVr7iaR5lb/CPQJNSkvrrTo5J3Ys24koxIwSUztPX0689eat6Z8LdF0q6nuNPs0gkn+8QScDOcAE4UewwOB6CvQqKXtJ2td22Cxg6P4dgsDnaCa3FUKMAYp1FZjCiiigAooooAKKKKACiiigAooooAKKKKACq93aR3KbZFBFWKKAMqHQbSJiRGPyqX+x7T/nmv5VoUUAZw0a1ClRGMH2pI9FtUGBGPyrSooAp/2ZbbNvlrj6VAdDtN2fLH5Vp0UAcze+BtBuoXik0uzaN5TOymBSGkPVyMcsc9etSWXhKxtCiwxIkcYCqirgKB0AHYV0VFPmdrXAjghSFAqDAFPZQRgilopAcjcfDnwyZkmtdD023kjIZGitI0Kn1BA4q3F4QsAoWWFJFDBgGUEZByD9QQD9RXR0U7sDDuPC2l3cLwXlpDcwP96KWMOrc5GQeDzUi+H7VZ/M2D8q2KKQFaOxhjIKoARU6xqvQYp1FABRRRQB//2Q==
/***
|''Name:''|ChangeModePlugin|
|''Description:''|Change template and styleSheet|
|''Credits:''|SaqImtiaz for is PresentationPlugin|
|''Version:''|0.0.4|
|''Date:''|Jun 5, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#changeModePlugin|
|''Usage:''|{{{<<changeMode [newMode]>>}}}<br>{{{newMode: if omitted the default mode is applied}}}|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''[[License]]:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.ChangeModePlugin = 
{
	major: 0, minor: 0, revision: 4, 
	date: new Date("Jun 9, 2007"),
	source: 'http://tiddlywiki.bidix.info/#ChangeModePlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

// From SaqImtiaz's PresentationPlugin
//---------------------------------------------------
TiddlyWiki.prototype.isTiddler= function (title) 
{
	return store.tiddlerExists(title) || store.isShadowTiddler(title);
};

TiddlyWiki.prototype.removeNotification = function(title,fn) 
{
	for (var i=0; i<this.namedNotifications.length; i++)
	if((this.namedNotifications[i].name == title) && (this.namedNotifications[i].notify == fn))
 		this.namedNotifications.splice(i,1);
};

Story.prototype.chooseTemplateForTiddler_core = Story.prototype.chooseTemplateForTiddler;

Story.prototype.chooseTemplateForTiddler = function(title,template)
{
	if (!template)
 		template = DEFAULT_VIEW_TEMPLATE;
 	var mode = config.macros.changeMode.currentMode;
 	if (template == DEFAULT_VIEW_TEMPLATE) {
 		if (store.isTiddler(mode+"ViewTemplate"))
 			return mode+"ViewTemplate";
 	} else if (template == DEFAULT_EDIT_TEMPLATE) {
 		if (store.isTiddler(mode+"EditTemplate"))
 			return mode+"EditTemplate";
 	}
 	return this.chooseTemplateForTiddler_core(title,template);
}


Story.prototype.lewcidrefreshAllTiddlers = function() 
{
	var place = document.getElementById(this.container);
 	var e = place.firstChild;
 	if(!e) return;
 	this.refreshTiddler(e.getAttribute("tiddler"),null,true);
 	while((e = e.nextSibling) != null)
 		this.refreshTiddler(e.getAttribute("tiddler"),null,true);
}
//---------------------------------------------------
// manage different modes
// 
// config.macros.changeMode.initMode: the name of the initial Mode
// config.macros.changeMode.readOnlyModes: array containing readOnly mode (no Backstage and readOnly)
//

config.macros.changeMode = 
{
	currentMode: '',	// defaultMode
	initMode: 'Reader',
	readOnlyModes : ['Reader'],
	noBackstage : ['Reader'],  // ['Reader', 'Author'],
	singlePageMode: [], // ['Reader', 'Author'],
	lingo: {
		label: "%0 mode",
		prompt: "Change the current mode to '%0'",
		modeName: {
			Author: 'Author',
			Reader: 'Reader',
			'': '(default)'
		}
	},
	handler: function(place,macroName,params) {
		var newMode = (params[0] ? params[0]: ''); // default to ''
		if (newMode == '') {
			if (this.currentMode=='Reader') newMode = 'Author';
			if (this.currentMode=='Author') newMode = 'Reader';
		}
		var newModeName = (this.lingo.modeName[newMode] ? this.lingo.modeName[newMode]: newMode); // default to ''
		var label = this.lingo.label.format([newModeName]);
		var prompt = this.lingo.prompt.format([newModeName]);
		createTiddlyButton(place, label, prompt, function() {config.macros.changeMode.action(newMode);}, null, null, null);		
	},	
	action: function(template) {
		config.macros.changeMode.applyMode(template);
	},
	defaults: [
		{name: "StyleSheet", notify: refreshStyles},
		{name: "PageTemplate", notify: refreshPageTemplate}
	],	
	applyMode: function (newMode) {
		var oldMode = this.currentMode;
		var oldStyleElement = document.getElementById(oldMode+"StyleSheet");
		if (oldStyleElement) {
			oldStyleElement.parentNode.removeChild(oldStyleElement);
		}
		// change Palette
		if (store.isTiddler(newMode + 'ColorPalette')) {
			var tiddler = new Tiddler('ColorPalette');
			//tiddler.tags.push('admin');
			if (!newMode) {
				if (store.isTiddler('defaultColorPalette'))
					tiddler.text = store.getTiddlerText('defaultColorPalette');
				else
					tiddler.text = config.shadowTiddlers['ColorPalette'];
				} else {
				tiddler.text = store.getTiddlerText(newMode + 'ColorPalette');
			}
			store.addTiddler(tiddler);
		}
		for (var i=0; i< this.defaults.length; i++)
		{
			var name = this.defaults[i]["name"];
			var newElement = store.isTiddler(newMode + name) ? newMode + name : name;
			store.removeNotification(oldMode + name, this.defaults[i]["notify"]);
			store.addNotification(newElement,this.defaults[i]["notify"]);
			store.notify(newElement); //just one do blanket notify instead?
		}
		if (backstage && !backstage.button)
			backstage.init();
		// change readOnly
		if (this.readOnlyModes.indexOf(newMode) == -1) {
			readOnly = false;
		}
		else {
			readOnly = true;
		}	
		// change backstage display
		if (backstage && backstage.button) {
			if (this.noBackstage.indexOf(newMode) == -1) {
				backstage.button.style.display = "block";
			}
			else {
				backstage.hide();
				backstage.button.style.display = "none";
			}
		// change singlePageMode
		if (this.singlePageMode.indexOf(newMode) == -1) {
			config.options.chkSinglePageMode = false;
		}
		else {
			config.options.chkSinglePageMode= true;
		}	

		}
			
		
		this.currentMode = newMode;
		story.lewcidrefreshAllTiddlers ();
		// store.refreshPalette();
		store.notifyAll();
		},
	init: function() {
		if (!store.isTiddler('defaultColorPalette'))
			config.shadowTiddlers['defaultColorPalette'] = config.shadowTiddlers['ColorPalette'];
		config.macros.changeMode.applyMode(this.initMode);
	}
}

config.paramifiers.mode = {
	onconfig: function(mode) {
		if (mode == 'false')
			config.macros.changeMode.initMode = null;
		else
			config.macros.changeMode.initMode = mode;	
	}
};


//}}}
|Default|@@""" ChkTrnClosed = 8 """@@|
กำหนดระดับ user ขั้นต่ำ ที่สามารถแก้ไขข้อมูล transaction ก่อนวันที่สั่งปิดไปแล้วได้ 

ประกอบด้วย transaction ของ สต็อก (เข้า-ออก), ลูกหนี้ (เพิ่ม-ลดหนี้), เจ้าหนี้ (เพิ่ม-ลดหนี้), บัญชีธนาคาร (นำเข้า-จ่ายออก) 

| 0 |user1 (อนุญาต user ทุกคน) |
| 1 |user2 |
| 2 |user3 |
| 3 |user4 |
| 4 |user5 |
| 5 |user6 |
| 6 |user7 |
| 7 |บัญชี |
| 8 |ผู้จัดการ |
| 9 |supervisor (ไม่อนุญาต user ทุกคน)|
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
//{{{
readOnly = true;
//}}}
|Default|@@""" CostDigit = 3 """@@|
จำนวนหลักหลังจุดทศนิยม ของ field __มูลค่าต้นทุนรวม__ของสินค้า 

ดูเพิ่มเติม: CostError มูลค่าต้นทุนต่อหน่วย
|Default|@@""" CostError = 6 """@@|
จำนวนหลักหลังจุดทศนิยม ของ field __มูลค่าต้นทุนต่อหน่วย__ของสินค้า

จำนวนทศนิยมของ CostError จะมีผลในการคำนวณต้นทุนเฉลี่ย ฯลฯ และสัมพันธ์กับ จำนวนของสินค้าที่เคลื่อนไหว เช่น สินค้าที่มีจำนวนเคลื่อนไหวในระดับพันชิ้น ถ้าจำนวนทศนิยมของ CostError น้อยเกินไป จะทำให้การปัดเศษต้นทุนเพี้ยนได้ง่าย 

ดูเพิ่มเติม: CostDigit มูลค่าต้นทุนรวม
|Default|@@""" CostShow = 0 """@@|
กำหนดระดับ user ต่ำสุดที่สามารถเห็นต้นทุนสินค้า 

| 0 |user1 (อนุญาต user ทุกคน) |
| 1 |user2 |
| 2 |user3 |
| 3 |user4 |
| 4 |user5 |
| 5 |user6 |
| 6 |user7 |
| 7 |บัญชี |
| 8 |ผู้จัดการ |
| 9 |supervisor (ไม่อนุญาต user ทุกคน)|
|Default|@@""" CusUtilOpenShare = OFF """@@|
ปกติ ในการทำงานอรรถประโยชน์ ของระบบลูกค้า เช่น เปลี่ยนชื่อ หรือ คำนวณยอดสุดท้ายใหม่ โปรแกรมจะเปิดไฟล์แบบ exclusive คือ lock ไม่ให้ผู้อื่นเข้าไปเพิ่ม, ลบ, แก้ไข ไฟล์ข้อมูลลูกค้า เพื่อป้องกันไม่ให้ประมวลผลผิดพลาด 

ดังนั้น ในระหว่างที่มีการประมวลผลอรรถประโยชน์อยู่ ผู้อื่นไม่สามารถทำงานใดๆ ที่เกี่ยวกับลูกค้าจะต้องรอจนกว่า คำสั่งอรรถประโยชน์นั้น ทำงานเสร็จก่อน 

เปลี่ยนค่านี้เป็น ON จะเปิดไฟล์แบบ share แทน มีผลทำให้ ผู้อื่นสามารถทำงานเกี่ยวกับลูกค้าได้ตามปกติ ในระหว่างที่ คำสั่งอรรถประโยชน์ทำงาน 

กรณีนี้ ผู้ใช้จะต้องรับความเสี่ยงเอง โอกาสที่การประมวลผลผิดพลาด เช่น ระหว่างที่คำนวณยอดหนี้ล่าสุดอยู่ มีการเพิ่มหนี้ของลูกค้ารายนั้นจากผู้อื่นพอดี 
Home
//{{{
window.coreWikify = wikify;
window.wikify = function(source,output,highlightRegExp,tiddler)
{
	if (source) arguments[0]=source.replace(/<br>\\\n/mg,'<br>')
	else if (source) arguments[0]=source.replace(/\\\\\n/mg,' ');
	coreWikify.apply(this,arguments);
}
//}}}
{{{
ผมไม่แน่ใจว่ามีคนถามเรื่องนี้แล้วหรือยัง คือลูกค้ามีความต้องการที่จะใช้ความสามารถ  F1 ที่ช่องหมายเหตุ 
วัตถุประสงค์เพื่อเก็บ รายละเอียดไว้เป็นกลุ่ม ๆ เหมือนกัน เมื่อมีข้อความเหมือนกัน ก็จะดึงข้อมูลรายการที่เก็บไว้มาใช้งานอีก

อีกข้อที่ต้องการ คือต้องการให้รายงานบิลซื้อ บิลขาย มีความสามารถที่จะรายงาน เลือกหัวข้อรายงาน ใช้ไวล์การ์ด (*) ในการกรุ๊ปรายงานได้
สองข้อนี้ สามารถทำได้หรือไม่ หรือต้องการโมดิฟาย จะทำได้หรือไม่ เท่าไร

ขอบคุณครับ
}}}

{{{
update 30-9-51

จัดให้
วิธีที่ 1 โปรแกรมเดิม F1 ในช่องหมายเหตุไม่ได้
อาจไม่สะดวกนัก ใช้ Copy & Paste จาก Field ข้อมูลเดิมมาใช้แทนก่อน
http://admthai.homeip.net/forum/index.php/topic,482.0.html
ข้อเสียคือ ทุกครั้งที่ออกจากโปรแกรม Copy & Paste จะหายไปด้วย

แต่รายงาน R_Po สามารถกำหนดเงื่อนไขใน .FRM ได้ดังนี้
cnd.Remark=ON,"wildcard...."
เพื่อให้โปรแกรมกรองข้อมูลส่วน หมายเหตุด้วย

วิธีที่ 2 update โปรแกรมเพิ่มเติมให้แล้วครับ
สามารถกำหนดให้ช่อง หมายเหตุ สามารถกด F1 เลือกรายการจาก list ข้อมูลที่อื่นมาใช้ ดังนี้
กำหนดใน __FSYS.INI
_PoRemarkList=ชื่อข้อมูล

สำหรับชื่อข้อมูลได้แก่
CusName ชื่อลูกค้า
VndName ชื่อเจ้าหนี้
PName ชื่อสินค้า
WkrName  ชื่อพนักงาน (ระบบเงินเดือน/ภาษี ณ ที่จ่าย)
Who ชื่อผู้เกี่ยวข้อง (แยกประเภท)
InvBrief ชื่อสรุปบิลขาย
PoBrief ชื่อสรุปบิลซื้อ
BDetail ชื่อรายการบัญชี (ธนาคาร)

ตัวอย่างเช่น
_PoRemarkList=PoBrief

หรือถ้ากำหนดให้ใช้เฉพาะบิลหมวดที่ต้องการ
_PoRemarkList.XX=PoBrief

XX คือ หมวดบิล

นอกจากนี้ยัง update จอเงื่อนไขรายงาน บิลซื้อ(ใหม่) เพิ่มช่องให้ระบุเงื่อนไข หมายเหตุ ได้

ไฟล์ที่ update ได้แก่ _Po1_.EXE, R_Po.EXE

 
}}}
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>

<<changeMode>>
* help
** [[Tags|http://tiddlywiki.org/wiki/Tags]]
** [[Markup|http://tiddlywiki.org/wiki/TiddlyWiki_Markup]]
** [[Macro|http://tiddlywiki.org/wiki/Core_Macros]]
* plugin
** [[Alias|http://tiddlywiki.abego-software.de/Beta.html#TiddlerAliasPlugin]]
** [[Micro Browser|http://www.tiddlytools.com/#MicroBrowser]]
** [[Launch Application|http://remotely-helpful.com/TiddlyWiki/LaunchApplication.html]]
** [[External Tiddler|http://www.TiddlyTools.com/#ExternalTiddlersPlugin]]
** [[Story Viewer|http://www.tiddlytools.com/#StoryViewerPlugin]]
<<tiddler "UpdateTalks">>

UpdateLogs
|<<tiddler "UpdateLogs">>|

UpdateLinks
|<<tiddler "UpdateLinks">>|
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.href=config.macros.attach.getAttachment(link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);
			addClass(e,"imageLink");
		}

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		// modify by Sathit, March, 2010
		if (!(width||height)){width="80%+";height="auto"}
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		}
		if(tooltip) img.title = tooltip;

		// GET IMAGE SOURCE
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
				img.onerror=(function(){
					this.src=config.formatterHelpers.resolvePath(this.src,false);
					return false;
				});
			} else
				src=config.formatterHelpers.resolvePath(src,true);
		}
		img.src=src;
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
}

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')
		+'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';
	e.statusMsg='width=%0, height=%1';
	e.style.cursor='move';
	e.originalW=e.style.width;
	e.originalH=e.style.height;
	e.minW=Math.max(e.offsetWidth/20,10);
	e.minH=Math.max(e.offsetHeight/20,10);
	e.stretchW=stretchW;
	e.stretchH=stretchH;
	e.onmousedown=function(ev) { var ev=ev||window.event;
		this.sizing=true;
		this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
		this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
		this.startW=this.offsetWidth;
		this.startH=this.offsetHeight;
		return false;
	};
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		}
		return false;
	};
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		this.sizing=false;
		clearMessage();
		return false;
	};
	e.onmouseout=function(ev) { var ev=ev||window.event;
		this.sizing=false;
		clearMessage();
		return false;
	};
}
//}}}
รอเรียบเรียง
MOD-CDS-2007-09
MOD-CDS-2007-10
MOD-CDS-2007-11
MOD-CDS-2007-12
<<list filter "[tag[__FSys.INI]][sort[-modified]]">>
/%<<list filter "[tag[__FSys.INI]]">>%/
ดูเพิ่มเติม <<matchTags popup "label:Draft" " __FSys.INI AND Draft>>
<<matchTags inline "|[[%0]]<br>%6|%5|" "\n" __FSys.INI AND NOT Draft>>
<<list filter "[tag[MOD]][sort[-modified]]">>
/%<<list filter "[tag[MOD]]">>%/
ดูเพิ่มเติม <<matchTags popup "label:Draft" " MOD AND Draft>>
<<matchTags inline "|[[%0]]<br>%6|" "\n" MOD AND NOT Draft>>
<<timeline "modified" "20">>
ใช้กำหนดชื่อชุดข้อมูล ของชื่อสินค้า ที่เป็นฐานข้อมูลหลัก เป็นส่วนหนึ่งของ ~MOD-SPC มีผลเฉพาะกับไฟล์ ~StkUtilX ส่วนอรรถประโยชน์เปลี่ยนชื่อสินค้า 

กรณีที่ชื่อสินค้าในชุดข้อมูลหลักถูกเปลี่ยนไปแล้ว แต่ชื่อสินค้าในชุดข้อมูลสาขา ยังไม่ได้เปลี่ยนชื่อ ช่วยให้สามารถกดหาชื่อสินค้าที่เปลี่ยนไปแล้ว จากชุดข้อมูลหลักได้

@@"""
MDir.Stock=ชื่อชุดข้อมูลของ HO
"""@@

ในช่อง เปลี่ยนชื่อเป็น สามารถกด CTRL+F1 เพื่อเลือกชื่อสินค้า จากชุดข้อมูล ของ Head Office
{{{
28/9/2550

note: case พิเศษ
1. รวมใบจ่ายหลายใบ จ่ายด้วยเช็คใบเดียว
2. ชื่อบนเช็ค ไม่ตรงกับชื่อหักภาษี
3. เงื่อนไข ตามความสามารถพิเศษของ TFB
- Pickup Location
- Pickup Document
- Advice Mode
- Fax No
}}}
{{{
เงื่อนไขที่สำคัญ ก่อนใช้ CHEQUE DIRECT SYSTEM (CDS)

ใบจ่าย กรณีอ้างมาจากบิลซื้อ
ในหมวดใบจ่าย จะต้องมี ~V
เพื่อให้แยกบรรทัด VAT ออกจากค่าสินค้า

กรณี บันทึกค่าใช้จ่าย โดยไม่มีบิลซื้อ (เช่น เงินสดย่อย)
จะต้องแยกยอด VAT ออกมาเป็นบรรทัดต่างหาก 
โดยระบุข้อความ บรรทัดว่า

VAT หรือ ภาษีมูลค่าเพิ่ม

สามารถใช้ความสามารถของ inline calculate เช่น

**VAT [+7%]


ขณะเดียวกัน ถ้าใช้ Genesis จะต้องตรวจสอบด้วยว่าต้องปรับ ALI
ให้รองรับข้อความบรรทัด VAT หรือยัง
}}}
{{{
4/10/50

:::: คำสั่งพิเศษ

จะถูกตรวจหา และจัดเก็บในระหว่างการเพิ่มข้อมูล CHQ DIRECT

1. อยู่ในบรรทัดรายการ ของใบจ่าย (หรือ ได้มาจากชื่อสรุปบิลซื้อ)

2. อยู่ในข้อมูลหมวดใบจ่าย (บรรทัดชื่อ, บรรทัดหัว, บรรทัดท้าย)

3. อยู่ในข้อมูลชื่อแทนเจ้าหนี้ (ต้อง MOD เพิ่มเติม)

4. อยู่ใน __FSYS.INI

:::: คำสั่งเกี่ยวกับ วิธีการจ่ายเช็ค
{//BANK} จ่ายที่ counter
{//MAIL} ส่งทางไปรษณีย์
{//RET} คืนให้บริษัท ใช้กรณี ทำเช็ค จ่ายสรรพากร, จ่ายค่าโทรศัพท์ ฯลฯ

กรณีจ่ายที่ counter จะต้องมีการกำหนด คำสั่งต่อไปนี้ด้วย 
(อย่างน้อยควรกำหนดไว้ใน __FSYS.INI เพื่อเป็นค่า default)

{//ATnn} รหัสสาขา 

{//+RTI} กำหนดให้เก็บหลักฐาน เป็น combination R=ใบเสร็จ T=ใบกำกับภาษี I=บัตรประชาชน เช่น 
{//+} แปลว่า ไม่ต้องเก็บเอกสารใดๆ 
{//+R} เก็บเฉพาะใบเสร็จ
{//+RI} เก็บใบเสร็จ และบัตรประชาชน (กรณีจ่ายเช็คให้ บุคคลธรรมดา)
{//+RT} เก็บใบเสร็จ และใบกำกับภาษี (กรณีเจ้าหนี้ ส่ง Fax มาวางบิล หรือ ชำระค่าบริการ)

{//FAX} หรือ {//FAXnnnnnnnnn} ส่งแฟกซ์  แจ้งเตือนให้รับเช็ค ถ้าไม่มีหมายเลขโปรแกรมจะเอาเลข FAX ที่อยู่ในข้อมูลเจ้าหนี้ 

ได้คำสั่งพิเศษมาแล้ว โปรแกรมต้องเอามาตีความเพื่อเป็น code ของ KBANK อีกทีหนึ่ง
   > delivery: "CC" จ่ายเช็คที่เคาน์เตอร ์ ไม่เก็บหลักฐาน , "CR" จ่ายเช็คที่เคาน์เตอร์ เก็บหลักฐาน , "MR" ส่งไปรษณีย์ , "RC" ส่งคืนบริษัท
   > pickuploc: "RET" ใช้คู่กับ RC , "M" ใช้คู่กับ MR , or "01" - "07" สำหรับ CC หรือ CR
   > pickupdoc: "NONE" ไม่มี หรือ "B" ใบรับวางบิล , "DISR" ใบเสร็จ , "DIST" ใบกำกับภาษี , "R" ใบเสร็จ , "T" ใบกำกับภาษี , "INV" ใบแจ้งหนี้ , "ID" สำเนาบัตรประชาชน
}}}

{{{
13/10/50

1.วันที่สั่งจ่ายบนเช็ค
ใน Batch ของ CDS บังคับให้ต้องมีวันที่บนเช็คเดียวกัน เท่านั้น
ดังนั้น จึงควรระวัง กรณีที่มีเช็คจ่ายล่วงหน้า 
จะต้องแยก Batch เพื่อ ส่งไปทำเช็ค ต่างหาก

กรณีใช้ อรรถประโยชน์ คัดข้อมูลจากใบจ่าย

> ถ้าใบจ่ายนั้น มีระบุ วันทีนัด/ชำระ 
โปรแกรมจะใช้วันที่นัด/ชำระ เป็นวันที่สั่งจ่ายบนเช็ค

> ถ้าใบจ่ายนั้น ไม่มีระบุ วันที่นัด/ชำระ
โปรแกรมจะ ใช้วันที่ส่ง CDS เป็นวันที่สั่งจ่ายบนเช็คด้วย

2. ชื่อสั่งจ่ายบนเช็ค

> สามารถระบุชื่อสั่งจ่าย แตกต่างจาก ชื่อเจ้าหนี้ ในรายการ CDS ได้

> ถ้าไม่ระบุ โปรแกรมจะใช้ชื่อเจ้าหนี้ หรือ ชื่อแทนของเจ้าหนี้ (ถ้ามีระบุชื่อแทน)

> กรณีใช้ อรรถประโยชน์ คัดข้อมูลจากใบจ่าย
โปรแกรมจะใช้ชื่อสั่งจ่าย ตามข้อมูลรายการ CDS ที่เคยจ่ายไปแล้ว ที่วันที่ล่าสุด

3. การรวมยอดเพื่อจ่ายเช็คใบเดียวอัตโนมัติ
กรณี มีรายการ CDS ที่สั่งจ่ายเจ้าหนี้รายเดียวกันมากกว่า 1 รายการ ใน Batch เดียวกัน
ถ้าในรายการ CDS นั้น ไม่ได้ระบุให้แยกเช็ค
และในรายการ CDS นั้น ไม่มีรายการ หักภาษี ณ ที่จ่าย ที่จะต้องพิมพ์แนบคู่ไปกับเช็ค
โปรแกรมจะรวมยอดกับรายการ CDS อื่น ที่มีชื่อเจ้าหนี้ และชื่อสั่งจ่ายเดียวกัน
เพื่อให้ทำเช็คจ่ายเพียงใบเดียว
}}}

{{{
21/10/50

สรุปคำสั่ง __FSys.INI

CDS.AccNo=nnnnnnnn (เลขบัญชี 10 ตัว)

CDS.WTaxBranch=nn (เลขสาขาที่ออกใบหักภาษี ของบริษัท)

CDS.Charge=Y หรือ N (Y=เก็บค่าธรรมเนียมจากผู้รับเงิน N=เก็บค่าธรรมเนียมจากผู้สั่งจ่าย)

CDS.XCmd=คำสั่งพิเศษ 

CDS.UseWTax=ON หรือ OFF (เลือกว่าจะให้พิมพ์ใบหักภาษี ควบกับเช็คหรือไม่)


สรุปเกี่ยวกับคำสั่งพิเศษ

1. คำสั่งกำหนดวิธีการจ่ายเช็ค
{//RET} รับเช็คกลับมาที่บริษัท
{//MAIL} ส่ง mail ไปให้เจ้าหนี้
{//BANK} ให้เจ้าหนี้ไปรับเช็คที่ธนาคาร

2. คำสั่งกำหนดสาขาที่ให้เจ้าหนี้ไปรับเช็ค เฉพาะสำหรับ {//BANK}
{//ATxxx} ใช้เลขสาขา หรือรหัสสาขา ตามที่กำหนดจาก BANK
มี 01 - 07 และ EXP1 เช่น {//AT02}

3. คำสั่งกำหนดเอกสารที่ทาง BANK ต้องรวบรวมให้ เฉพาะสำหรับ {//BANK}
{//+xxx yyy} ให้รหัสเอกสาร ตามที่กำหนดจาก BANK
เช่น {//+DISR T}

4. คำสั่งกำหนดให้ส่ง FAX แจ้งเตือนเจ้าหนี้
{//FAX} หรือ {//FAX@} หรือ {//FAXnnnnnnnnnnn}
กรณี {//FAX} แปลว่าไม่ส่งแฟกซ์
กรณี {//FAX@} โปรแกรมจะใช้เลข Fax จากฐานข้อมูลเจ้าหนี้
}}}

{{{
คำสั่งพิเศษ ใส่ไว้ที่ไหนได้บ้าง

1. ไว้ในบรรทัดใดก็ได้ ของใบจ่าย
โปรแกรมจะ scan หาคำสั่งพิเศษ (มีทั้งหมด 4 กลุ่มคำสั่ง)
ไล่จากบรรทัดที่ 1 ลงไปเรื่อยๆ
ถ้าเจอในบรรทัดไหนก่อน ก็จะใช้คำสั่งนั้น เช่น
ถ้า ในบรรทัดที่ 1 มีคำสั่ง {//RET}
และในบรรทัดที่ 2 มีคำสั่ง {//BANK}
โปรแกรมจะเอาคำสั่ง {//RET} ไปใช้

2. ไว้ในข้อมูลหมวดใบจ่าย
ในชื่อใบจ่าย, หัวบิล1-3, ท้ายบิล 1-3
คำสั่งกลุ่มไหน ที่หลุดรอดไม่มีกำหนดไว้ตามข้างบน
โปรแกรมก็จะหาต่อใน ข้อมูลหมวดใบจ่าย

คำสั่งที่ ตรวจจับมาได้ตามข้อ 1 และ 2
จะนำมาแสดงไว้ใน field "คำสั่งCDS" ของข้อมูล CDS Transaction
ดังนั้น ผู้ใช้ อาจเปลี่ยนแปลง หรือเพิ่มเติมคำสั่งก่อน save ข้อมูล CDS Transaction อีกทีหนึ่งได้

ส่วนขั้นตอนการสร้าง TEXT File จากหัวข้อ อรรถประโยชน์
โปรแกรมจะตรวจสอบคำสั่งพิเศษเพิ่มเติมดังหนี้

1. ดูจาก Field "คำสั่งCDS"  (ซึ่งได้มาจากการประมวลผล ข้อมูลใบจ่ายและหมวดใบจ่ายตามข้างต้น)
ใช้ประโยชน์ กรณีสั่งทำเช็คเร่งด่วน (EXPRESS)

2. ดูจาก Field ชื่อสั่งจ่าย ในข้อมูล CDS Transaction
ใช้ประโยชน์กรณี เจ้าหนี้ต้องการเงื่อนไขแตกต่างจากทั่วไป เช่น ให้ส่งแฟกซ์แจ้ง หรือรับเช็คที่สาขาอื่น หรือต้องการให้ส่ง MAIL

3. ดูจาก Field คำสั่ง CDS ในข้อมูล เจ้าหนี้เพิ่มเติม
ใช้ประโยชน์ คล้ายกรณีข้อ 2

4. ดูจาก __FSys.INI
ใช้ประโยชน์ กำหนดเป็นค่า default ของระบบ
สำหรับกรณีของ CINNAMON อาจต้องตั้งเป็น
{//BANK}{//AT01}{//+R}

5. สุดท้าย ใช้ค่าที่ตั้งไว้ในโปรแกรม ได้แก่
{//RET} กำหนดให้ บริษัทรับเช็คกลับมา

*** กรณี หมายเลข Fax โดยเฉพาะเมื่อใช้ จากฐานข้อมูลเจ้าหนี้
โปรแกรม มีระบบ ตัดตัวสัญญลักษณ์ ที่ไม่เกี่ยวข้องออก อัตโนมัติ
เช่น ( ) - ดังนั้น ถึงแม้ใน ฐานข้อมูล มีการป้อนไว้เป็น (02)789-0000
โปรแกรมก็สามารถแปลงเป็น 027890000 ให้
}}}

{{{
22/10/50

เพิ่มคำสั่ง __FSYS.INI

CDS.UseMD5 = ON หรือ OFF (default ON)

คำสั่งให้คำนวณ MD5 ใส่ต่อท้าย Text File
}}}
{{{
อ้างจาก: "adm"
อ้างจาก: "jojosati"
เงื่อนไขที่สำคัญ ก่อนใช้ CHEQUE DIRECT SYSTEM (CDS)

ใบจ่าย กรณีอ้างมาจากบิลซื้อ
ในหมวดใบจ่าย จะต้องมี ~V
เพื่อให้แยกบรรทัด VAT ออกจากค่าสินค้า




ไม่เข้าใจ  ทดลองกำหนดหมวดใบจ่ายมี ~V แล้วดึงบิลซื้อมา
ไม่แยก Vat ในจอใบจ่าย ยังคงมายอดเต็ม ๆ


ขออภัยครับ ต้องใช้ ~FCV
}}}

{{{
19/11/50

แก้ไขข้อผิดพลาดของ Text File ที่จะ upload ไปให้ bank

1. BatchRef ใช้ format CHyymmddnn ตามที่ bank แนะนำ (วันที่ใช้วันที่ส่งข้อมูลให้ทำเช็ค)
2. วันที่ Effective กับ Pick Date ใช้วันที่เดียวกันคือ วันที่บนเช็ค
3. แก้ไขข้อผิดพลาดของ field ตัวเลข ทั้งหมด 
4. แก้ไข MD5 ที่ปิดท้ายไฟล์ แปลงเลขฐาน 16 ให้ใช้ตัวภาษาอังกฤษตัวเล็ก
5. คำสั่ง __FSYS.INI CDS.WTaxBranch เดิมตีความเป็นตัวเลข 
เช่น ถ้าระบุว่า CDS.WTaxBranch=1 
เมื่อแปลงใส่ text file จะเติมเลข 0 ข้างหน้าเป็น 00001 (ถ้าไม่ได้กำหนดจะเป็น 00000) 
แก้ไขเป็น รับค่า string ถ้าไม่ระบุ จะเป็น blank 
ถ้าต้องการให้มี 0 ข้างหน้าก็ต้องระบุเอง เช่น CDS.WTaxBranch=0001
}}}
{{{
5/12/2550 (วันพ่อ)
แก้ไขเพิ่มเติม 8/12/2550

เพิ่ม สำหรับ Direct Credit / Media Direct

เรื่องกำหนดเลขบัญชี
{//ACCรหัสบัญชี10ตัว} ใช้กับ direct credit โอนเงินธนาคารเดียวกัน
{//ACCรหัสบัญชี10ตัว/รหัสธนาคาร} ใช้กับ Media Direct ใช้ 3 ตัวหน้าของรหัสบัญชีเป็น เลขสาขา หรือ Direct Credit กรณีรหัสธนาคารคือ 004 = กสิกร
{//ACCรหัสบัญชีอื่นๆ ที่ไม่มาตรฐาน/รหัสธนาคาร/รหัสสาขา} ใช้กับ Media Direct ดูอ้างอิงจากไฟล์ bankcode ข้างบน

ซึ่งข้อมูล ACC นี้ ควรแนบอยู่ในข้อมูลชื่อสั่งจ่ายของเจ้าหนี้
เช่น บริษัท กขค จำกัด {//ACC011-2-12345-0/002}

เพิ่มคำสั่งเกี่ยวกับวิธีจ่ายเงิน
{//TR} จ่ายโดยการโอนเงิน ผ่าน MD หรือ DC
{//CQ} จ่ายโดยการโอนเงิน ผ่าน Cheque (CD)

และใน __FSYS.INI เพิ่มคำสั่ง
CDS.CompanyID = รหัสบริษัท (ใช้กับ DC) ทาง KBANK ต้องให้มา
CDS.CompanyName=ชื่อบัญชีของบริษัท (ใช้กับ DC)
}}}

{{{
8/12/2550

คำแนะนำ
__FSYS.INI ต้องกำหนดอย่างน้อย เพื่อเป็นค่า default ดังนี้

CDS.AccNo=เลขบัญชีของบริษัท
CDS.CompanyID=รหัสบริษัท (KBank ออกให้)
CDS.CompanyName=ชื่อบัญชีของบริษัท
CDS.XCmd={//TR}

ส่วนเลขบัญชี ควรใส่ไว้ใน ชื่อสั่งจ่าย ของ CDSTrn
{//ACCxxxxxxxxxxxxx}

ข้อจำกัด
Direct Credit ไม่สามารถระบุชื่อหักภาษี แตกต่างจากชื่อบัญชีปลายทาง
}}}

{{{
11/12/2550

แก้ไข
BatchRef ใช้ format 
TRyymmddnn สำหรับโอน KBank ด้วยกัน (Direct Credit)
TXyymmddnn สำหรับโอนต่าง ธนาคาร (Media Clearing)

note เพิ่มเติม
เกี่ยวกับ MD5 ที่ปะท้าย text file
ไม่แน่ใจว่า ทาง Direct Credit กับ Media Clearing จะ support เหมือน cheque direct รึเปล่านะครับ
ลองตรวจสอบด้วย
}}}

{{{
19/12/50

-Import files สำเร็จแล้ว

สอบถามแบงค์เพิ่มเติมได้ความว่า
-ชื่อผู้รับเงิน ไม่สนใจ ใส่แค่พอรู้เรื่องพอ, เน้นเลขที่บัญชีให้ครับ
-Upload ถ้าสำเร็จต้องเป็นตัวดำ, ถ้าสีแดงน่าจะเลขที่บัญชีผิด
-Bank ตรวจเลขบัญชีให้เฉพาะที่เป็น ธนาคารกสิกรเท่านั้น, ถ้าต่าง Bank ไม่ตรวจ
รู้ผลเมื่อโอน
}}}

{{{
19/12/50

แก้ BUG เกี่ยวกับ การดึงชื่อสั่งจ่าย อัตโนมัติ

ในระหว่างป้อนข้อมูล CDSTrn

ในการสั่งดึงข้อมูลจากใบจ่าย U_CDS2

21/12/50

แก้ไข wording จาก CHEQUE DIRECT เป็น KCash
}}}
[[Home]]
----
<<slider chkINICmdSlider TabINICmd "INI Commands">>/%<<tag "__FSys.INI" "INI Commands">>%/
<<slider chkMODSlider TabMOD "MOD Jobs">>/%<<tag "MOD" "MOD Jobs">>%/
<<slider chkModulesSlider TabModules "Modules">>
<<tag "Draft">>
----
<<slider chkListsSlider TabLists "Lists..">>
<<slider chkHelpsSlider TabHelps "Author..">>
::Default
/***
|Name|MatchTagsPlugin|
|Source|http://www.TiddlyTools.com/#MatchTagsPlugin|
|Documentation|http://www.TiddlyTools.com/#MatchTagsPluginInfo|
|Version|2.0.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|'tag matching' with full boolean expressions (AND, OR, NOT, and nested parentheses)|
!!!!!Documentation
> see [[MatchTagsPluginInfo]]
!!!!!Revisions
<<<
2010.03.02 2.0.3 added %6 format (tags)
| please see [[MatchTagsPluginInfo]] for additional revision details |
2008.02.28 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.MatchTagsPlugin= {major: 2, minor: 0, revision: 3, date: new Date(2010,3,2)};

// store.getMatchingTiddlers() processes boolean expressions for tag matching
//    sortfield (optional) sets sort order for tiddlers - default=title
//    tiddlers (optional) use alternative set of tiddlers (instead of current store)
TiddlyWiki.prototype.getMatchingTiddlers = function(tagexpr,sortfield,tiddlers) {

	var debug=config.options.chkDebug; // abbreviation
	var cmm=config.macros.matchTags; // abbreviation
	var r=[]; // results are an array of tiddlers
	var tids=tiddlers||store.getTiddlers(sortfield||"title");
	if (tiddlers && sortfield) store.sortTiddlers(tids,sortfield);
	if (debug) displayMessage(cmm.msg1.format([tids.length]));

	// try simple lookup to quickly find single tags or tags that
	// contain boolean operators as literals, e.g. "foo and bar"
	for (var t=0; t<tids.length; t++)
		if (tids[t].isTagged(tagexpr)) r.pushUnique(tids[t]);
	if (r.length) {
		if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
		return r;
	}
	
	// convert expression into javascript code with regexp tests,
	// so that "tag1 AND ( tag2 OR NOT tag3 )" becomes
	// "/\~tag1\~/.test(...) && ( /\~tag2\~/.test(...) || ! /\~tag3\~/.test(...) )"

	// normalize whitespace, tokenize operators, delimit with "~"
	var c=tagexpr.trim(); // remove leading/trailing spaces
	c = c.replace(/\s+/ig," "); // reduce multiple spaces to single spaces
	c = c.replace(/\(\s?/ig,"~(~"); // open parens
	c = c.replace(/\s?\)/ig,"~)~"); // close parens
	c = c.replace(/(\s|~)?&&(\s|~)?/ig,"~&&~"); // &&
	c = c.replace(/(\s|~)AND(\s|~)/ig,"~&&~"); // AND
	c = c.replace(/(\s|~)?\|\|(\s|~)?/ig,"~||~"); // ||
	c = c.replace(/(\s|~)OR(\s|~)/ig,"~||~"); // OR
	c = c.replace(/(\s|~)?!(\s|~)?/ig,"~!~"); // !
	c = c.replace(/(^|~|\s)NOT(\s|~)/ig,"~!~"); // NOT
	c = c.replace(/(^|~|\s)NOT~\(/ig,"~!~("); // NOT(
	// change tag terms to regexp tests
	var terms=c.split("~"); for (var i=0; i<terms.length; i++) { var t=terms[i];
		if (/(&&)|(\|\|)|[!\(\)]/.test(t) || t=="") continue; // skip operators/parens/spaces
		if (t==config.macros.matchTags.untaggedKeyword)
			terms[i]="tiddlertags=='~~'"; // 'untagged' tiddlers
		else
			terms[i]="/\\~"+t+"\\~/.test(tiddlertags)";
	}
	c=terms.join(" ");
	if (debug) { displayMessage(cmm.msg2.format([tagexpr])); displayMessage(cmm.msg3.format([c])); }

	// scan tiddlers for matches
	for (var t=0; t<tids.length; t++) {
	 	// assemble tags from tiddler into string "~tag1~tag2~tag3~"
		var tiddlertags = "~"+tids[t].tags.join("~")+"~";
		try { if(eval(c)) r.push(tids[t]); } // test tags
		catch(e) { // error in test
			displayMessage(cmm.msg2.format([tagexpr]));
			displayMessage(cmm.msg3.format([c]));
			displayMessage(e.toString());
			break; // skip remaining tiddlers
		}
	}
	if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
	return r;
}
//}}}
//{{{
config.macros.matchTags = {
	msg1: "scanning %0 input tiddlers",
	msg2: "looking for '%0'",
	msg3: "using expression: '%0'",
	msg4: "found %0 tiddlers matching '%1'",
	noMatch: "no matching tiddlers",
	untaggedKeyword: "-",
	untaggedLabel: "no tags",
	untaggedPrompt: "show tiddlers with no tags",
	defTiddler: "MatchingTiddlers",
	defTags: "",
	defFormat: "[[%0]]",
	defSeparator: "\n",
	reportHeading: "Found %0 tiddlers tagged with: '{{{%1}}}'\n----\n",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var mode=params[0]?params[0].toLowerCase():'';
		if (mode=="inline")
			params.shift();
		if (mode=="report" || mode=="panel") {
			params.shift();
			var target=params.shift()||this.defTiddler;
		}
		if (mode=="popup") {
			params.shift();
			if (params[0]&&params[0].substr(0,6)=="label:") var label=params.shift().substr(6);
			if (params[0]&&params[0].substr(0,7)=="prompt:") var prompt=params.shift().substr(7);
		} else {
			var fmt=(params.shift()||this.defFormat).unescapeLineBreaks();
			var sep=(params.shift()||this.defSeparator).unescapeLineBreaks();
		}
		var sortBy="+title";
		if (params[0]&&params[0].substr(0,5)=="sort:") sortBy=params.shift().substr(5);
		var expr = params.join(" ");
		if (mode!="panel" && (!expr||!expr.trim().length)) return;
		if (expr==this.untaggedKeyword)
			{ var label=this.untaggedLabel; var prompt=this.untaggedPrompt };
		switch (mode) {
			case "popup": this.createPopup(place,label,expr,prompt,sortBy); break;
			case "panel": this.createPanel(place,expr,fmt,sep,sortBy,target); break;
			case "report": this.createReport(target,this.defTags,expr,fmt,sep,sortBy); break;
			case "inline": default: this.createInline(place,expr,fmt,sep,sortBy); break;
		}
	},
	formatList: function(tids,fmt,sep) {
		var out=[];
		for (var i=0; i<tids.length; i++) { var t=tids[i];
			var title=t.title;
			var who=t.modifier;
			var when=t.modified.toLocaleString();
			var text=t.text;
			var first=t.text.split("\n")[0];
			var desc=store.getTiddlerSlice(t.title,"description");
			desc=desc||store.getTiddlerSlice(t.title,"Description");
			desc=desc||store.getTiddlerText(t.title+"##description");
			desc=desc||store.getTiddlerText(t.title+"##Description");
			// modify by Sathit, March, 2010
			if (!desc) desc = store.getTiddlerText("MatchTagsDescription") ;
                        if (desc && (desc.substr(0,2)=="::" || desc.substr(0,2)=="##")) desc = store.getTiddlerText(t.title+desc);
			//var tags=t.tags.length?'[['+t.tags.join(']] [[')+']]':'';
			var tags=t.tags.length?'<<tag "'+t.tags.join('">><<tag "')+'">>':'';
			out.push(fmt.format([title,who,when,text,first,desc,tags]));
		}
		return out.join(sep);
	},
	createInline: function(place,expr,fmt,sep,sortBy) {
		wikify(this.formatList(store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy),fmt,sep),place);
	},
	createPopup: function(place,label,expr,prompt,sortBy) {
		var btn=createTiddlyButton(place,
			(label||expr).format([expr]),
			(prompt||config.views.wikified.tag.tooltip).format([expr]),
			function(ev){ return config.macros.matchTags.showPopup(this,ev||window.event); });
		btn.setAttribute("sortBy",sortBy);
		btn.setAttribute("expr",expr);
	},
	showPopup: function(here,ev) {
		var p=Popup.create(here); if (!p) return false;
		var tids=store.getMatchingTiddlers(here.getAttribute("expr"));
		store.sortTiddlers(tids,here.getAttribute("sortBy"));
		var list=[]; for (var t=0; t<tids.length; t++) list.push(tids[t].title);
		if (!list.length) createTiddlyText(p,this.noMatch);
		else {
			var b=createTiddlyButton(createTiddlyElement(p,"li"),
				config.views.wikified.tag.openAllText,
				config.views.wikified.tag.openAllTooltip,
				function() {
					var list=this.getAttribute("list").readBracketedList();
					story.displayTiddlers(null,tids);
				});
			b.setAttribute("list","[["+list.join("]] [[")+"]]");
			createTiddlyElement(p,"hr");
		}
		var out=this.formatList(tids," &nbsp;[[%0]]&nbsp; ","\n"); wikify(out,p);
		Popup.show();
		ev.cancelBubble=true;
		if(ev.stopPropagation) ev.stopPropagation();
		return false;
	},
	createReport: function(target,tags,expr,fmt,sep,sortBy) {
		var tids=store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy);
		if (!tids.length) { displayMessage('no matches for: '+expr); return false; }
		var msg=config.messages.overwriteWarning.format([target]);
		if (store.tiddlerExists(target) && !confirm(msg)) return false;
		var out=this.reportHeading.format([tids.length,expr])
		out+=this.formatList(tids,fmt,sep);
		store.saveTiddler(target,target,out,config.options.txtUserName,new Date(),tags,{});
		story.closeTiddler(target); story.displayTiddler(null,target);
	},
	createPanel: function(place,expr,fmt,sep,sortBy,tid) {
		var s=createTiddlyElement(place,"span"); s.innerHTML=store.getTiddlerText("MatchTagsPlugin##html");
		var f=s.getElementsByTagName("form")[0];
		f.expr.value=expr; f.fmt.value=fmt; f.sep.value=sep.escapeLineBreaks();
		f.tid.value=tid; f.tags.value=this.defTags;
	}
};
//}}}
/***
//{{{
!html
<form style='display:inline;white-space:nowrap'>
<input type='text'    name='expr' style='width:50%' title='tag expression'><!--
--><input type='text'    name='fmt'  style='width:10%' title='list item format'><!--
--><input type='text'    name='sep'  style='width:5%'  title='list item separator'><!--
--><input type='text'    name='tid'  style='width:12%' title='target tiddler title'><!--
--><input type='text'    name='tags' style='width:10%' title='target tiddler tags'><!--
--><input type='button'  name='go'   style='width:8%'  value='go' onclick="
	var expr=this.form.expr.value;
	if (!expr.length) { alert('Enter a boolean tag expression'); return false; }
	var fmt=this.form.fmt.value;
	if (!fmt.length) { alert('Enter the list item output format'); return false; }
	var sep=this.form.sep.value.unescapeLineBreaks();
	var tid=this.form.tid.value;
	if (!tid.length) { alert('Enter a target tiddler title'); return false; }
	var tags=this.form.tags.value;
	config.macros.matchTags.createReport(tid,tags,expr,fmt,sep,'title');
	return false;">
</form>
!end
//}}}
***/
//{{{
// SHADOW TIDDLER for displaying default panel input form
config.shadowTiddlers.MatchTags="<<matchTags panel>>";
//}}}
//{{{
// TWEAK core filterTiddlers() for enhanced boolean matching in [tag[...]] syntax:
// use getMatchingTiddlers instead getTaggedTiddlers
var fn=TiddlyWiki.prototype.filterTiddlers;
fn=fn.toString().replace(/getTaggedTiddlers/g,"getMatchingTiddlers");
eval("TiddlyWiki.prototype.filterTiddlers="+fn);
//}}}
//{{{
// REDEFINE core handler for enhanced boolean matching in tag:"..." paramifier
// use filterTiddlers() instead of getTaggedTiddlers() to get list of tiddlers.
config.paramifiers.tag = {
	onstart: function(v) {
		var tagged = store.filterTiddlers("[tag["+v+"]]");
		story.displayTiddlers(null,tagged,null,false,null);
	}
};
//}}}
|Default|@@""" PriceDigit = 2 """@@|
จำนวนหลักหลังจุดทศนิยม ของ field __ราคาต่อหน่วย__ของสินค้า
!usage
{{{[img[QInf-Stock.jpg]]}}}
[img[QInf-Stock.jpg]]
!notes
//none//
!type
image/jpeg
!file
./img/QInf-Stock.jpg
!url

!data
data:image/jpeg;base64,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9UqGs7gFjhQYm5OM8cegNAFarV7/AMe1j/1wP/ox6RtOvUGWs7hRkDJiYck4Hb1qTUopIYrKOZGjdYDlWGCP3j9qAHeHfvCu7sf9WK4Tw794V3dj/qxQB5rRU0FndXCF7e2mlUHBKIWGfwqT+zL/AP58bn/v03+FAFWirK6desMpZ3DAEjIibqDg9vWhdOvWLBbO4JU4YCJuDjPPHoRQBWoqyNOvd5QWdxuABI8psgHp29j+VB069DhPsdwGIJA8pskDr29x+dAFairLadeqVDWdwCxwoMTcnGeOPQGhtOvUGWs7hRkDJiYck4Hb1oArUVZfTr1EZ3s7hVUZJMTAAflS/wBmX/8Az43P/fpv8KAKtFWU069dFdLO4ZWGQRExBH5ULp16wylncMASMiJuoOD29aAK1FWV069YsFs7glThgIm4OM88ehFA0693lBZ3G4AEjymyAenb2P5UAVqKsnTr0OE+x3AYgkDymyQOvb3H50Np16pUNZ3ALHCgxNycZ449AaAK1FWW069QZazuFGQMmJhyTgdvWh9OvURnezuFVRkkxMAB+VAFairX9mX/APz43P8A36b/AApE069dFdLO4ZWGQRExBH5UAVqKsrp16wylncMASMiJuoOD29aF069YsFs7glThgIm4OM88ehFAFairI0693lBZ3G4AEjymyAenb2P5UHTr0OE+x3AYgkDymyQOvb3H50AVqKstp16pUNZ3ALHCgxNycZ449AaG069QZazuFGQMmJhyTgdvWgCtRVl9OvURnezuFVRkkxMAB+VL/Zl//wA+Nz/36b/CgCrRVlNOvXRXSzuGVhkERMQR+VC6desMpZ3DAEjIibqDg9vWgCtRVldOvWLBbO4JU4YCJuDjPPHoRQNOvd5QWdxuABI8psgHp29j+VAFairJ069DhPsdwGIJA8pskDr29x+dDadeqVDWdwCxwoMTcnGeOPQGgCtRVltOvUGWs7hRkDJiYck4Hb1ofTr1EZ3s7hVUZJMTAAflQBWoq1/Zl/8A8+Nz/wB+m/wpE069dFdLO4ZWGQRExBH5UAVqKsrp16wylncMASMiJuoOD29aF069YsFs7glThgIm4OM88ehFAFairI0693lBZ3G4AEjymyAenb2P5UHTr0OE+x3AYgkDymyQOvb3H50AVqKstp16pUNZ3ALHCgxNycZ449AaG069QZazuFGQMmJhyTgdvWgCtRVl9OvURnezuFVRkkxMAB+VL/Zl/wD8+Nz/AN+m/wAKAKtFWU069dFdLO4ZWGQRExBH5ULp16wylncMASMiJuoOD29aAK1FWV069YsFs7glThgIm4OM88ehFA0693lBZ3G4AEjymyAenb2P5UAVqKsnTr0OE+x3AYgkDymyQOvb3H50Np16pUNZ3ALHCgxNycZ449AaAK1FWW069QZazuFGQMmJhyTgdvWh9OvURnezuFVRkkxMAB+VAFairX9mX/8Az43P/fpv8KRNOvXRXSzuGVhkERMQR+VAFairK6desMpZ3DAEjIibqDg9vWhdOvWLBbO4JU4YCJuDjPPHoRQBWoqyNOvd5QWdxuABI8psgHp29j+VB069DhPsdwGIJA8pskDr29x+dAFairLadeqVDWdwCxwoMTcnGeOPQGhtOvUGWs7hRkDJiYck4Hb1oArUVZfTr1EZ3s7hVUZJMTAAflS/2Zf/APPjc/8Afpv8KAKtFWU069dFdLO4ZWGQRExBH5ULp16wylncMASMiJuoOD29aAK1FWV069YsFs7glThgIm4OM88ehFA0693lBZ3G4AEjymyAenb2P5UAVqKsnTr0OE+x3AYgkDymyQOvb3H50Np16pUNZ3ALHCgxNycZ449AaAK1FWW069QZazuFGQMmJhyTgdvWh9OvURnezuFVRkkxMAB+VAFairX9mX//AD43P/fpv8KRNOvXRXSzuGVhkERMQR+VAFairK6desMpZ3DAEjIibqDg9vWhdOvWLBbO4JU4YCJuDjPPHoRQBWoqyNOvd5QWdxuABI8psgHp29j+VB069DhPsdwGIJA8pskDr29x+dAFairLadeqVDWdwCxwoMTcnGeOPQGhtOvUGWs7hRkDJiYck4Hb1oArUVZfTr1EZ3s7hVUZJMTAAflS/wBmX/8Az43P/fpv8KAKtFWU069dFdLO4ZWGQRExBH5ULp16wylncMASMiJuoOD29aAK1FWV069YsFs7glThgIm4OM88ehFA0693lBZ3G4AEjymyAenb2P5UAVqKsnTr0OE+x3AYgkDymyQOvb3H50Np16pUNZ3ALHCgxNycZ449AaAK1FWW069QZazuFGQMmJhyTgdvWop4Jrdwk8TxMRkB1KnH40AW/Dv3hXd2P+rFcJ4d+8K7ux/1YoA8/k/5BNv/ANd5f/QY6+c/FP8AyM+rf9fk3/oZr6Mk/wCQTb/9d5f/AEGOvnPxT/yM+rf9fk3/AKGa+l4e/iz9DGrsZlFdfqOlxXvh7wy82o2tpI+nSRW8crj944u7g/MekaYIG9sDcwH3Q7JreIJNPjuPHR1W1urmH/hJIwqW1wsDBs3nO5kcEYzxj059fpHiVslf/h0v6+4xsedUV6LYGVvjH4bOjpdRgrpZVEcvIsP2aHeGZQMjZu3HABGcgCuMTVNb0nV7qeO/1Cx1JmdLmRZnjmLbsuHOQ2dw5B7irhWc9Euie/cLWM2ivRb3VNQv/jjbW99f3VzDaeJNlvHNMzrCv2kDCAnCjAHA9BWb48l8QSWFv/adl4ttbMS8/wBt3ck8bSYO3bmNAGxv9SQe2DmIYhuUYtWur7/1cdjjKKK7O+/tr+x1/wCEe87/AIRr7DH9o24+y+d5S+d5u75fN83dt3/P/qtnHl1tOpyNLv30/piSOMor0jwnFpKR+E9MuL29gTW8fbLOG0SSG93XUkQ8xzIpGFQBcKfLI3rhiTWFb6Jq2seA9N/sjTL2/wDJ1O88z7LbvLszFa4ztBxnB/I1isTHmaemtvz/AMgscpRXX/DiDW7bxTfW+mRahDexadfJLHbq6yowgkChgOQRL5eAf4tvfFSfC57uOfXm0+DU57kaYNkelzGK5P8ApNvnYwViOM5+U8Z+tVUr8nNZbW693+AJHGUV6Yk8sXjjT7m7l1Cwu10W9edp2MmoW7CG6wZWOwvIFCspIT5DGOgDGpcLb63r3hGzu7y91+0vL5Fk1K8ykkiO0StbHDsy+XhjjcOZSQMMrvmsVqk10v8An5W6dx2PPqK7bWL62vPDMmq2WraheX+najbR2889olo1ojJM2yLy5GwgMSlVGAmPlA3NUHi/xDrd54e8P293rGoTw3WnM88cty7LMwu7gAsCcMQFXk/3R6CtI1pNpJdbde1+3+QrHIUV1ep/2t/wq3RPO+2/2d/ad35e/f5P3IduO33vPx7+Z/tVraZ9r87TPs/nf8IT5Vt/ae3P2XOxPtPm/wDTXfv25/ef6ry/+WVJ4i0b26vr2f5vsFjz6iuv1Gaym8PeGdP1EJAj6dI8N6qZaBzd3A+fAy8ZwMjkr95c/Mj5vxA/5HzxF/2E7n/0a1XCtzS5bW3/AAdgtYwqK6v4e3f2GPxFcf2he6bs0wf6TZLumjzdW4+Ub065wfmHBPXpV/TL/wDt/wAWxR2JvdRuV0e+tzc3Ef8ApN7Iba4ILKGY7gHWMDcxwi9PuiZ13Fy00X+V+1vx+QWOForpNE8MX0Hi3QbHxHpF7aW1/fQwlLmGSHzUMihwCcHo3bpkVpaxfW154Zk1Wy1bULy/07UbaO3nntEtGtEZJm2ReXI2EBiUqowEx8oG5qcq6Uko6/8AB0/r9QscTRXX+L/EOt3nh7w/b3esahPDdaczzxy3LsszC7uACwJwxAVeT/dHoK6HxTL4g/4R6GOwsvFv2P8Asez3XEN3J/Z/l/ZYvMzEI8bcbgfnxnJPpWbxElZNLVvr2duw7Hl9FFdX4b/tb+wV/wCEO+2/2z9qk+2f2fv+0fZ9sflY2/Ns3ebu28Z2b+fLroqT5Ff/AIYSOUorvvCl41lpGvNd69daA8urWcct3pSK6glbrIxE6jy+M/JkfKMA8Vi+IPsNx4ruv7ZkvbGNYox5sVvHcSXDiNB5zDzFU+bgylg7ZL8Fs7qyjXvNwtt6+Xl59Asc3RXUeGbPRJPFMaw3F1dWUVnc3DPc2SKyPHBLIpEXmMrgFFOGYBuQRjrpanFour22iX+o61ezLPdXcN1qN7bmOZ1jjheNG2NKTzIVEhDEBgMFUUUSxCjNRs/ufn5eQWOFortvGRjl8FaRJHqun3UcWo3ccEFkk6RwoY7c7EEiKcKRkkkljJuyzFyLeqPrTeDtQTxBBqcSrEhglu5g9hI3nptWzQKERvLJIZGYeWsgUbWysrEaRdt3b8bdtR2PPqKKK6yQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiivUPBj3a6RocdtBqcmnyZ+2z2kxTT4P37hvtsYUiTCbWfc6ZiKLwBuOFet7GPNa/4DSueX0V1/gWTX47eU6Ra67c2m4iRNCuPImD4XBlZEdimM7QwxnftOd+Z9OOqxeMNb/4RtLq7t1vJBIPDri3lePc+0xFQ7LDnBIG5fuAnOw1Mq/K5Ky08/6sFjiaK6vxLpv23xNeXFzL9ltIIrdrydl3SRSNCpMbDI8y4LBww+Us6yMwQBiuM9015q9qNJ09E8tkjtbZYlnZzuyofK/vXYnnIwc4ACgKLhV50mu1/QLGbRXSeP7fyfiPrsWoLNbRtqczORFlxG0hYMqkjOVII5AORzzms3U4NEit1OlahqFzNuwyXNikChcHkMsrknOOMevPq4VVKMX3/rcLWM2iuz8Xf215N/8AYvO/4RDzT/Z+7H2Xyt/7vyt3Hm4+9t/ef63fz5lR+L/D2t3E8GpW+j6hLYDSbFzdJbO0QVbOLcd4GMDByc8YNZwxCdr2V/P009dQschRXotr4gi0bw94W+06tq6wpZvLJpMEYNpeqLu4ykpMgADgbW+Rvl7N0rC8I297ceGvF62to80K6dE8jpBvKFbmFvv4yo2iRiMgEISc7chKu7NtWSdvxt2/ruFjl6KKK6hBRRRQBp+Fv+Rn0n/r8h/9DFfRl7/x7WP/AFwP/ox6+c/C3/Iz6T/1+Q/+hivoy9/49rH/AK4H/wBGPXyHEP8AFh6G9LYl8O/eFd3Y/wCrFcJ4d+8K7ux/1Yr5o2PP5P8AkE2//XeX/wBBjr5z8U/8jPq3/X5N/wChmvoyT/kE2/8A13l/9Bjr5z8U/wDIz6t/1+Tf+hmvpeHv4s/Qxq7GZRXX6jpcV74e8MvNqNraSPp0kVvHK4/eOLu4PzHpGmCBvbA3MB90Oya3iCTT47jx0dVtbq5h/wCEkjCpbXCwMGzec7mRwRjPGPTn1+keJWyV/wDh0v6+4xsedUV6LYGVvjH4bOjpdRgrpZVEcvIsP2aHeGZQMjZu3HABGcgCuMTVNb0nV7qeO/1Cx1JmdLmRZnjmLbsuHOQ2dw5B7irhWc9Euie/cLWM2ivRb3VNQv8A4421vfX91cw2niTZbxzTM6wr9pAwgJwowBwPQVm+PJfEElhb/wBp2Xi21sxLz/bd3JPG0mDt25jQBsb/AFJB7YOYhiG5Ri1a6vv/AFcdjjKKK7O+/tr+x1/4R7zv+Ea+wx/aNuPsvneUvnebu+XzfN3bd/z/AOq2ceXW06nI0u/fT+mJI4yivSPCcWkpH4T0y4vb2BNbx9ss4bRJIb3ddSRDzHMikYVAFwp8sjeuGJNYVvomrax4D03+yNMvb/ydTvPM+y27y7MxWuM7QcZwfyNYrEx5mnprb8/8gscpRXX/AA4g1u28U31vpkWoQ3sWnXySx26usqMIJAoYDkES+XgH+Lb3xUnwue7jn15tPg1Oe5GmDZHpcxiuT/pNvnYwViOM5+U8Z+tVUr8nNZbW693+AJHGUV6Yk8sXjjT7m7l1Cwu10W9edp2MmoW7CG6wZWOwvIFCspIT5DGOgDGpcLb63r3hGzu7y91+0vL5Fk1K8ykkiO0StbHDsy+XhjjcOZSQMMrvmsVqk10v+flbp3HY8+orttYvra88MyarZatqF5f6dqNtHbzz2iWjWiMkzbIvLkbCAxKVUYCY+UDc1QeL/EOt3nh7w/b3esahPDdaczzxy3LsszC7uACwJwxAVeT/AHR6CtI1pNpJdbde1+3+QrHIUV1ep/2t/wAKt0Tzvtv9nf2nd+Xv3+T9yHbjt97z8e/mf7Va2mfa/O0z7P53/CE+Vbf2ntz9lzsT7T5v/TXfv25/ef6ry/8AllSeItG9ur69n+b7BY8+orr9RmspvD3hnT9RCQI+nSPDeqmWgc3dwPnwMvGcDI5K/eXPzI+b8QP+R88Rf9hO5/8ARrVcK3NLltbf8HYLWMKiur+Ht39hj8RXH9oXum7NMH+k2S7po83VuPlG9OucH5hwT16Vf0y//t/xbFHYm91G5XR763NzcR/6TeyG2uCCyhmO4B1jA3McIvT7omddxctNF/lftb8fkFjhaK6TRPDF9B4t0Gx8R6Re2ltf30MJS5hkh81DIocAnB6N26ZFaWsX1teeGZNVstW1C8v9O1G2jt557RLRrRGSZtkXlyNhAYlKqMBMfKBuanKulJKOv/B0/r9QscTRXX+L/EOt3nh7w/b3esahPDdaczzxy3LsszC7uACwJwxAVeT/AHR6Cuh8Uy+IP+EehjsLLxb9j/sez3XEN3J/Z/l/ZYvMzEI8bcbgfnxnJPpWbxElZNLVvr2duw7Hl9FFdX4b/tb+wV/4Q77b/bP2qT7Z/Z+/7R9n2x+Vjb82zd5u7bxnZv58uuipPkV/+GEjlKK77wpeNZaRrzXevXWgPLq1nHLd6UiuoJW6yMROo8vjPyZHyjAPFYviD7DceK7r+2ZL2xjWKMebFbx3Elw4jQecw8xVPm4MpYO2S/BbO6so17zcLbevl5efQLHN0V1Hhmz0STxTGsNxdXVlFZ3Nwz3NkisjxwSyKRF5jK4BRThmAbkEY66WpxaLq9tol/qOtXsyz3V3Ddaje25jmdY44XjRtjSk8yFRIQxAYDBVFFEsQozUbP7n5+XkFjhaK7bxkY5fBWkSR6rp91HFqN3HBBZJOkcKGO3OxBIinCkZJJJYybssxci3qj603g7UE8QQanEqxIYJbuYPYSN56bVs0ChEbyySGRmHlrIFG1srKxGkXbd2/G3bUdjz6it3Uv8AkVNL/s//AI9fm+37P+fvzJdm/v8A6nbsz8v+s28+ZXX6dpcUnxD8LTtqNrHdMukSxWzOMsiwQbst0Vzg7UPLBW6ExiRzxCgm2u/4CseZ0VrWFnb2domp6tHvifP2W0JKm6IOCxI5WIEEFhgsQVUghmj2dDm1i40hpvCQuhrcl5K98NLQpMICsZj2rGARHv8ANyEAUHZu/wCWdaTq8u339P6/XT0LHIUVreK/sn9uSfYfJ2+VD5vkY8vz/KTztu35dvm78bflx935cUeFPsn9uRfbvJ2+VN5Pn48vz/Kfyd275dvm7M7vlx975c1XP7nPbpcDJorutJ/4SX/hPPCn/CV/bfP/ALTg8r+0M/aNvmx9d/7zZn7uflzv287qg8eS+IJLC3/tOy8W2tmJef7bu5J42kwdu3MaANjf6kg9sHOKr3mo2Wvn6/fsFjjKK9Q+IuofaH8VIusanrOy+khaxukxHpmJ1ImTMjZXhoQQq4DkHbuVXwtT8UeIJ/Aen+frupy/ab69hm33ch82MRW2EbJ5X5m4PHzH1NTTxEqkYtR3ffyv2G1Y4yit3wv/AMe2qfbf+QT9lk87f937R5b/AGbHff5mMbedvmZ+TfWFXSpXk12/r+vkSFFFFWAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAafhb/kZ9J/6/If8A0MV9GXv/AB7WP/XA/wDox6+c/C3/ACM+k/8AX5D/AOhivoy9/wCPax/64H/0Y9fIcQ/xYehvS2JfDv3hXd2P+rFcJ4d+8K7ux/1Yr5o2PP5P+QTb/wDXeX/0GOqtWpP+QTb/APXeX/0GOqtABRV+y+0f2TefZvN+/H5nl5+5tkznHajSWnHmrbpOS2MvbHEide3Ur6jjkLyKAKFFaYjlae/hyZp3hUABfnY7kJBA/iABz15B69altg0F1ZpIXhkitJt+Bh4z+9PTjnBB7dqAMeitaC6WfU9PUSzTslwpMswwxBZcL1PAwT1/iP4x6q140SefFqEcYb/l6kLKT2xlRz1oAzaK3NYm3G/AuZ7nErKYpB8sHzj5hyeOq9B15xkA1Z768bSYd11Od8sqtmQ/MNqcH25P50AZtFX4PtH9hXW3zfJ8+POM7ejZ9uu39PanadeXUVndpHczIscIKBXICnzE6enU/nQBnUVsaOzujPCztdM7FyC5JHy43bfm2/f6d9ue1NlKG/mEKuLlY8RGTHmNJuByQOA+0keuRn7xoAyaKtXH237XH5/m/auNuf8AWZzxnvn0zzjHbFXpWlTxHetJneonI3jPGxscHqMY/CgDHora0vyj5Lw/JuvrfdHz8h+foe49O/Y+prQtFLZ30q4jk8kB0AwD+8T5h6e4/LjgAGdRW1tt9v2XzZdv2XzPJ8sbN/lb927dnOe+PbpSwzqusWCGFC4FuquR0BVM8dz6Htk+2ADEorSg+0/ZYf7O3bdp+0bfu7tx+/njbtx1+Xr70+4e2W02IubV7qbYwHzKMJtIzz07Hr9cEAGVRWjftFHeeVLh4mhhG9ByMRrhlzj8jjPscEVDDNBcRiIlnJBiaPPzc8Fe/X8c8daAIaKu6z5n2799u8zyot+/rny1zn3qlQAVeTR75rUXJgKwFGcOfQAnp1GccfUetJeW+zT7GdQoDoynHBJDtz78Y+nGcZGZkkWXRZlaC1iEIUK6p+8dtw6k57ZPbpxwCKAMyitixto5ILCRbcMiTA3DlSwA3cknGAuMZBPvgAkmhp6q0wO0SOpBWIj/AFnsP9r0BBB9+hAK1FbdtZRG81CKEQq0MxCCUbgqDfk89gQpJP05ztNG6cW15vjiiy0UbYZAVDMikkL07njGBnjtQBSorRMa/wBrQqkSHekblTwMsgJwMepJAwewwelGrQwwIFhCYNxKUKsGzH8u3nuOv4g980AZ1FWtQ/5dv+Pb/UL/AKj8fvf7XrVWgDSg0i6Ng909viNkJRmJGMAtuwO2FI5x94Vm1rIIv7EM6RCGRQ0RkB+8cpx+IZie/B528U7TrZzbWsnlwvbSSbZyIgxVc/MWfkrgfTAwRznABTsdLvb9Ge0gMiocE5CjP41UdWR2R1KspwQRgg1paZHbJZtdTiFnSQKBIGYD0yARxn/eJwcD5TT2t1kl1S1WMyyxOWSV2+biQKSx+hJzwOpOeMAGbbwvcTJDCAXc4UFguT9TRPC0DhHID4+ZR1Q+h9/5fXIrW+yxJqt6Q0CoFMkTbQyKGkUD5Tx0JAzxyDnGDVO8ZYpLaZUhdnjLEhMIxDuoO3AHQDjHbkdaAKNFWr/BS1l2qryxFn2qFBIdh0HA4A6VVoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoq1pH/ACFrP/run/oQqxfzeZYKRcz3gLj55hgwkA/L1P3uD6fL3wcAGbRWtrt8z3V1brJdACZgyvPuQgE9FwMc470v+kyaf/y3hiWL/et3GPyVuPclz2NAGRRW1YtbifRxJFK0h27WWQBR++bGRtOfzrFoAKKKKACiiigAq1e/8e1j/wBcD/6MeqtWr3/j2sf+uB/9GPQBL4d+8K7ux/1YrhPDv3hXd2P+rFAHn8n/ACCbf/rvL/6DHXh3iH/kP6j/ANfUv/oZr3ZLW4uNJh+zwSy7Z5M7ELY+WP0rwnxD/wAh/Uf+vqX/ANDNcWL+FH0eQfxJ+hQooq7psWmSeZ/al3d22MbPs9qs27rnO6RMdvX8O/Aj6tvlVylRWnYLbJ4js1sZoZrcXEW19SiEcR5GfNUMwCZznk8flWhp8MUvjW8M8djLHA13cMlqoNu3lpJJiMHjb8vy5DL0yrDKlqJnKqo3dulzCuLSe2itpZk2pdRmWI5B3KHZM+3zIw59KhrppAmqWWiXlxFp0VxcajLbSO0S20BjUQFfMEQUAAyPlh82D14GL/iqwuNMtZzren24ntr+FbXNgtkLiLbIZQRGF3gERBipYKT8rYYFq5DNV7NJ76/nbT+l3OKorvPEGhQNpOqXlpbW9n5q2N/BHK6iQxNbsZiuAAF8yRRnCoWARfmCpXB0pR5S6NZVVdf1pcKK3LO10FvCt3PcXlwmqLNGI4xApGCsvA/eDKkhNzbcqcAA5pnhj/mK/wDIJ/5B03/IS/D/AFP/AE2/u/jS5RuqrNpbGNWhomialrs88GkWj3csELTvGhG7YpAJAJ+Y5I4GSc8Ctbwkml3Gl6tFqdtCPskcd4twwZjgTRIY9qkE5DsAAyDLfMeFZNKDT7OfxpcfZBaWELadFeKLiFLjYzwxO2yM7Yycu2dwWNF3thQgIpQ2ZjUxHLzRSs116dO3qcjqOnXemTrBqED205XcYpOHQZONy9VPGcEA4IPQgmrXR+KoLH7To9wkqeVe2vmzzW1qsWf38qZEI2qrBEUFVIUsp+Y53F/iewgtfDmizx2sMUjyTw/aIGJjuo0ERWRcgHku+d2WDblO0KEROO5cK1+VPd3/AAv/AJHM0UV2vxH8Qy3Or6vpsd1rIVb+VJI59SMtuyq7cLFsG0ZAI5OMd+tJJWbLnOUZxile/wCG3+ZxVFdzpLav/wAI7PHqEOojTTZymKcy501R5J2KY1XYZC/AO8ESkEgsCDz+lf8AIta3/wAgn/lh/wAfX/H198/8e/8A7P8A7OKfLYiNa99Nmlv3ditpOi3+rpcNp8SSi1UPNmVEKITjeQxHygn5m6KOSQOapTosU8kaSpMqMVEiAhXAPUZAOD7gH2rqdGjitPB51GKfToLpridSLy0juDMEWAqqiRWC8yN90ZJZcjaCyWZNItJr3xhotjpqGWxmeW0l8zBiRLlIyGZuiqjMckgAbi27ClK5NCPrFpO+3/BSd/v6dDiqK7ybTNNTxrrunTRWLWd9DdXNpcRkhLZAkksZAVSQvyqflUEgKVLI2HyfEk2n213pGo6VYQpHPZmTypkyhZZpo1YpkjgIp2ktnHzmQliycLFRxCk0kt1f8P8AgM5mitnxIEkg0i98qGKa9szLN5MSxIzCeaMEIoCr8qKOAOmepJONUNWN4S5lcKK7X4j+IZbnV9X02O61kKt/Kkkc+pGW3ZVduFi2DaMgEcnGO/Wp44dPi8P+ILPSdcsZbJLBWKrHcLJO4uISJJN0YGT91VBITf7u5vkV2kzmWIlyRlKNr28+3l5nB0Vs6V/yLWt/8gn/AJYf8fX/AB9ffP8Ax7/+z/7OK3PCOixXun+Hbx4Ld411/wAi4EiDMqN9nwpJGGHLfLnOGYgEBiEo3LnXVNNvo7fhc5fSNKvdYuWttNh+0XCxtKIgyh3CjJCgnLHHO1ck4PHFQXtv9kuXg86GYpgM0LbkzjkBuhwcjIyDjgkYJ6OOwm8NafqlxNHYz3UU0FvGWjjnCb/NJLI4O04hIKMqyAlfu4ZWh1jULvRdXY6RO9j9qtbW4k+z/JiR4EdmXH3Dl3A24wrsowpIp8qS1FGrKU2o2a6fh/mc5RXTeJorbRPHVzMkFpd2LXD3EEURHlmJmJTAIwMAgqCpUgKcOhG5/wAR9OtNJ1qKwsoEtxAsytGPvAfap/L3Z5JMflkE8lSp6YpONr+Q411JxSXxK5y1FFdr8R/EMtzq+r6bHdayFW/lSSOfUjLbsqu3CxbBtGQCOTjHfrSSVmy5zlGcYpXv+G3+ZxVFehTXeq6hoADLr+nWKaYqfak1Avp7COAAJsCBcyFdhXfkO5BBIK1y2lf8i1rf/IJ/5Yf8fX/H198/8e//ALP/ALOKpxsZwruSba6rrfdmNWt4c8M6x4lnlh0Sxe6aBQ0hDKiqCcDLMQMnnAzk4Poas+EdL/taDXIEWEzJp3mxNKOEInhyd2Pl+XcNxwACdxC5Iu+BIdIvYL+31m0hMNr5N3JctJsKxCeJJF9T8jvgKQST0Ztm0jG7VwrVnGMuXdW89/K6/Mw/EWnNpOu31g0FxbiCZlSO5x5gTPy7tvBJXByODnI4rPrudH0bT7fx7b6deW9o1j9jt3ujJcZVA0EbSurDcDyzHIyApZgUCiROf8SWiWMGkW5SFLlLM/aBGVOWM8xUkrwcxmMg85UqRkEUONrsKddNxj5L8U/8vxMaitnwP/yOmhf9hG3/APRi0/xH4hl1eCGFbrWXiRi7JqGpG6UtjAKjYuCAW9evbvNla5o5y9pyJadzDor0Xxv58tprAWPVrXS4pN1k13OJbK4XzVCLbKY1CfISylGPyKw5BJrk/wDmS/8AmE/8hH/t/wD9X/6J/wDZqqULOxnSr+0ipWtrYxqK7/wfp1nLYaJHeXOnCPU7wW7wGwSV3BfDB5my8bleAIhhcxsxQybjjabpj614PnTTNGmudRsbyIGS2jaR3jkWUksoBPBRBnOBgYAJYucjF9Zjd3Widvxt18zmaK1vGMMVv4u1qC3jSKKK/nRI0UKqKJGAAA6ACtDwNff2amu3e+7Ty9OHzWdx5EozcwD5X2tjrzwcjI70lHWxo6tqamlvb8TmaK6nStUl1bxjFcvPfTFYZVtxeXRuLjcInKpHJgYkL/cIX5XZThiMF/jlrl7LTn1GHUbe78yYGLVZTLd7MR7WLlVPlklgo24DCQ5OSAcujZPtmqkYNb+fr/kcnRW54gMSz6ObhNMeIWEBddKYKzLk5EpIOJ8feOD24NbuoaE+m2niG7srK7j0i50q2lt55IWWMmSW1kKgkkcEsANzEBeSSCaOQHiFG1+v+aX6nDUV18F3FfeAb9JNP0aySxWNIp4oR9ruJTIuQztuIBUu3G0naQuVVwH6L4f0+48JQ6vPazM8NwwlkMn+jBcHHnODuQcDCIDIcEZ/fRbXyX2E8SopuStrY42it+yuTpPhiG8ggtJLi7vJYt89rFPtWNIzjEisOTKMbdvQ53ZXZtWuhzrr3iqHQLa0d9NuHWGCW1F5L5YkYBVjYNkcKC+1mBKcqrOwFC45V1G7e3/Bt+bOGortbeytLjxLqGlf2Wk9xdaYXCRLh4bpbTzXVUA+U+cCCihSCAowu5GxvFGnS6Xa6HBdWT2d01gzzRyRGNy32iYAsCAc7QvXsBScLK4RrqUlG2rt+Kf+Rh0UUVJ0BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBf8Pf8AIf07/r6i/wDQxXuN7/x7WP8A1wP/AKMevD/Das/iHTERSzNdxAADJJ3ivc9Sikhiso5kaN1gOVYYI/eP2rvwnws+Tz/+JD0HeHfvCu7sf9WK4Tw794V3dj/qxXafOHwbRXUapb3p+Gug3Eto6WqajepHMINisGSDGWA+YkrIASSfkI6Lgbvhe38R2Hhywu7G013VLW5V5IrDT4GFlIBI6n7SVB80koVaMrkxlR5gACjlliFGHNpu1v2v/kOx51RW74S/5jH/ACBf+QZN/wAhX/gP+o/6b/3fxqfwM+tR3czaHBqc6jb9oj0iYRXZXDY2sFZwm7G7Clc7M87DWk6vKpeXnYLHN0V6DFZald+OtSfSZ722ubexhmuGsbfz75CVhV1ABUmcO+JWBQnEpIGSh5/x1LqEurxHVdN1DT5lgAX+0izXU67mO+R2VS5ySoO0YVFXnbmop1+eSiu19wtY56it3x3/AMjXe/8AIF/g/wCQJ/x5/wCrX/V/1/2t1W/iXb3sHiWJtRtHtJpdOsnKNB5IyLaNWwgAAAZWXAAAKkcYxVxq3cV3V/y/zCxy9Fei+NLfxHpej32n6paa7fQxsI5Lq6gaPT7Uq4H+jR42qMgKsgKgo5URrmvOqKNX2seZfmDVgooorYQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBv+Hf+PJ/+uh/kK06zPDv/AB5P/wBdD/IV2WjXEdt4W1P7RbpcQSXtqkiHAbGy4OVbB2sMAg/gQQSD4uJlyzb8z77Ay5MHTaXRfmYFFdhJaWMsmj2Y2X0U2j3AtmYPG/m+ZctGAoP394VdvzAkkDdwaZp/h6G1trI63YSpK/8AaDyxGQxy7YrZXjBHOw7iSMryCCQQRnl9vFb/ANb/AOR0/WIrfz/X/I5Kiul1/T7GPS5J7W1S2khazOUdzvFxA0rA7ieFKhVxg4+9uPNc1WsJqaujWE1NXR9C+HfvCu7sf9WK4Tw794V3dj/qxXvn5mfBtFdRqlven4a6DcS2jpapqN6kcwg2KwZIMZYD5iSsgBJJ+QjouB0/hj7RJ4d0K206PWorSWJ11C9s7gCwt3NxKC91EY2V9sewsHYZj2g4GDXJPE8kOa3Vrftf/LYaR5hRWtYWdvZ2ianq0e+J8/ZbQkqbog4LEjlYgQQWGCxBVSCGaPp/BM1zLZy3mjC6OqrPcTXlvpaPHPOhSP7PGBEAVh80yFwhUBQMkN5Qq6lbkTaX9f1+OnewkcFRXXxm6XxlIfCyPJOIITOmluqTM+yP7SLdlBwd/mcxAgJuwDHmpPGFhd6nrFiJxNazrY+betqcha4tVEsg3XMm0Fm2lNvyAlWiRVY7dyVf3kmt1ffX7gscZRXQ6ZqttZeJtFk0q0Q2+nXkcsZuHSGS5YOpLSSHIQHaABkqg9TudtnxwdWl0FZdXbxPY7LpFjs9dvXn+0ZV8yRhkTGzABOG/wBavK/xN1nGai1v5/oFjhaK9B1R9abwdqCeIINTiVYkMEt3MHsJG89Nq2aBQiN5ZJDIzDy1kCja2V8+qqNX2ib7PvcGrBRRRWwgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDf8O/8eT/APXQ/wAhWnWZ4d/48n/66H+Qru/ADXCS6w1lFfzTiw+VNPkMc5/fw52sFYjjOeDxmvFxUuSUmfe4KfJgoS8v1OXorq5IJ7zxSV8R2mr+UtlPKkOoXDGfakMjDDlRxvUkfLj1B5zQuY9Nms9M1GWz+xQTXcsFxFZsx/doImLL5jMd5EjDk44Xgc551V1St/Wv+R2Ktqlb+tf8jDorsPFejWem6D5stilnqLXMaoIkuY4ni2ybtqz4csGC7j90Ax4wSc8fVU6iqK6KpVFUjzI+hfDv3hXd2P8AqxXCeHfvCu7sf9WK+gPzQtOODWPqtqZVOBW0RUckYbtQBwFxohaQnFR/2GfQ13htFz0pPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBwn9hn0NH9hn0Nd39jT0o+xp6UAcJ/YZ9DR/YZ9DXd/Y09KPsaelAHCf2GfQ0f2GfQ13f2NPSj7GnpQBzOkaYYWHGK6m1j2KBRHbKnQYqwq4oA//Z
|Default|@@""" QtyDigit = 3 """@@|
จำนวนหลักมากสุด หลังจุดทศนิยม ของ field จำนวนสินค้า 

ดูเพิ่มเติม QtyFixDigit จำนวนหลักขั้นต่ำ หลังทศนิยม
|Default|@@""" QtyFixDigit = 0 """@@|
จำนวนหลักขั้นต่ำ หลังจุดทศนิยม ของ field จำนวนสินค้า ที่ต้องแสดงเป็นตัวเลข 

ตัวอย่าง 
||| จำนวน |>|>|>|h
| QtyFixDigit | QtyDigit | ''10'' | ''20.2'' | ''30.45'' | ''12.2753'' |
| 0 | 3 | 10 | 20.2 | 30.45 | 12.275 |
| 1 | 3 | 10.0 | 20.2 | 30.45 | 12.275 |
| 2 | 3 | 10.00 | 20.20 | 30.45 | 12.275 |
| 3 | 3 | 10.000 | 20.200 | 30.450 | 12.275 |
 
|Default|@@""" QtyShow = 0 """@@|
กำหนดระดับ user ต่ำสุด ที่สามารถเห็นยอดคงเหลือสินค้า 

| 0 |user1 (อนุญาต user ทุกคน) |
| 1 |user2 |
| 2 |user3 |
| 3 |user4 |
| 4 |user5 |
| 5 |user6 |
| 6 |user7 |
| 7 |บัญชี |
| 8 |ผู้จัดการ |
| 9 |supervisor (ไม่อนุญาต user ทุกคน)|
(มี.ค.53) เนื่องจากจอ Browse ไม่สามารถแสดงข้อความให้เห็นครบทุกตัวอักษร เช่น ชื่อสินค้า หรือชื่อสินค้า ทำให้้มีความยากลำบากในการอ่านชื่อ กรณีชื่อนั้นมีข้อความด้านหน้าเหมือนกัน ส่วนข้อความท้ายๆ ที่ต่างกัน จอ QuickInfo จึงเป็นจอที่ใช้สำหรับแสดงรายละเอียดของข้อมูลเพื่อให้ผู้ใช้สามารถอ่านได้ง่ายขึ้น โดยเปิดเป็นจอพิเศษ ที่ด้านล่างของจอ Browse ของข้อมูลสต็อก ผู้ใช้สามารถกด ''Alt + I'' เพื่อสลับระหว่าง ซ่อน/แสดงจอ QuickInfo
[img[QInf-Stock.jpg]]
''คำสั่งที่เกี่ยวข้อง''
* [[_StockShowQInf]]
* [[_CustomerShowQInf]]
* [[_VendorShowQInf]]
| 0 หรือ OFF |ปิด ไม่แสดง QuickInfo |
| +1 หรือ ON |เปิดใช้ QuickInfo ให้แสดงชื่อแทน |
| +2 |เปิดใช้ QuickInfo ให้แสดงหมวด(สินค้า/ลูกค้า/เจ้าหนี้) |
| +4 |เปิดใช้ QuickInfo ให้แสดง @@{min/max/reorder}@@ (สินค้า) |
|~|เปิดใช้ QuickInfo ให้แสดงวงเงินคงเหลือ  @@{999.99}@@ (ลูกค้า/เจ้าหนี้)  ถ้าไม่ได้กำหนดวงเงินในข้อมูลลูกค้าเพิ่มเติม จะไม่แสดง |
| +8 |เปิดใช้ QuickInfo ให้แสดงยอดค้างชำระ @@[999.99]@@ (ลูกค้า/เจ้าหนี้) ถ้าใช้ควบกับคำสั่ง แสดงวงเงินคงเหลือ จะแสดงยอดค้างชำระเมื่อไม่ได้กำหนดวงเงิน |
| + 16 |เปิดใช้ QuickInfo ให้แสดงดัชนีราคาของตารางราคา @@(#99)@@ สำหรับลูกค้า |
| +128 |เปิดใช้ QuickInfo และแสดงห้ามปิด ไม่สามารถใช้ ~Alt-I เพื่อสั่งซ่อน (เม.ย.53 เปลี่ยนจากเดิม +100) |
| - (ลบ) |กรณีกลับค่าเป็นลบ เปิดใช้ QuickInfo แต่ไม่แสดงตอนเริ่มต้น ต้องกด "Alt + I" ก่อน |
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
/***
|''Name''|SimpleSearchPlugin|
|''Description''|displays search results as a simple list of matching tiddlers|
|''Authors''|FND|
|''Version''|0.4.1|
|''Status''|stable|
|''Source''|http://devpad.tiddlyspot.com/#SimpleSearchPlugin|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/SimpleSearchPlugin.js|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Keywords''|search|
!Revision History
!!v0.2.0 (2008-08-18)
* initial release
!!v0.3.0 (2008-08-19)
* added Open All button (renders Classic Search option obsolete)
* sorting by relevance (title matches before content matches)
!!v0.4.0 (2008-08-26)
* added tag matching
!To Do
* tag matching optional
* animations for container creation and removal
* when clicking on search results, do not scroll to the respective tiddler (optional)
* use template for search results
!Code
***/
//{{{
if(!version.extensions.SimpleSearchPlugin) { //# ensure that the plugin is only installed once
version.extensions.SimpleSearchPlugin = { installed: true };

if(!config.extensions) { config.extensions = {}; }

config.extensions.SimpleSearchPlugin = {
	heading: "Search Results",
	containerId: "searchResults",
	btnCloseLabel: "close",
	btnCloseTooltip: "dismiss search results",
	btnCloseId: "search_close",
	btnOpenLabel: "Open all",
	btnOpenTooltip: "open all search results",
	btnOpenId: "search_open",

	displayResults: function(matches, query) {
		story.refreshAllTiddlers(true); // update highlighting within story tiddlers
		var el = document.getElementById(this.containerId);
		query = '"""' + query + '"""'; // prevent WikiLinks
		if(el) {
			removeChildren(el);
		} else { //# fallback: use displayArea as parent
			var container = document.getElementById("displayArea");
			el = document.createElement("div");
			el.id = this.containerId;
			el = container.insertBefore(el, container.firstChild);
		}
		var msg = "!" + this.heading + "\n";
		if(matches.length > 0) {
			msg += "''" + config.macros.search.successMsg.format([matches.length.toString(), query]) + ":''\n";
			this.results = [];
			for(var i = 0 ; i < matches.length; i++) {
				this.results.push(matches[i].title);
				msg += "* [[" + matches[i].title + "]]\n";
			}
		} else {
			msg += "''" + config.macros.search.failureMsg.format([query]) + "''"; // XXX: do not use bold here!?
		}
		createTiddlyButton(el, this.btnCloseLabel, this.btnCloseTooltip, config.extensions.SimpleSearchPlugin.closeResults, "button", this.btnCloseId);
		wikify(msg, el);
		if(matches.length > 0) { // XXX: redundant!?
			createTiddlyButton(el, this.btnOpenLabel, this.btnOpenTooltip, config.extensions.SimpleSearchPlugin.openAll, "button", this.btnOpenId);
		}
	},

	closeResults: function() {
		var el = document.getElementById(config.extensions.SimpleSearchPlugin.containerId);
		removeNode(el);
		config.extensions.SimpleSearchPlugin.results = null;
		highlightHack = null;
	},

	openAll: function(ev) {
		story.displayTiddlers(null, config.extensions.SimpleSearchPlugin.results);
		return false;
	}
};

config.shadowTiddlers.StyleSheetSimpleSearch = "/*{{{*/\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " {\n" +
	"\toverflow: auto;\n" +
	"\tpadding: 5px 1em 10px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryPale]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " h1 {\n" +
	"\tmargin-top: 0;\n" +
	"\tborder: none;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " ul {\n" +
	"\tmargin: 0.5em;\n" +
	"\tpadding-left: 1.5em;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button {\n" +
	"\tdisplay: block;\n" +
	"\tborder-color: [[ColorPalette::TertiaryDark]];\n" +
	"\tpadding: 5px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button:hover {\n" +
	"\tborder-color: [[ColorPalette::SecondaryMid]];\n" +
	"\tbackground-color: [[ColorPalette::SecondaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnCloseId + " {\n" +
	"\tfloat: right;\n" +
	"\tmargin: -5px -1em 5px 5px;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnOpenId + " {\n" +
	"\tfloat: left;\n" +
	"\tmargin-top: 5px;\n" +
	"}\n" +
	"/*}}}*/";
store.addNotification("StyleSheetSimpleSearch", refreshStyles);

// override Story.search()
Story.prototype.search = function(text, useCaseSensitive, useRegExp) {
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(), useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack, null, "excludeSearch");
	var q = useRegExp ? "/" : "'";
	config.extensions.SimpleSearchPlugin.displayResults(matches, q + text + q);
};

// override TiddlyWiki.search() to sort by relevance
TiddlyWiki.prototype.search = function(searchRegExp, sortField, excludeTag, match) {
	var candidates = this.reverseLookup("tags", excludeTag, !!match);
	var primary = [];
	var secondary = [];
	var tertiary = [];
	for(var t = 0; t < candidates.length; t++) {
		if(candidates[t].title.search(searchRegExp) != -1) {
			primary.push(candidates[t]);
		} else if(candidates[t].tags.join(" ").search(searchRegExp) != -1) {
			secondary.push(candidates[t]);
		} else if(candidates[t].text.search(searchRegExp) != -1) {
			tertiary.push(candidates[t]);
		}
	}
	var results = primary.concat(secondary).concat(tertiary);
	if(sortField) {
		results.sort(function(a, b) {
			return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);
		});
	}
	return results;
};

} //# end of "install only once"
//}}}
for customized Scraft.
[[__FSys.INI]]
|Default|ยกเลิกไม่ใช้|
เป็น mod โปรแกรมรุ่นเก่า สำหร้บป้อนข้อมูลชื่อสินค้าแบบ fix format เช่น เลนส์แว่นตา
ปัจจุบัน สามารถใช้ subfield แทนได้ 
|Default|@@""" StkKeepQty=ON """@@|
ใช้ควบคุมเกี่ยวกับการคำนวณและเก็บค่ายอดคงเหลือล่าสุดของสต็อกสินค้า 

| StkKeepQty | คำอธิบาย |h
| OFF หรือ 0 |ไม่เก็บยอดคงเหลือล่าสุดใน master และ ไม่แสดงยอดคงเหลือล่าสุดในจอ browse list ถ้าต้องการดูยอดคงเหลือล่าสุด จะต้องกด space ที่ชื่อสินค้านั้น เพื่อดู stock info โปรแกรมจะคำนวณยอดคงเหลือล่าสุดจาก รายการเข้า-ออก |
| ON หรือ 1 |เก็บยอดคงเหลือล่าสุดใน master ข้อมูลสินค้า |
| 2 ถึง 9 |มีผลเหมือน 1 ใช้ lock กรณี user ระดับต่ำกว่าค่าที่กำหนด จะไม่สามารถเข้าไปแก้ยอดคงเหลือใน master ข้อมูลสินค้า ตรงๆ เช่น กำหนด 7 มีผลคือ user1 - user6 ไม่สามารถแก้ยอดคงเหลือได้ (ส่วนค่าติดลบ หรือ 0 มีผล lock อัตโนมัติอยู่แล้ว เพราะยอดคงเหลือ ไม่ได้เก็บใน master) |
| -1 |เหมือนกับ 0 แต่แสดงยอดคงเหลือในจอ browse list โดยการคำนวณ และไม่ตรวจยอดคงเหลือติดลบระหว่างตัดสต็อก (ไม่ฟ้องถ้าตัดสต็อกแล้วติดลบ) |
| -10 |เหมือนกับ -1 แต่ฟ้องถ้าตัดสต็อกแล้วติดลบ (ต้องเสียเวลาคำนวณเพื่อตรวจยอด เมื่อตัดสต็อก) |
| -11 |เหมือนกับ -1 สำหรับสต็อกที่ไม่มีโกดัง ไม่คำนวณฟ้องติดลบ เฉพาะสต็อกที่มีโกดัง ฟ้องถ้าตัดสต็อกแล้วติดลบ |

** bias +10 ใช้ควบกับ 1 ถึง 9 เพื่อให้โปรแกรมตรวจสอบยอดคงเหลือติดลบ ในระดับโกดังด้วย เมื่อมีการตัดสต็อก (ต้องเสียเวลาคำนวณ) 
** bias +100 ใช้ควบกับค่าข้างต้น optimize ความเร็วเมื่อกด space เพื่อดู stock info? ใช้กับระบบสต็อกที่ไม่ได้ใช้แยกโกดัง (StkQtyLoc) โปรแกรมจะไม่วิ่งคำนวณเพื่อหายอดแยกตามโกดัง แต่ใช้ยอดคงเหลือใน master มาแสดงเลย 
** bias -100 ใช้ควบกับค่า -1, -10 หรือ -11 optimize ความเร็วเมื่อกด space เพื่อดู stock info ใช้กับระบบสต็อกที่ไม่ได้ใช้แยกโกดัง (StkQtyLoc) โปรแกรมจะไม่วิ่งคำนวณเพื่อหายอดแยกตามโกดังซ้ำ แต่ใช้ยอดที่คำนวณได้และแสดงในจอ browse list 
|Default|@@""" StkQtyAltShow = 0 """@@|
ในจอ browse list ของข้อมูลสินค้า เราสามารถกด space เพื่อดู stock info
ถ้ากำหนดค่านี้เป็น 1 รายละเอียดของ stock info จะแสดงยอด Min/Max/Reorder ต่อท้ายยอดรวมด้วย 

เพิ่มเติม เม.ย. 2553
| 0 | แสดง Stock Info ปกติ (ยอดคงเหลือ) |
| +1 |แสดงยอด {Min/Max/ReOrder} ต่อท้ายยอดคงเหลือ |
| +10 |แสดงยอดค้างรับ (ถ้าไม่มียอดค้าง ไม่แสดง) |
| +20 |แสดงยอดค้างส่ง (ถ้าไม่มียอดค้าง ไม่แสดง) |
||@@""" StkQtyBDir = ชุดข้อมูล1,ชุดข้อมูล2,.. """@@|
ในจอแสดงรายการข้อมูลสต็อกสินค้า (browse list) เมื่อกด space ที่ชื่อสินค้าที่ต้องการ โปรแกรมจะแสดงจอ stock info ขึ้นมาให้ 

คำสั่งนี้ เป็นการกำหนดเพิ่มเติม ให้โปรแกรมไปหายอดคงเหลือ ของสินค้าชื่อเดียวกันนี้ จากชุดข้อมูลอื่นมาแสดงด้วย ช่วยให้สามารถดูยอดสต็อกคงเหลือ เปรียบเทียบระหว่างสาขาต่างๆ ได้สะดวกรวดเร็ว 

> note เราต้องกำหนดรายชื่อชุดข้อมูลเป็นชื่อเต็ม โดยใช้ , หรือ | คั่น (ไม่สามารถใช้ wildcard) 
||@@""" StkQtyLoc=โกดัง1*,โกดัง2*,.. """@@|
กำหนดให้โปรแกรมแสดงยอดคงเหลือสินค้า เฉพาะจากโกดัง ที่กำหนดโดย wildcard string

นอกจากนี้ คำสั่งนี้ มีผลให้ โปรแกรม lock ฟิลด์ ยอดคงเหลือ ใน master สต็อกสินค้า ไม่ให้ผู้ใช้เข้าไปแก้ยอดโดยตรง

คำสั่งนี้ ยังมีผลเมื่อกด space ที่ชื่อสินค้าใน browse list เพื่อดู stock info โปรแกรมจะแสดงยอดแยกตามโกดัง เฉพาะที่ตรงตามเงื่อนไข wildcard ของคำสั่งนี้ 
||@@""" StkRenameBDir = ชุดข้อมูล1,ชุดข้อมูล2,..  """@@|
ใช้กับอรรถประโยชน์ เปลี่ยนชื่อสินค้า สามารถกำหนดให้เปลี่ยนชื่อสินค้า หลายชุดข้อมูลพร้อมกันได้

ใช้ประโยชน์ กรณีกิจการมีหลายสาขา แยกข้อมูลเก็บไว้หลายชุดข้อมูล แต่ข้อมูลชื่อสินค้า จะต้องใช้ชื่อเหมือนกัน 

> note ไม่จำเป็นต้องกำหนดชื่อชุดข้อมูล ของตนเอง โปรแกรมจะเปลี่ยนชื่อในชุดข้อมูลของตนเองอัตโนมัติอยู่แล้ว 

> ปรับปรุง กรณีเปลี่ยนชื่อสินค้า 
> (25-9-2550)  โปรแกรมจะเปลี่ยนชื่อสินค้าใน Transaction แต่ละชุดข้อมูลก่อน(~StkIn, ~StkOut)  เสร็จแล้วถ้าไม่มี error จึงเปลี่ยนชื่อสินค้าใน Master แต่ละชุดข้อมูลอีกครั้ง(~StkItm, ~AltStk, Stock) 
@@
StkRenameLog = ชื่อแฟ้ม 
@@
ใช้กำหนด ชื่อไฟล์ ที่จะเก็บ log การสั่งเปลี่ยนชื่อ เพื่อใช้ตรวจสอบภายหลัง 
||@@""" StkRenameLog = ชื่อแฟ้ม """@@|
ใช้กำหนด ชื่อไฟล์ ที่จะเก็บ log การสั่งเปลี่ยนชื่อ เพื่อใช้ตรวจสอบภายหลัง 
ดูรายละเอียดใน StkRenameBDir
|Default|@@""" StkResourceDirs = dir1,dir2,.. """<br>""" StkResourceExts=.JPG;.GIF;.TIF """<br>""" StkResourceMode=0 """@@|
ใช้กรณีข้อมูลสินค้า จำเป็นต้องมีไฟล์ภายนอก มาช่วยเสริมข้อมูล เช่น โบรชัวร์, รูปภาพสินค้า ฯลฯ
หลักการทำงานคล้ายลักษณะของ hyperlink ขณะที่อยู่ในจอแสดงรายการสินค้า ถ้ากด ''ALT+S'' โปรแกรมจะตรวจหาคำสั่ง hyperlink ที่แทรกอยู่ในเนื้อข้อมูลสินค้า ถ้าพบก็จะเรียกเปิดไฟล์นั้นอัตโนมัติ เหมือนกับการ double click ที่ไฟล์นั้นใน windows 

''การใช้งาน'' 
คำสั่งสำหรับกำหนด link ชื่อไฟล์ภายนอก ที่ใช้แทรกในเนื้อข้อมูลสต็อค (ในชื่อสินค้า หรือชื่อแทน) :คือ ''{^ชื่อไฟล์}'' หรือ หลายชื่อในคราวเดียว ''{^ไฟล์1;ไฟล์2}'' สามารถกำหนดไว้สะเปะสะปะ หลายๆ ที่ โปรแกรมจะรวบรวมไฟล์ทั้งหมดขึ้นมาให้เลือก เช่น ไว้ในชื่อสินค้าก็มี {^xxx} แถมไว้ในชื่อแทนก็มี {^yyy} อีกด้วย 
* ชื่อไฟล์ใช้ wildcard ไม่ได้ 
* ชื่อไฟล์สามารถระบุนามสกุลก็ได้ 
* โปรแกรมตรวจสอบชื่อไฟล์ซ้ำอัตโนมัติ 
* ต้องกำหนด StkResourceDirs (ถ้าไม่กำหนด จะไม่ทำงาน) 
** กำหนดแบบทั่วไป เช่น StkResourceDirs=d:\pics\paper;d:\pics\other 
** กำหนดแบบให้ค้นใน subfolder ด้วยอัตโนมัติ เช่น StkResourceDirs=d:\pics\*;e:\pics\* 
** ดังนั้น จะจัดหมวดหมู่ของรูปภาพแบ่งเป็น folder ยังไงก็ได้ ตั้งชื่อ subfolder ยาวยังไงก็ได้  โปรแกรมจะความหาใน subfolder เองอัตโนมัติ 
** สามารถกำหนดได้หลาย ๆ dir โดยใช้เครื่องหมาย ; คั่น  โปรแกรมจะความหาจาก dir1 ก่อน ตามด้วย dir2 ตามด้วย subfolder ใน dir1 แล้ว subfolder ใน dir2 แล้วจึง subfolder ของ subfolder ใน dir1 , dir2 ตามลำดับ 
** ข้อควรระวัง ชื่อโฟลเดอร์จะต้องระบุเป็นแบบ 8.3 เท่านั้น เช่น c:\mydocu~1\mypict~1 
* กำหนด StkResourceExts สำหรับ ชื่อไฟล์ ที่ไม่ระบุนามสกุล 
** ค่า default คือ .JPG;.GIF;.TIF : หรือกำหนดเองใหม่ เช่น StkResourceExts=.JPG;.PDF;.LNK 
** จะต้องมี . นำหน้า และใช้ ; คั่น 
** รายการนามสกุลเป็นแบบ priority คือ โปรแกรมจะหาตามนามสกุลแรกก่อน ถ้าเจอก็จะใช้นามสกุลนั้น ไม่หาต่อไป 
** ยกเว้นมีการใช้ StkResourceMode +4 จึงหาไฟล์ชื่อเดียวกัน ทุกนามสกุลขึ้นมาให้เลือก 
* ใช้ StkResourceMode เพื่อปรับรูปแบบการใช้งาน 
** ค่า default 0 ถ้าพบ link เดียว จะเปิดไฟล์ทันที ถ้าพบมากกว่า 1 link จะขึ้นรายชื่อมาให้เลือกก่อน 
** +1 = เอา รหัสสินค้า มาใช้เป็น link (ชื่อไฟล์) ด้วย 
** +2 = แสดงชื่อไฟล์ให้ก่อนทุกครั้ง ถึงแม้ว่าจะพบแค่ 1 link 
** +4 = หาไฟล์ตามนามสกุลที่กำหนด จนครบทุกนามสกุล 
ดูรายละเอียดใน StkResourceDirs
ดูรายละเอียดใน StkResourceDirs
|Default|@@""" StkUtilOpenShare = OFF """@@|
ปกติ ในการทำงานอรรถประโยชน์ ของระบบสต็อก เช่น เปลี่ยนชื่อ หรือ คำนวณยอดสุดท้ายใหม่ โปรแกรมจะเปิดไฟล์แบบ exclusive คือ lock ไม่ให้ผู้อื่นเข้าไปเพิ่ม, ลบ, แก้ไข ไฟล์ข้อมูลสต็อก เพื่อป้องกันไม่ให้ประมวลผลผิดพลาด 

ดังนั้น ในระหว่างที่มีการประมวลผลอรรถประโยชน์อยู่ ผู้อื่นไม่สามารถทำงานใดๆ ที่เกี่ยวกับสต็อก จะต้องรอจนกว่า คำสั่งอรรถประโยชน์นั้น ทำงานเสร็จก่อน 

เปลี่ยนค่านี้เป็น ON จะเปิดไฟล์แบบ share แทน มีผลทำให้ ผู้อื่นสามารถทำงานเกี่ยวกับสต็อกได้ตามปกติ ในระหว่างที่ คำสั่งอรรถประโยชน์ทำงาน กรณีนี้ ผู้ใช้จะต้องรับความเสี่ยงเอง ถ้าเกิดประมวลผลผิดพลาด เช่น ระหว่างที่คำนวณยอดสต็อกสุดท้ายอยู่ มีการตัดสต็อกสินค้าเดียวกันจากผู้อื่นพอดี 
|Default|@@""" StkZoomTrn = max[,mode] """@@|
จากจอแสดงรายชื่อสินค้า เมื่อกด space ปกติโปรแกรมจะแสดงจอ stock info เมื่อใช้คำสั่งนี้ โปรแกรมจะแสดงจอ รายละเอียดเข้า-ออกล่าสุด ขึ้นมาก่อน

* ''max'' กำหนดจำนวนรายการที่แสดง 
* ''mode'' เงื่อนไขการแสดง ถ้าไม่กำหนด default คือ 7 
** 1 เลือกเฉพาะรายการเข้า 
** 2 เลือกเฉพาะรายการออก 
** 3 แสดงทั้งรายการเข้าและออก 
** +4 แสดงจำนวน 
** +8 แสดงราคาซื้อ(เข้า)/ราคาขาย(ออก) 
** +16 แสดงชื่อผู้ขาย(เข้า)/ผู้ซื้อ(ออก) 

ตัวอย่าง  
StkZoomTrn=5 (แสดงรายการเข้า-ออกล่าสุด 5 รายการ แสดงเฉพาะจำนวน) 
StkZoomTrn=5,23 (แสดงรายการเข้า-ออกล่าสุด 5 รายการ แสดงจำนวนและชื่อผู้ซื้อ/ผู้ขาย) 

ใช้ประโยชน์เพื่ออำนวยความสะดวก ให้ผู้ใช้สามารถตรวจสอบคร่าวๆ ว่าสินค้านี้ ล่าสุด เคยซื้อ หรือขายให้ใครไปบ้าง 

นอกจากนี้ ในหน้าจอแสดงรายการสินค้า (browse list) เมื่อมีการใช้คำสั่งนี้ โปรแกรมจะเอาหมวดบิลล่าสุด มาแสดงหน้าชื่อสินค้าให้ด้วย เป็นบิลซื้อ หรือบิลขาย ขึ้นอยู่กับเงื่อนไข mode 1,2,3 ที่กำหนดเลือกรายการ เช่น ถ้าใช้ mode=1 จะแสดงหมวดบิลซื้อล่าสุด mode=2 จะแสดงหมวดบิลขายล่าสุด

(4 ม๊.ค. 2553) 
''mode'' เพิ่มเติม +64, +128 เกี่ยวกับการกำหนดแสดง/ไม่แสดงหมวดบิลล่าสุด __ยกเลิก__การแสดงหมวดบิลล่าสุด ที่ขึ้นอยู่กับ mode 1,2,3
* ''mode'' เงื่อนไขแสดงหมวดบิลล่าสุด
** +64 แสดงหมวดบิลซื้อล่าสุด
** +128 แสดงหมวดบิลขายล่าสุด
** +192 แสดงหมวดบิลซื้อ/บิลขายล่าสุด (ถ้าล่าสุดวันเดียวกัน แสดงหมวดบิลซื้อ)
{{{
24/1/2552

MOD - StockZoomTrn

วิธีใช้
StkZoomTrn=maxshow,mode

mode: เอาค่าต่อไปนี้มาบวกกัน
1 = เอา stkin
2 = เอา stkout
4 = แสดง จำนวน 
8 = แสดง ต้นทุน/ราคา
16 = แสดง ชื่อลูกค้า

default mode คือ 7

ของคุณนพดล น่าจะใช้ mode เป็น 1+2+8+16 = 27

ดังนั้นถ้าต้องการให้แสดง trn ล่าสุด 3 รายการจะได้เป็น 
StkZoomTrn=3,27

ไฟล์ที่ update คือ _Stk1_.EXE และ H_Stk1_.EXE (ใช้สำหรับ F1)


การทดสอบ
เมื่อกำหนด StkZoomTrn
จอสต็อก จะขึ้นหมวดบิลล่าสุด หน้าชื่อสินค้า อัตโนมัติ

และถ้ากด SPACE จะขึ้น Info ของ Transaction 
คล้ายกับกรณี หลายโกดัง

}}}
{{{
28/8/50

**เดิม**
เมื่อกด SPACE ที่ข้อมูลสต็อกสินค้า 
โปรแกรมจะแสดง จอเหมือนตอนป้อนข้อมูลสต็อก

ถ้ามีข้อมูลแยก โกดัง(ที่เก็บ) โปรแกรมจะขึ้นจอพิเศษ
แสดงยอดย่อยแต่ละที่เก็บมาให้ดู

**เดิม**
สามารถกำหนด StkKeepQty เพื่อกำหนดวิธีใช้ยอดคงเหลือ
StkKeepQty = 0 ไม่เก็บยอดคงเหลือไว้ที่ข้อมูล Master Stock 
และไม่แสดงยอดคงเหลือ ในจอ browse สต๊อก (ต้องกด SPACE จึงทราบยอดคงเหลือ)
StkKeepQty = -1 ไม่เก็บยอดคงเหลือไว้ที่ข้อมูล Master Stock แต่จะคำนวณอัตโนมัติเพื่อแสดงในจอ browse ไม่จำเป็นต้องกด SPACE แต่จะทำงานช้ากว่า

**ใหม่**
สามารถกำหนด StkQtyBDir = ชื่อชุดข้อมูล1|ชื่อชุดข้อมูล2
เมื่อกด SPACE ครั้งแรก โปรแกรมจะแสดงข้อมูลของสต็อกเหมือนเดิม
แต่ถ้ากด SPACE อีกครั้ง โปรแกรมจะแสดงยอดสต็อกคงเหลือในชุดข้อมูลอื่นนั้น


**ใหม่**
เพื่อ optimize ความเร็วในการคำนวณยอดคงเหลือ ไม่ให้ซ้ำซ้อน
เวลาแสดงข้อมูลเมื่อกด SPACE
เราสามารถกำหนด StkKeepQty = 2 
เป็นการกำหนดให้โปรแกรมเอายอดคงเหลือจาก Master Stock มาใช้
โดยไม่ต้องคำนวณจาก transaction เข้า-ออก
(มีผลข้างเคียงคือ ไม่สามารถแสดงยอดแบบแยกโกดัง)
หรือเราอาจกำหนด StkKeepQty = -2
เพื่อให้แสดงยอดคงเหลือ จากยอดที่คำนวณได้ในจอ Browse ไม่ต้องคำนวณซ้ำ
}}}

{{{
กรณี SPC1 ซึ่ง Master Stock เก็บยอดคงเหลือด้วย

จึงควรกำหนด StkKeepQty=2


กรณี SPC2 - SPC4 ซึ่ง share ใช้ Master Stock จาก SPC1
จะต้องคำนวณจาก Transaction

ดังนั้นจะต้องกำหนดเป็น
StkKeepQty = 0 (ปิดไม่คำนวณยอดคงเหลือ ระหว่าง browse) หรือ StkKeepQty= -2 แล้วแต่ความสะดวก

ตอนนี้ เจอปัญหา เกี่ยวกับ StkKeepQty

ที่ขัดแย้งกับ definition เก่า ที่ให้ตั้งเป็น 0 หรือ -10

กำลังสรุป เงื่อนไขการตั้งค่าใหม่อยู่ครับ...


31/8/50
แก้ไขโปรแกรมใหม่

เปลี่ยนเป็นใช้ +100 สำหรับ StkKeepQty

สรุปคือ SPC1 ควรใช้ StkKeepQty = 101

ส่วน SPC อื่น ควรใช้ StkKeepQty = -110 หรือ -100

เพิ่ม bias +100 หรือ -100 เข้าไปมีผลคือ
โปรแกรมจะไม่วิ่งคำนวณ ยอดคงเหลือจาก transaction ซ้ำซ้อน เมื่อเคาะ space
แต่ใช้ค่ายอดคงเหลือที่คำนวณและแสดงในหน้าต่างข้อมูลสต็อก บนจออยู่แล้ว 
}}}

{{{
6/9/51

- ผมมีข้อสงสัยครับ ผม Set StkKeepQty=101 แล้วพบว่าเวลาเคาะ space bar ไล่สินค้า
ในข้อมูลสต๊อค ทีละตัว พบว่า บางครั้งก็ไม่มีจอ วิ่งคำนวณ, สินค้าบางตัวคำนวณ Stockin, StockOut
วิ่ง ด้านล่างให้เห็น (ซึ่งบางตัววิ่งนาน) พอมากดซ้ำอีกครั้ง วิ่งคำนวณ เหมือนกันแต่เร็วขึ้น ..
ไม่ทราบว่า โปรแกรมวิ่งคำนวณอะไร แล้วทำยังไงจะไม่คำนวณ (เหมือนโปรแกรมรุ่นเก่า) เพราะบางตัววิ่งนาน..


ปล. 
1. ในชุดข้อมูลมีการใช้ ที่เก็บด้วย
2. สินค้าตัวที่วิ่งคำนวณ หลายตัวไม่มีการระบุที่เก็บ (เคาะเสร็จวิ่งคำนวณ แต่ไม่มีอะไรโผล่ขึั้นมา ไม่รู้ทำอะไร)
3. สินค้าบางตัววิ่ง(เหมือน)คำนวณ นานจนน่ารำคาญ ครับ
4. ทดสอบ ลบไฟล์ __Fsys.ini ไม่ให้ Set อะไรเลย ก็ยังวิ่งคำนวณอยู่ครับ

การกำหนดเป็น 1 และมีการใช้โกดัง โปรแกรมจะต้องวิ่งคำนวณเก็บยอดแยกตามโกดัง ตาม transaction ตั้งแต่ต้นทุกครั้ง (หรือวิ่งคำนวณไปจนจบแล้วพบว่า สินค้านั้นไม่มีโกดังเลย)

}}}

{{{
7/9/2550

1. แก้ Bug กรณี StkKeepQty=OFF กด SPACE แล้วไม่ขึ้น

2. แก้ไขเรื่องเว้นบรรทัดห่าง

3. เพิ่มคำสั่ง
StkQtyAltShow=1
ให้แสดงยอด Min/Max/ReOrder ต่อท้ายยอดรวมด้วย

4. แก้ Bug กรณี __FSYS.INI ใช้ #FCFG
}}}
[[Markup Help|http://tiddlywiki.org/wiki/TiddlyWiki_Markup]]
[[Tags Help|http://tiddlywiki.org/wiki/Tags]]
[[Macro Help|http://tiddlywiki.org/wiki/Core_Macros]]
----
<<matchTags popup "label:...more (Draft)" __FSys.INI AND Draft>>
[[...Open List|ListCommandsByName]]
----
<<matchTags inline "[[%0]]" "\n" __FSys.INI AND NOT Draft>>
[[Recent Changed|ListRecentChanged]]
[[Cmds by Name|ListCommandsByName]]
[[Cmds by Date|ListCommandsByModified]]
[[Jobs by Name|ListJobsByName]]
[[Jobs by Date|ListJobsByModified]]
----
<<matchTags popup "label:...Draft" MOD AND Draft>>
[[...Open List|ListJobsByName]]
----
<<matchTags inline "[[%0]]" "\n" MOD AND NOT Draft>>
<<tag "ภาษีมูลค่าเพิ่ม">>
<<tag "สต็อก">>
<<tag "ลูกค้า-ลูกหนี้">>
<<tag "เจ้าหนี้">>
<<tag "บิลขาย">>
<<tag "บิลซื้อ">>
<<tag "ใบเสร็จ">>
<<tag "ใบจ่าย">>
<<tag "บัญชีธนาคาร">>
<<tag "บัญชีแยกประเภท">>
<<tag "report">>
<<tag "security">>
<<tag "export">>
<<timeline>>
|Default|@@""" TmpAutoCancel = 0 """@@|
ในระหว่างป้อนข้อมูลหรือแก้ไขข้อมูล แล้วทิ้งจอไว้ ถ้าไม่มีการกดคีย์ใดๆ นานเกินเวลาที่กำหนด (วินาที) โปรแกรมจะทำการยกเลิกการป้อนข้อมูลนั้นอัตโนมัติ (ถ้าใช้ค่าเป็นลบ จะออกจากจอโดยไม่มีการเตือนให้ตอบยกเลิก) 
|Default|@@""" TmpRefresh = 60 """@@|
ในจอ Browse ข้อมูลแบบ list โปรแกรมจะทำการ อ่านข้อมูลจาก database เพื่อ refresh list ของข้อมูล ภายในเวลาที่กำหนด (default คือ 60 วินาที) 
ไฟล์นี้จะ update ใหม่เรื่อยๆ สามารถ download ได้ที่ 
| share folder | html | zip (html + img) |
| [[4Shared server|http://www.4shared.com/dir/32763227/b6404fe2/html.html]] |[[download|http://www.4shared.com/file/233996079/7c9dd7ee/__FSysINI.html]] | [[download|http://www.4shared.com/file/242548179/be60cc8d/__FSysINI.html]] |
| [[SkyDrive server|http://cid-a5abc44714ee2e14.skydrive.live.com/browse.aspx/Free%20Scraft/html]] |[[download|http://cid-a5abc44714ee2e14.skydrive.live.com/self.aspx/Free%20Scraft/html/^_^_FSysINI.html]] | [[download|http://cid-a5abc44714ee2e14.skydrive.live.com/self.aspx/Free%20Scraft/html/^_^_FSysINI.zip]] |
| [[ZumoDrive server|http://www.zumodrive.com/share/4d43OWE3Mj]] | [[download|http://www.zumodrive.com/share/4aZhYTE2MT]] | [[download|http://www.zumodrive.com/share/4d42ODYxZj]] |
| Dropbox server | [[download|http://dl.dropbox.com/u/5135572/__FSysINI.html]] | [[download|http://dl.dropbox.com/u/5135572/__FSysINI.zip]] |
หมายเหตุ
# ไฟล์เดี่ยว html สามารถใช้กับ Opera 7.2+, Firefox, Safari, Netscape, Mozilla ได้ทันที
# ไฟล์รวม zip (html + img) สำหรับ Internet Explorer ซึ่งไม่ support [[inline images|http://www.websiteoptimization.com/speed/tweak/inline-images/]] ในรูปแบบของ [[Data URI|http://en.wikipedia.org/wiki/Data_URI_scheme]] จะต้อง download zip ไฟล์ ซึ่งมีไฟล์ html และ ไฟล์รูปภาพประกอบ สำหรับใช้ร่วมกัน
9 ก.ค. 2553
*ปรับปรุงคำสั่ง [[Work Flow]]
5 ก.ค. 2553
*ปรับปรุงคำสั่ง [[Work Flow]] [[_InvAutoReferNo]] [[_InvLockHiDate]]
25 เม.ย. 2553
*ปรับปรุงคำสั่ง QuickInfo เลือกเปิด/ปิด ข้อมูลที่ต้องการให้แสดงได้
8 เม.ย. 2553
*จัด list ของ เนื้อหาใหม่ แสดงส่วนของค่า default ของคำสั่ง เสร็จแล้ว
*ปรับ Main Menu ด้านซ้ายใหม่
*update MatchTagsPlugin และปรับแก้ code ให้ support options MatchTagsDescription
*ปรับแก้ code ImageSizePlugin ให้ default เป็น resize width 75%
4 เม.ย. 2553
* ปรับปรุงคำสั่ง StkQtyAltShow
17 มี.ค. 2553
*กำลังจัดโครงสร้างของ เนื้อหาใหม่ เพื่อให้สามารถ list ดูง่ายกว่าเดิม
โปรแกรม Scraft มีประวัติการใช้งานที่ยาวนานกว่า 20 ปี มีความสามารถปรับเปลี่ยน คุณสมบัติโปรแกรม โดยผ่านการกำหนดค่า ด้วยคำสั่งในไฟล์ """__FSys.INI"""

ปัญหาก็คือ ไม่มีใครเข้าถึงความสามารถทั้งหมดของโปรแกรม แม้กระทั่งตัวโปรแกรมเมอร์เอง

ดังนั้น ก่อนที่จะหลงลืมไป ผมจึงมีความคิดว่าจะรวบรวม คำสั่งทั้งหมด ที่โปรแกรมนี้เปิดให้ ปรับเปลี่ยน พร้อมทั้งอธิบายความหมายของมัน 

คำอธิบาย พยายามทำเป็น 2 รูปแบบ คือ ลักษณะของ <<tag "__FSys.INI" "คำสั่ง">> กับ อธิบายลักษณะของ <<tag "MOD" "งาน">>

ที่ทำไปแล้วคือ
1. แปลง คำอธิบาย ที่เคยทำไว้ใน wiki เดิม มาใส่ไว้ที่นี่
2. รวบรวมคำสั่ง ที่เคยเขียนอธิบายอยู่ใน Forum [[NetScraft Talk|http://admthai.homeip.net/forum]] บางส่วนก็ยังเป็น <<tag "Draft" "ร่างสำเนา">> ไม่ได้เรียบเรียง ใช้วิธีลอกเอามาเก็บไว้เป็นหลักฐานก่อน

สำหรับงานขั้นต่อไป คือ รวบรวมคำสั่ง ที่หลงเหลือ หลุดรอดไป จาก source code โดยตรง พูดง่ายๆ คือ แกะจาก source code และพยายามตีความคำสั่ง จากการอ่าน source code นั้น
|Default|@@""" VATRate = 7 """@@|
กำหนดอัตรา ภาษีมูลค่าเพิ่ม 
|Default|@@""" VndUtilOpenShare = OFF """@@|
ปกติ ในการทำงานอรรถประโยชน์ ของระบบเจ้าหนี้ เช่น เปลี่ยนชื่อ หรือ คำนวณยอดสุดท้ายใหม่ โปรแกรมจะเปิดไฟล์แบบ exclusive คือ lock ไม่ให้ผู้อื่นเข้าไปเพิ่ม, ลบ, แก้ไข ไฟล์ข้อมูลเจ้าหนี้ เพื่อป้องกันไม่ให้ประมวลผลผิดพลาด 

ดังนั้น ในระหว่างที่มีการประมวลผลอรรถประโยชน์อยู่ ผู้อื่นไม่สามารถทำงานใดๆ ที่เกี่ยวกับเจ้าหนี้ จะต้องรอจนกว่า คำสั่งอรรถประโยชน์นั้น ทำงานเสร็จก่อน 

เปลี่ยนค่านี้เป็น ON จะเปิดไฟล์แบบ share แทน มีผลทำให้ ผู้อื่นสามารถทำงานเกี่ยวกับเจ้าหนี้ได้ตามปกติ ในระหว่างที่ คำสั่งอรรถประโยชน์ทำงาน กรณีนี้ ผู้ใช้จะต้องรับความเสี่ยงเอง โอกาสที่การประมวลผลผิดพลาด เช่น ระหว่างที่คำนวณยอดหนี้ล่าสุดอยู่ มีการเพิ่มหนี้ของเจ้าหนี้รายนั้นจากผู้อื่นพอดี 
{{{
คืนนี้ได้ข้อสรุปแล้ว...
หลังจากที่โทรคุยกันกับ adm อยู่นาน

เปลี่ยนไปใช้ระบบ Work Flow MOD

ร่างแนวคิดคร่าวๆ ดังนี้

Move - ย้ายบิล ไปหมวดบิลอื่น (ใช้คำสั่ง update database)
        สามารถกำหนด ให้คืนรายการบิลต้นฉบับ อัตโนมัติ
        สามารถกำหนด ใช้วันที่ปัจจุบัน หรือใช้วันที่เดิม
        สามารถกำหนด run เลขที่ใหม่ หรือใช้เลขที่เดิม
        สามารถกำหนด ให้ทำงานตามคำสั่งตัวหนอน ของบิลหมวดใหม่ เหมือนตอนกด F10 save

Copy - คัดลอก ไปหมวดบิลอื่น (ใช้คำสั่ง insert database)
        สามารถกำหนด ให้คืนรายการบิลต้นฉบับ อัตโนมัติได้
        สามารถกำหนด ใช้วันที่ปัจจุบัน หรือใช้วันที่เดิม
        สามารถกำหนด run เลขที่ใหม่ หรือใช้เลขที่เดิม
        สามารถกำหนด ให้รอ user confirm เพื่อ save ก่อนได้ (edit)
        สามารถกำหนด ให้ทำงานตามคำสั่งตัวหนอน ของบิลหมวดใหม่ เหมือนตอนกด F10 save
      สามารถกำหนด ให้ลบข้อมูลบิลต้นฉบับ หลังจาก copy สำเร็จได้

อื่นๆ จะต้องรองรับ auto-wf ทำงานเมื่อกด F10 save ด้วย
}}}

{{{
10/8/52

เอ๊า... เร่เข้ามา...

1. custom Work Flow Menu (ไฟล์ .INI หรือ .MNU)
กำหนดใน __FSYS.INI
_InvWFMenu=ชื่อไฟล์ [.INI หรือ .MNU]
หรือ
_InvWFMenu.หมวดบิล=ชื่อไฟล์ [.INI หรือ .MNU]
ภายในเมนูไฟล์ ใช้ format เหมือนกับเมนูรายงาน ฯลฯ เช่น
ไฟล์คำสั่ง.WFC=ข้อความที่แสดงในเมนู 

2. Work Flow Command File (ไฟล์ .WFC)
สำหรับเขียนคำสั่ง Work Flow มีคำสั่งสำหรับใช้ดังนี้

WFCmd=n [0=copy (defaut), 1=change, 2=copy auto, 3=change auto, 4=send to other bdir]
สำหรับคำสั่ง 0,1 นั้น โปรแกรมจะหยุดรอที่หน้าจอ edit ให้ user แก้ไขเนื้อหาในบิล แล้ว กด F10 confirm หรือ Esc ยกเลิก

WFNewType=หมวดบิล ถ้าเว้นว่าง แปลว่าไม่เปลี่ยนหมวด

WFNewBDir=ชื่อชุดข้อมูล ใช้กับ cmd 4 send to other bdir เท่านั้น ถ้าเว้นว่าง แปลว่าไม่เปลี่ยนชุดข้อมูล

WFChgVal=n กำหนดให้เปลี่ยนค่าบางฟิลด์ +1=เลขที่บิล (run ใหม่), +2=วันที่ (ใส่วันที่ปัจจุบัน), +16=ไม่ให้ใส่เลขที่ต้นฉบับ ในช่องอ้างถึง (ปกติจะใส่ให้อัตโนมัติ)

WFRefTxt=n กำหนดให้สร้างข้อความ Refer {REF#เลขใบต้นฉบับ วันที่ต้นฉบับ}{BREF#เลขอ้างถึงเดิมของต้นฉบับ} ขนาดของ ref ยาวเกินช่องหมายเหตุ เปลี่ยนเป็น {#เลขใบต้นฉบับ วันที่ต้นฉบับ}{~#เลขอ้างถึงเดิมของต้นฉบับ} 1=ใส่ในหมายเหตุ (ถ้าช่องหมายเหตุว่าง) 2=บังคับใส่ในช่องหมายเหตุ ไม่สนใจว่าว่างหรือไม่ 3=ใส่ในช่องหมายเหตุ ถ้าว่าง และ ไม่ต้องเอาไปใส่ในบรรทัดรายการอีก (ต้องใช้ควบกับ 4) +4=ใส่เพิ่มในบรรทัดรายการ (สามารถใช้ควบกับ 1 หรือ 2 หรือ 3) เช่น 6 (2+4) คือ ใส่ทั้งช่องหมายเหตุ และบรรทัดรายการ

WFBefore=n กำหนดให้ทำงาน/ตรวจสอบสถานะก่อนคัดโอนบิล  
1=ผ่านรายการ, 2=ยกเลิก, 3=คืนรายการ  *note: คำสั่ง 1-3 โปรแกรมจะตรวจสถานะบิลด้วยอัตโนมัติ
4=เฉพาะบิลที่ไม่ผ่านรายการ, 5=เฉพาะบิลที่ผ่านรายการ, 6=เฉพาะบิลที่ยกเลิก, 7=เฉพาะบิลที่ไม่ยกเลิก *note: คำสั่ง 4-7 โปรแกรมจะตรวจสถานะบิลเท่านั้น

WFAfter=n กำหนดให้ทำงานหลังจากคัดโอนบิลสำเร็จ ค่า 1-3 เหมือนกับ WFBefore 
มีเพิ่มเติม
 +8 สั่งลบบิลต้นฉบับ  สามารถใช้ควบกับคำสั่งคืนรายการ เช่น 11 (3+8)
 +16 กระโดดไปที่ จอบิลที่คัดโอนไปใหม่ (หมวดใหม่)
}}}

{{{
ข้อแตกต่าง ระหว่างคำสั่ง copy + delete after กับคำสั่ง change คือ

คำสั่ง change จะทำงานโดย ใช้ข้อมูล record เดิมใน database
เปลี่ยน หมวดบิล (และ/หรือ เลขที่บิล, วันที่) แล้วทำงานคำสั่ง UPDATE 
(ถ้าอยู่ในจอ edit จะอยู่ใน โหมด แก้ไข โดยกด F4)
ดังนั้น change จะทำงานได้กับ บิลที่ไม่ได้ถูก lock หรือบิลที่ยังไม่ได้ผ่านรายการเท่านั้น

ขณะที่ copy จะทำงานโดย คัดลอกข้อมูล เพื่อไป INSERT record ใหม่ใน database
เสร็จแล้ว จึงกลับมา DELETE record ต้นฉบับ
คล้ายกับการกด F5 เพิ่ม แล้วกด F5 อีกครั้ง copy ข้อมูลเดิมมาใส่
หลังจาก save แล้ว กลับไปสั่งลบ โดยกด F6 ที่ข้อมูลเดิม
ดังนั้น copy สามารถทำงานไปก่อน โดยที่บิลนั้น lock อยู่
หลังจากสำเร็จ จึงค่อยสั่งคืนรายการ เพื่อลบบิลต้นฉบับ

ตัวอย่างคำสั่ง WFC


โค๊ด:
#คัดลอกบิลไปหมวด XX
WFNewType=XX
WFRefTxt=3

โค๊ด:
#ย้ายบิลไปหมวด YY
WFNewType=YY
WFCmd=1
WFRefTxt=1
}}}

{{{
ตอนนี้ ยังมีการปรับปรุง เกี่ยวกับคำสั่งย่อยๆ อีกเล็กน้อย 
เพื่อให้ทำงานได้ครอบคลุมหลากหลายยิ่งขึ้น

อธิบายต่อ เกี่ยวกับ WFCmd=4 send to other bdir
ทำงานคล้ายกับ copy แต่ไม่มีเรื่องหยุดรอให้ edit ก่อน save
มีความพิเศษคือ สามารถใช้ส่งข้ามชุดข้อมูลได้ และไม่มีการตรวจเช็ค ว่าหมวดบิลนั้น มีกำหนดใน database หรือไม่ (ขณะที่คำสั่งอื่น ถ้าหมวดบิลนั้นไม่มี จะไม่สามารถ save ได้)
และไม่ทำงานใดๆ ตามคำสั่งตัวหนอน เมื่อ save ด้วย

นอกจากนี้ยังมีข้อจำกัดคือ ไม่สามารถเปลี่ยน เลขที่/วันที่
ถ้าไม่ระบุชุดข้อมูล แปลว่าใช้ชุดข้อมูลเดียวกัน
ถ้าไม่ระบุหมวดบิลใหม่ แปลว่าใช้หมวดบิลเดิม
ถ้าไม่ระบุทั้งคู่ ก็ error ครับ ข้อมูลซ้ำ เพราะ INSERT ไปที่บิลเลขเดิม

แต่คำสั่ง WFBefore และ WFAfter ยังสามารถใช้ได้ สามารถสั่งผ่านรายการ/คืนรายการ หรือลบบิลต้นฉบับ หลังจากส่งบิลไปเสร็จแล้ว

ดังนั้น เราจึงสามารถใช้ประโยชน์ ในแง่การใช้ทำสำเนา (carbon copy) 
โดยส่งไปที่บิลหมวดอื่น หรือส่งไปที่ชุดข้อมูลอื่น

ไฟล์ที่ update คือ _Inv1_.EXE (_Inv2_.EXE, _Inv3_.EXE)

เกือบลืม คีย์สำหรับเรียก Work Flow Menu จากหน้าบิลขายคือ Ctrl+F8

13/8/52
ยกเลิก ความสามารถนี้ใน _Inv*.EXE เนื่องจากทำให้ไฟล์มีขนาดโตมา มีปัญหาเรื่อง Memory Free 
เอาไปใส่ไว้ใน S_Inv1_.EXE (ดูด้านล่าง) 
}}}

{{{
ลืมแจ้ง update อีกเรื่องหนึ่ง
ที่ทำเพิ่มไปแล้ว พร้อมๆ กับ _InvCustomListType
คือ คำสั่งต่อเนื่องจาก Work Flow
_InvWFAutoCmd=ชื่อไฟล์.WFC

สำหรับกำหนดให้ ทำงานคำสั่ง Work Flow อัตโนมัติ
เมื่อมีการกด F10 เพื่อ save หลังจาก เพิ่ม (F4) หรือ แก้ไข (F5)

เพิ่มเติม อีกนิด
สำหรับโปรแกรมปกติที่ใช้ _Inv1_.EXE จะไม่มีความสามารถของ WF นะครับ
จะต้องใช้ S_Inv1_.EXE + M_Inv1_.EXE เท่านั้น

อีกเรื่อง ได้เพิ่ม Hot Key สำหรับ WF นอกจาก Ctrl+F8 แล้ว (ซึ่งต้องใช้ 2 มือช่วยกันกด และผมไม่ถนัดเลย เวลา test บ่อยๆ) ยังสามารถกด Alt+W ได้อีกด้วย

สำหรับด้าน บิลซื้อ ตอนนี้ก็เพิ่ม ปรับ _PoCustomListType กับ WF 
ให้ทำงานได้แบบเดียวกับบิลขายแล้ว (แต่ยังไม่ได้ test จ้า)

}}}

{{{
6-10-52

ตามที่ adm เสนอ ให้โปรแกรมหา maxrunno ระหว่างหมวดบิลใน workflow
เพื่อแก้ปัญหา กรณี move บิลจาก หมวด A ไป หมวด B
จะเกิดปัญหา runno ของ หมวด A กลับไปใช้เลขเดิม
เนื่องจาก เลขบิลล่าสุด ถูก move หายไปแล้ว
ดังนั้นถ้าให้โปรแกรมใช้ runno ที่มากที่สุด ของทั้งหมวด A และ B
ก็จะทำให้สามารถ หมวด A run ได้ถูกต้อง

เพิ่มคำสั่ง
_InvCrossRunNo.หมวดบิล=หมวดบิล,หมวดบิล,...
_PoCrossRunNo.หมวดบิล=หมวดบิล,หมวดบิล,...
การทำงาน
โปรแกรมจะหา runno ของหมวดบิลที่ใช้อยู่ก่อน เหมือนปกติ
หลังจากนั้น จะตรวจสอบคำสั่ง CrossRunNo
ถ้ามี ก็จะหา runno ของหมวดบิล ตามที่ระบุ
และเลือกใช้ runno ที่เป็นเลขมากที่สุด

ตัวอย่าง 
_InvCrossRunNo.I0=I1,I2
}}}

{{{
28/6/2553
ปรับปรุงคำสั่ง WFCmd
เพิ่ม WFCmd=5 update to refer
หลักการคือ WFNewType=หมวดบิล มีหมวดบิลตรงกับที่หมวดบิลที่ระบุอ้างถึงในบิลใบนั้น
โปรแกรมจะทำการ update(หรือเพิ่มถ้ายังไม่มี)บิลตามหมวดและเลขที่ ตามที่ระบุในอ้างถึง
ใช้ประโยชน์กรณี อพาร์ตเมนต์ ที่ต้องการ update ต้นแบบของใบแจ้งหนี้ล่าสุด เพื่อใช้ในอ้างถึงในการเปิดบิลครั้งต่อไป (ได้ update เลขที่มิเตอร์น้ำ/ไฟฟ้าล่าสุดติดมาด้วย)

- ถ้าบิลที่จะ update นั้นผ่านรายการแล้ว โปรแกรมจะฟ้อง error
- ทำงานคล้ายคำสั่ง 4 send to other bdir คือ สามารถใช้ส่งข้ามชุดข้อมูลได้ และไม่มีการตรวจเช็ค ว่าหมวดบิลนั้น มีกำหนดใน database หรือไม่ (ขณะที่คำสั่งอื่น ถ้าหมวดบิลนั้นไม่มี จะไม่สามารถ save ได้) และไม่ทำงานใดๆ ตามคำสั่งตัวหนอน เมื่อ save ด้วย
}}}

{{{
9/7/2553
WFChgVal=n กำหนดให้เปลี่ยนค่าบางฟิลด์ +1=เลขที่บิล (run ใหม่), +2=วันที่ (ใส่วันที่ปัจจุบัน), +16=ไม่ให้ใส่เลขที่ต้นฉบับ ในช่องอ้างถึง (ปกติจะใส่ให้อัตโนมัติ)
เพิ่มเติม เพื่อให้รองรับคำสั่ง _InvSaleAsLogin
+32=reset field พนักงาน (sale) 
+64=reset field หมายเหตุ
+128=reset field ชื่อสรุปบิล
}}}
|Default|@@""" XCostLevel = 0 """@@|
เป็นคำสั่งใช้กับงาน <<tag MOD "Modify Job">> เรื่อง เกี่ยวกับ [[ต้นทุนแฝง]]
[[ต้นทุนแฝง]] แบ่งเป็น 3 ระดับ คือ ~XCost, Expense และ Deposit 

ถ้าต้องการให้ผนวก ~XCost level ต่างๆ เข้ากับต้นทุนปกติ ทำให้รายงานเดิมทั้งหมด เช่น รายงานวิเคราะห์ขาย รายงานสต็อกสินค้า ฯลฯ สามารถแสดงต้นทุนแบบผนวกแทนอัตโนมัติ โดยไม่แก้ไขรายงานเดิม 

| 1 |~XCost |
| 2 |Expense |
| 4 |Deposit |
| 128 |กรณีที่ไม่ต้องการให้ผนวก แต่เปิดการทำงาน[[ต้นทุนแฝง]]เราจะใช้ ค่าที่นอกเหนือจาก 3 level ดังกล่าว |
| +64 |Direct input ป้อน[[ต้นทุนแฝง]] โดยตรงที่จอ สินค้าเข้าสต็อค ใช้วิธี เคาะ space แล้วกด * (ดอกจัน)|

ตัวอย่าง การผสมค่า ~XCost
| 3 (1+2) |~XCost + Expense |
| 5 (1+4) |~XCost + Deposit |
| 6 (2+4) |Expense + Deposit |
| 7 (1+2+4) |~XCost + Expense + Deposit |

> รายการ[[ต้นทุนแฝง]] ที่เกิดจาก Direct input จะมีข้อสังเกตคือ เลขที่อ้างถึงเป็น ''**''

ดูเพิ่มเติม: [[ต้นทุนแฝง]]
|Default|@@"""_BatchDelay""" = [[_DialogDelay]]/20 @@|
ตั้งเวลา หน่วยเป็น millisec (1/1000 วินาที) ใช้หน่วงเวลากรณีแสดงหน้าต่างข้อความ ภายใน loop การทำงานแบบ Batch ที่ขึ้นหน้าต่างติดต่อกันจำนวนมาก เช่น การสั่งคำนวณยอดสต็อกสุดท้ายใหม่ 

ถ้าไม่มีการกำหนดค่านี้ โปรแกรมจะใช้ค่าเท่ากับ [[_DialogDelay]]/20 แทน
|Default|@@""" _BrowsePage = OFF """@@|
ถ้ากำหนดเป็น ON จะทำให้การแสดงข้อมูลของแต่ละ module เป็นแบบ Single Page แทนที่จะเป็นแบบ list รายการข้อมูลตามปกติ มีประโยชน์คือ สำหรับกรณีที่ connection database นั้นช้ามากๆ ถ้าโปรแกรมแสดง list ตามปกติ จะต้องเสียเวลาอ่านข้อมูลจาก database เป็นจำนวนมาก ทำให้เสียเวลานานกว่าการแสดงข้อมูลแบบ Single Page 
|Default|@@""" _BuyTaxChain = OFF """@@|
กรณีที่ใช้ [[_BuyTaxChain]]=ON จะมีผลเปลี่ยน sequence การป้อนข้อมูลภาษีซื้อ

ในการเพิ่มข้อมูลภาษีซื้อ เมื่อกด F10 เพื่อ save ข้อมูลภาษีซื้อ โปรแกรมจะส่ง วันที่/เลขที่ใบกำกับภาษี ของรายการภาษีซื้อนั้น ข้ามไปป้อนข้อมูล เพิ่มหนี้เจ้าหนี้ และ สต็อกสินค้าเข้า ก่อนที่จะกลับมาเพิ่มข้อมูลภาษีซื้อรายการต่อไป

นอกจากนี้ ยังมีผลกับ หน้าจอแสดงรายการภาษีซื้อ (browse list) เราสามารถใช้วิธีกด Space แล้วกด F1 เพื่อเข้าไปป้อนข้อมูล เพิ่มหนี้เจ้าหนี้ หรือสต็อกสินค้าเข้า ที่มี วันที่/เลขที่เอกสารเดียวกัน 

คำสั่ง [[_BuyTaxChain]]=2 ทำงานเหมือน [[_BuyTaxChain]]=ON และเพิ่มกรณีสั่งลบรายการภาษีซื้อ โปรแกรมจะส่งคำสั่งไปลบรายการ เพิ่มหนี้เจ้าหนี้ และสต็อกสินค้าเข้า อัตโนมัติ 
|Default|@@""" _CSVCode = 1 """@@|
กำหนดรหัสภาษาไทย ของ export ไฟล์ .CSV 
* 0 = รหัส เกษตร 
* 1 = รหัส สมอ. (windows-tis) 
|Default|@@""" _CSVDate = 0 """@@|
กำหนด format วันที่ สำหรับ export ไฟล์ .CSV
* 0 = yyyy/mm/dd 
* 1 = dd/mm/yyyy 
* 2 = mm/dd/yyyy 
|Default|@@""" _CSVStr = 1 """@@|
กำหนดเงื่อนไขการใส่ quote ครอบข้อความ สำหรับ export ไฟล์ .CSV กรณีที่ภายในข้อความมี ตัวอักษร comma (,) หรือ pipe (|) จะใส่เครื่องหมาย double quote ครอบข้อความอัตโนมัติ แต่ถ้าไม่มีตัวอักษรดังกล่าว จะพิจารณาจากค่าที่กำหนดโดยคำสั่งนี้ 
* 0 = ไม่ต้องใส่ quote 
* 1 = ใส่ single quote (') นำหน้าข้อความ 
* 2 = ใส่ double quote (") ครอบข้อความ ทุกกรณี 
>note: ถ้าภายในข้อความมีตัว double quote โปรแกรมจะแปลงเป็น single quote 2 ถ้าภายในข้อความมีตัว return (ขึ้นบรรทัดใหม่) โปรแกรมจะแปลงเป็น tab 
|Default|@@""" _CheckBreakInterval = 2 """@@|
สำหรับการทำงานที่ต้องวน loop จำนวนมากๆ ใช้กำหนดจำนวน loop ที่ให้โปรแกรมเช็คว่า มีการกดคีย์ Esc หรือไม่ ปกติคือ เมื่อวนครบ 2 รอบ ก็จะเช็คคีย์ 1 ครั้ง ถ้ากำหนดค่านี้น้อยลงเช่น 1 จะทำให้โปรแกรมทำงานช้าลง เพราะต้องเสียเวลาเช็คคีย์บ่อย แต่ถ้ากำหนดค่านี้มากไป โปรแกรมทำงานเร็วขึ้น แต่จะทำให้การตอบสนองต่อการกดคีย์ไม่ดี 
|Default|@@""" _ChkBtr = ON """@@|
ให้โปรแกรมตรวจสอบก่อนเข้าโปรแกรมว่ามี Btrieve database manager ทำงานอยู่หรือไม่ 
ให้โปรแกรมซ่อนชื่อลูกค้า โดยกำหนดเงื่อนไขจากข้อความในช่องผู้ติดต่อ สามารถใช้ wildcard และ , (comma) เช่น @@"""_CustomerHideContact"""=*ซ่อน*,*{H}*@@
ให้โปรแกรมซ่อนชื่อลูกค้า โดยกำหนดเงื่อนไขจากข้อความในช่องหมวดลูกค้า สามารถใช้ wildcard และ , (comma) เช่น @@"""_CustomerHideCusGroup""" = ส่วนตัว,*เลิก@@
|Default|@@""" _CustomerShowQInf=-1 """@@|
(มี.ค.53) ใช้ควบคุมการแสดงข้อมูลเพิ่มเติม (QuickInfo) ที่ด้านล่างของจอ Browse 

ดูรายละเอียดที่ [[_StockShowQInf]]
|Default|@@""" _DelayFactor = 1.0 """@@|
ปกติจะมีค่าเป็น 1 ใช้เป็นตัวคูณสำหรับ ค่า delay ในการ idle โปรแกรม เพื่อหน่วงให้โปรแกรมทำงานช้าลง และแบ่งเวลา CPU ให้ process อื่นได้ทำงานมากขึ้น 

เช่น กรณี [[_DialogDelay]] กำหนดเป็น 100 millisec ถ้าเปลี่ยนค่า [[_DelayFactor]] เป็น 1.5 ก็จะกลายเป็น delay จริง 150 millisec 
|Default|@@""" _DialogDelay = 100 """@@|
ค่า default การหน่วงเวลา กรณีแสดง หน้าต่างข้อความต่างๆ ของโปรแกรม (แบบที่ไม่ต้องรอให้ผู้ใช้กดคีย์) หน่วยเป็น millisec (1/1000 วินาที) (คูณด้วย [[_DelayFactor]]) 
ใช้สำหรับการแสดงผลตัวเลข (ในรายงาน) โดยการแปลงตัวเลข (0123456789 .-+) ให้เป็นตัวอักษรตามที่กำหนด เปรียบเสมือนรหัสลับ ป้องกันไม่ให้ผู้อื่นมาอ่านค่าตัวเลขในรายงาน เช่น ใช้ปกปิดต้นทุนในรายงาน จะต้องใช้คู่กับการกำหนด [[Field Picture]] ให้เป็น #E 

ตัวอย่าง 
| [[_EncryptNumPhase]] | ตัวเลข | แสดงผล |h
| abcdefghijklmn | 325.00 | dcflaa |
|Default|@@""" _ExportLevel = 7 """@@|
กำหนดระดับผู้ใช้ ที่มีสิทธิ์เลือกให้พิมพ์ออกไฟล์ (.PRN, .TXT, .CSV) 

ค่า default 7 คือ ผู้ใช้ที่มีระดับตั้งแต่ user7 จึงสามารถสั่ง export ได้ 

| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
| 5 | user5 |
| 6 | user6 |
| 7 | user7 |
| 8 | บัญชี |
| 9 | ผู้จัดการ |
| 10 | supervisor |
ชุดคำสั่งที่เกี่ยวข้องมีดังนี้
| [[_ExportPath1]] | [[_ExportPath2]] | [[_ExportPath3]] |
| [[_ExportPath1.PRN]] | [[_ExportPath2.PRN]] | [[_ExportPath3.PRN]] |
| [[_ExportPath1.TXT]] | [[_ExportPath2.TXT]] | [[_ExportPath3.TXT]] |
| [[_ExportPath1.CSV]] | [[_ExportPath2.CSV]] | [[_ExportPath3.CSV]] |

สำหรับกำหนด directory สำหรับเก็บไฟล์ที่ export 
[[_ExportPath1]] ใช้กรณีสั่ง export โดยตั้ง พิมพ์ออก เป็น lpt1 
[[_ExportPath2]] ใช้กรณีสั่ง export โดยตั้ง พิมพ์ออก เป็น lpt2 
[[_ExportPath3]] ใช้กรณีสั่ง export โดยตั้ง พิมพ์ออก เป็น lpt3 (server) 

''ลำดับการเลือกใช้ [[_ExportPath*]]''
# ใช้ตามคำสั่ง ที่กำหนดแยกตามชนิดของไฟล์ที่ export (@@_~ExportPath#.xxx@@) 
# ถ้าไม่มี ก็จะใช้ค่าจากคำสั่งที่ไม่ระบุชนิดไฟล์ (@@_~ExportPath#@@) 
# ถ้าไม่มี ก็จะใช้ directory ของ ชุดข้อมูล นั้นๆ เป็นที่เก็บ export ไฟล์ ยกเว้นมีคำสั่ง [[_PrintExportToTemp]] = ON ก็จะเก็บ export ไฟล์ ไว้ใน temp directory 

''ลำดับการเลือกใช้ temp directory''
# ถ้ากำหนด [[_UseLocalTmp]] = ON จะใช้ directory ที่กำหนดโดย คำสั่ง TMP หรือ TEMP ตามลำดับ ใน environment DOS ของคอมพิวเตอร์เครื่องนั้นๆ เช่น C:\WINDOWS\TEMP 
# ใช้ directory ชื่อ (btr) ที่อยู่ใน directory ของโปรแกรม scraft 
ดูรายละเอียดใน [[_ExportPath*]]
<<tiddler "_ExportPath1"">> 
<<tiddler "_ExportPath1">> 
<<tiddler "_ExportPath1">> 
<<tiddler "_ExportPath1">> 
<<tiddler "_ExportPath2">> 
<<tiddler "_ExportPath2">> 
<<tiddler "_ExportPath2">> 
<<tiddler "_ExportPath1">> 
<<tiddler "_ExportPath3">> 
<<tiddler "_ExportPath3"##"_ExportPath3">> 
<<tiddler "_ExportPath3">> 
|Default|@@""" _FCYBegin = 1/1 """@@|
กำหนด วันที่/เดือน สำหรับเริ่มรอบปีบัญชี Fiscal Year 
|Default|@@""" _GVLimitVType = ON """@@|
ใช้สำหรับกำหนดให้โปรแกรม ต้องแสดงรายการหมวดใบสำคัญ มาให้เลือก ก่อนเข้าไปทำใบสำคัญหรือไม่
ดูคำอธิบายจาก [[_InvLimitInvType]]
ใช้สำหรับซ่อนเล่มใบสำคัญ ไม่ให้เลือกใช้ตอนเข้าไปเปิดใบสำคัญลงรายการ
ดูคำอธิบายจาก [[_InvCfgHideList]]
|Default|@@""" _GuestLogin = ON """@@|
สำหรับชุดข้อมูลที่ ยังไม่มีรายชื่อ/รหัสผ่านของผู้ใช้ 
เดิม โปรแกรมรุ่นเก่า จะยินยอมให้เข้าไปใช้ชุดข้อมูลนั้นอัตโนมัติโดย ไม่มีชื่อผู้ใช้

ส่วน โปรแกรมรุ่นใหม่ กรณีเข้าไปใช้ชุดข้อมูลนั้นอัตโนมัติ จะใช้ชื่อผู้ใช้เป็น ''@@ * @@'' (ดอกจัน)
แต่เราสามารถกำหนดให้กลับไปทำงานแบบโปรแกรมรุ่นเดิม โดยใช้ค่า OFF

> ข้อแตกต่างระหว่างมีชื่อผู้ใช้ กับไม่มีชื่อผู้ใช้ อยู่ที่ความสามารถในการกำหนด """__FSys.INI""" เพื่อ customize แบบมีเงื่อนไขแตกต่างกันตามชื่อ user ได้
|Default|@@""" _InvAllowChangeDsc = ON """@@|
กำหนดระดับ user ต่ำสุด ที่ยินยอมให้แก้ไขช่อง__ส่วนลด__ต่อรายการสินค้าในบิล

<<tiddler "securityAllow">>
ค่าเพิ่มเติม
| +100 |ยกเว้น ให้แก้ไขส่วนลดของ สินค้า ที่มี * นำหน้าชื่อ |

ตัวอย่าง 
[[_InvAllowChangeDsc]]=104 เป็นการ lock ไม่ยินยอมให้ระดับที่ต่ำกว่า user4 แก้ไข แต่มีข้อยกเว้น กรณีที่สินค้านั้นมีชื่อ นำหน้าด้วย * (ดอกจัน) สามารถเข้าไปใส่ส่วนลดได้

ดูเพิ่มเติม: [[_InvDspDscNSize]] ซ่อนคอลัมน์ส่วนลด ไม่ให้ user เห็น
|Default|@@""" _InvAllowChangeNo = ON """@@|
ใช้สำหรับ lock ฟิลด์__เลขที่__บิลขาย ไม่ให้ user ที่มีระดับต่ำกว่าระดับที่กำหนด เข้าไปเปลี่ยนเลขที่ในฟิลด์ดังกล่าว ดังนั้นเลขที่จะต้องเกิดจากการ run เลขอัตโนมัติของโปรแกรมเท่านั้น 
<<tiddler "securityAllow">>
|Default|@@""" _InvAllowChangePrice = ON """@@|

กำหนดระดับ user ต่ำสุด ที่ยินยอมให้แก้ไขช่อง__ราคา__สินค้าในบิล
<<tiddler "securityAllow">>
ค่าเพิ่มเติม
| +100 |ยกเว้น ให้แก้ไขราคาของ สินค้า ที่มี * นำหน้าชื่อ |
| +200 |ยกเว้น ให้ใส่ราคาในบรรทัดที่ราคาเป็น 0 แต่ถ้าใส่ราคาแล้ว จะกลับไปแก้ไขอีกไม่ได้ |

ตัวอย่าง 
[[_InvAllowChangePrice]]=304 เป็นการ lock ไม่ยินยอมให้ระดับที่ต่ำกว่า user4 แก้ไข แต่มีข้อยกเว้น กรณีที่สินค้านั้นมีชื่อ นำหน้าด้วย * (ดอกจัน) หรือ บรรทัดที่ยังไม่ราคา สามารถเข้าไปใส่ราคาได้
|Default|@@""" _InvAllowChangeQty = ON """@@|
ใช้สำหรับ lock ฟิลด์__จำนวน__ในบิลขาย ไม่ให้ user ที่มีระดับต่ำกว่าระดับที่กำหนด เข้าไปแก้ไขจำนวนในฟิลด์ดังกล่าว 
<<tiddler "securityAllow">>
|Default|@@""" _InvAllowPostPrint = ON """@@|
ใช้ควบคุมเพื่อ lock ไม่ให้พิมพ์บิลขาย ที่ผ่านรายการแล้ว
<<tiddler "securityAllow">>
/%
| ON |อนุญาตให้พิมพ์บิลทุกเงื่อนไข (default) |
| 0 หรือ OFF |ไม่อนุญาตให้พิมพ์บิลที่ผ่านรายการแล้ว |
| 1 |ไม่อนุญาต ให้พิมพ์บิลที่ผ่านรายสต็อกไม่สมบูรณ์ |
| 2 |ไม่อนุญาต ให้พิมพ์บิลที่ผ่านรายการภาษีไม่สมบูรณ์ |
| 3 |ไม่อนุญาต ให้พิมพ์บิลที่ผ่านรายสต็อกหรือภาษีไม่สมบูรณ์ |
| 4 |ไม่อนุญาต ให้พิมพ์บิลที่ผ่านรายการลูกหนี้ไม่สมบูรณ์ |
| 5 |ไม่อนุญาต ให้พิมพ์บิลที่ผ่านรายสต็อกหรือลูกหนี้ไม่สมบูรณ์ |
| 6 |ไม่อนุญาต ให้พิมพ์บิลที่ผ่านรายภาษีหรือลูกหนี้ไม่สมบูรณ์ |
| 7 |ไม่อนุญาต ให้พิมพ์บิลที่ผ่านรายการไม่สมบูรณ์ |

กรณี ค่า 0-7 รวมถึง ไม่อนุญาตกรณีบิลที่ยกเลิก หรือยังไม่ผ่านรายการด้วย
%/
|Default|@@""" _InvAllowPrintEdit = ON """@@|
ใช้ lock ไม่ให้แก้ไขหรือลบ บิลที่พิมพ์แล้ว
<<tiddler "securityAllow">>
|Default|@@""" _InvAllowReprint=ON """@@|
สำหรับ lock ไม่ให้สั่งพิมพ์บิลที่เคยพิมพ์ไปแล้ว
<<tiddler "securityAllow">>
|Default|@@""" _InvAutoListBOM = OFF """@@|
(บิลซื้อใช้@@ [[_PoAutoListBOM]] @@)
ใช้สำหรับหน้าจอเปิดบิลขาย เวลาป้อนรายการ ส่วนประกอบสินค้าต้องขึ้นอัตโนมัติ (ไม่ต้องกด)
เพราะป้องกันลืม หรือสับสน สินค้าบางตัวมีส่วนประกอบ บางตัวไม่มี

เดิมการใส่ส่วนประกอบสินค้าในบิล จะต้องลงที่ช่องรายการบรรทัดถัดจากสินค้าหลัก ใส่@@'' *. ''@@หรือ@@'' *- ''@@แล้วกด@@'' F1 ''@@โปรแกรมจึง list ส่วนประกอบมาใส่ลงมาให้ (ถ้ามี)
> บิลซื้อจะใช้'' *. ''หรือ@@'' *+ ''@@แล้วกด'' F1 ''
| 0 หรือ OFF |ไม่ใส่ส่วนประกอบอัตโนมัติ ทำงานแบบเดิม |
| 1 |ใส่ส่วนประกอบอัตโนม้ติ เมื่อกด F1 ในบรรทัดติดกับสินค้าหลัก โดยไม่ถาม |
| 2 |ตรวจสอบส่วนประกอบ หลังจากกด F1 เลือกชื่อสินค้าหลัก แล้วขึ้นมาถาม เหมือนกับกรณี กด F1 ที่บรรทัดติดกับสินค้าหลัก |
| 3 |ตรวจสอบส่วนประกอบ หลังจากด F1 เลือกชื่อสินค้าหลัก ถ้ามีส่วนประกอบ จะใส่ให้อัตโนมัติโดยไม่ถาม |

> นอกจากนี้ยังปรับปรุงเพิ่มเติม ปกติ ในบรรทัดที่ติดกับสินค้าหลัก จะต้องใส่@@'' *. ''@@หรือ@@'' *- ''@@ก่อนกด@@'' F1 ''@@แต่ถ้ามีคำสั่ง [[_InvAutoListBOM]] ที่ไม่ใช่ 0 การกด@@'' F1 ''@@ใส่ส่วนประกอบ จะทำงาน เมื่อบรรทัดนั้นมีแค่@@'' * ''@@ตัวเดียว ได้อีกเงื่อนไขหนึ่งด้วย
|Default|@@""" _InvAutoPackItm = -1 """@@|
ใช้สำหรับยุบรวมจำนวนสินค้า สำหรับบรรทัดที่มีรายการเหมือนกันหลายบรรทัด มารวมเป็นบรรทัดเดียวกัน
>เคยเห็นตัวอย่างจากระบบบิลของ ห้างแมคโคร พนักงานเขาจะยิง barcode ไปเรื่อยๆ พอตอนปิดบิล โปรแกรมจะตรวจยุบรายการที่เหมือนกัน ให้เหลือบรรทัดเดียว 

คำสั่งนี้ มีหลักการดังนี้
ตรวจบรรทัดรายการที่มี ชื่อเหมือนกัน, หน่วยนับเหมือนกัน, ส่วนลดเหมือนกัน, ราคาต่อหน่วยเหมือนกัน ถ้าพบก็ยุบไปรวมกับบรรทัดที่อยู่ก่อน ด้วยบวกจำนวนเข้าด้วยกัน

| -1 (default) |สำหรับบิลทั่วไป ไม่ยุบรวม ยกเว้นบิลที่มีคำสั่ง ~FCB ในหมวดบิล |
| 0 หรือ OFF |ไม่ต้องยุบรวม |
| 1 หรือ ON |ให้ยุบรวม |
ใช้สำหรับกำหนดให้ โปรแกรมแสดง list ของบิลต้นแบบ มาให้เลือกก่อน ตั้งแต่ตอนกด F5 เพื่อเปิดบิลใหม่  สามารถกำหนดดังนี้

@@"""
_InvAutoReferNo=หมวดบิล [ +wildcard ของเลขที่บิลต้นแบบ ]
"""@@
* ค่าที่กำหนด หมวดบิล 2 ตัวอักษรแรก ห้ามเป็น wildcard
* ถ้าไม่เจอบิลต้นแบบ ตาม wildcard ที่กำหนด โปรแกรมจะไม่แสดง list
* เมื่อตั้งต้นแบบแล้ว สามารถลบหมวดบิลต้นแบบออกไป เพื่อไม่ให้ผู้ใช้เห็นหมวดบิลดังกล่าว และเข้าไปแก้ไข เปลี่ยนแปลงบิลต้นแบบ
* สามารถกำหนดหมวดบิลเป็น ?? เช่น ??01* แปลว่า ต้นแบบใช้หมวดบิลเดียวกับ หมวดบิลที่กำลังเปิดบิลอยู่
* กรณี ค่าที่กำหนดไม่ใช่ wildcard โปรแกรมจะไม่แสดง list และ copy ต้นแบบมาใส่ให้อัตโนมัติ
* กรณี ค่าที่กำหนดลงท้ายด้วย & โปรแกรมจะไม่แสดง list ให้เลือก และ copy ต้นแบบเลขที่สูงสุด ตามเงื่อนไข wildcard มาใส่ให้อัตโนมัติ
ตัวอย่าง
| [[_InvAutoReferNo]] | คำอธิบาย |h
|TT |ให้แสดง list ของบิลต้นแบบ หมวด TT |
|~TT01* |ให้แสดง list ของบิลต้นแบบ หมวด TT ที่มีเลขที่ขึ้นต้นด้วย 01 |
|~TT00000000 |ใช้ บิลหมวด TT เลขที่ 00000000 มาใส่เป็นต้นแบบอัตโนมัติ |
|TT& |ใช้ บิลหมวด TT เลขที่สูงสุด มาใส่เป็นต้นแบบอ้ตโนมัติ |
|~TT01*& |ใช้ บิลหมวด TT เลขที่สูงสุด ที่ขึ้นต้นด้วย 01 มาใส่เป็นต้นแบบอ้ตโนมัติ |
|??000000 |ใช้ บิลหมวดเดียวกันกับบิลที่เปิด  เลขที่ 00000000 มาใส่เป็นต้นแบบอัตโนมัติ |
|TT& |ใช้ บิลหมวดเดียวกันกับบิลที่เปิด เลขที่สูงสุด มาใส่เป็นต้นแบบอ้ตโนมัติ |
<<<
เดิมการทำงานใช้บิลต้นแบบ สามารถทำได้ 2 วิธีคือ 
* ค้นหาบิลต้นแบบที่ต้องการ กด Space ให้แสดงรายละเอียด แล้วกด F5 ครั้งแรกเพื่อเพิ่มบิลใหม่ กด F5 ครั้งที่สอง เพื่อคัดลอกบิลที่แสดงรายละเอียด มาใส่ลงในบิลใหม่
* เลือกต้นแบบผ่านช่อง อ้างถึง โดยจะต้องเข้าไปเพิ่มบิลใหม่ก่อน แล้วไปที่ช่องอ้างถึง กด F1 เลือกหมวด+เลขที่บิลที่ต้องการ แล้วโปรแกรมก็จะถาม ให้คัดลอกรายละเอียดของบิลนั้นมาใส่
<<<

ดูเพิ่มเติม: [[_InvAutoReferStatus]] กำหนดเงื่อนไขเพิ่มเติม สำหรับสถานะของบิลที่ใช้เป็นต้นแบบ (ต.ค.52)

<<<(มิ.ย.53)
ปรับปรุงให้สามารถใช้ตัวแปร &Y&M ผสมกับ wildcard ได้ เช่น
[[_InvAutoReferNo]].IV=~V&Y&M*

นอกจากนี้ยังสามารถใช้ &y&m สำหรับตัวแปรเลข ปีเดือน ของเดือนที่แล้ว เช่น
[[_InvAutoReferNo]].IV=~V&y&m*

ใช้ประโยชน์กรณี ใบแจ้งหนี้ กิจการอพาร์ตเมนต์
ที่ต้องการอ้างถึงต้นแบบจากใบแจ้งหนี้เดือนที่แล้ว มาใช้

หมายเหตุ กรณี &y ไม่ได้หมายถึงเลขปีของปีที่แล้ว ไม่ได้หมายถึงเลขปี ของเดือนที่แล้ว
ดังนั้น กรณีปัจจุบันคือ ปีเดือน 5401 เลขปีเดือนของเดือนที่แล้วคือ 5312
สำหรับตัวแปรเลขปี ของปีที่แล้วนั้น ไม่มีให้ใช้<<<
ใช้สำหรับซ่อนหมวดบิล ไม่ให้เลือกใช้ตอนเปิดบิล 
สามารถกำหนดได้ดังนี้
@@"""
_InvCfgHideList = หมวดบิล1[,หมวดบิล2,..]
"""@@

ค่าหมวด สามารถกำหนดเป็น wildcard ก็ได้ เช่น
[[_InvCfgHideList]]=?2,SX,Q?
แปลว่า ซ่อนหมวดบิลที่ลงท้ายด้วย 2, หมวดบิล SX และหมวดบิลที่ขึ้นต้นด้วย Q

ผลของการซ่อนหมวดบิล ทำให้ไม่สามารถเข้าไปดูรายการบิลของหมวดนั้น จึงไม่สามารถแก้ไข ลบ หรือเพิ่มบิลของหมวดนั้นได้ มีผลเหมือนกับการ lock ข้อมูลของบิลหมวดนั้น

> เราสามารถสั่งซ่อนหมวดบิล ได้อีกวิธีหนึ่ง โดยใส่@@'' {H} ''@@ไว้ที่ข้อมูลหมวดบิล ในส่วนของชื่อบิล

ดูเพิ่มเติม: [[_InvLimitInvType]] [[_InvCustomListType]]
{{{
ขออภัย อธิบายผิดพลาดไปนิด
สรุปดังนี้
คำสั่งนี้มีผล ในจังหวะที่กด F10 Save ข้อมูล
ดังนี้จึงสามารถใช้กับบิลที่ ไม่ได้ผ่านรายการอัตโนมัติด้วย ~L

ถ้ากำหนด =OFF หรือ =0 จะมีผลคือ ไม่ฟ้องเตือนในขั้นตอน Save
ดังนั้น ถ้ากำหนด =1 คือ ยินยอมให้ save แต่ฟ้องเตือนตั้งแต่ user1
ถ้ากำหนด =10 คือ ยินยอมให้ save เฉพาะ supervisor ส่วนระดับต่ำลงมาฟ้อง error และไม่ยอมให้ save
ถ้ากำหนด =ON จะมีค่าเท่ากับ =9 ยินยอมให้ save ตั้งแต่ ผู้จัดการ ขึ้นไป

ถ้ากำหนด _InvChkCusLimit ให้ตรวจสอบในขั้นตอน F10 Save
จะมีผลกระทบ ทำให้โปรแกรม ไม่ตรวจจสอบวงเงิน ในขั้นตอนผ่านรายการซ้ำซ้อน

กลับกัน
ถ้ากำหนด =OFF หรือ =0 หรือไม่ได้กำหนด _InvChkCusLimit เลย
จะมีผลให้โปรแกรม ตรวจวงเงิน ในขั้นตอน ผ่านรายการแทน
และบันทึก error การผ่านรายการไว้ด้วย
ยกเว้น จะมีการกำหนด _PInvChkCusLimit 
เพื่อควบคุมแทน เช่น

ถ้าเราไม่ต้องการให้ตรวจสอบ วงเงินเลย
จะต้องกำหนด
_PInvChkCusLimit=OFF
_InvChkCusLimit=OFF (หรือไม่กำหนดเลย)

ถ้าเราต้องการให้ตรวจสอบ ทั้ง 2 จังหวะ คือเมื่อ F10 Save และเมื่อผ่านรายการ
จะต้องกำหนด
_InvChkCusLimit=ON
_PInvChkCusLimit=ON
}}}

{{{
ปรับปรุงล่าสุด 7-6-49

สำหรับลูกค้าที่มีการ ระบุยอดวงเงิน ในข้อมูลเพิ่มเติม
และบิลหมวดนั้น มีการระบุให้ผ่านรายการลูกหนี้

1. กรณีไม่ระบุอะไรเลย
(มีผลเหมือนกับระบุ _PInvChkCusLimit = ON)

2. กรณีระบุ _InvChkCusLimit แต่ไม่ระบุ _PInvChkCusLimit
โปรแกรมจะตรวจวงเงิน ในขั้นตอน F10 Save และจะไม่ตรวจสอบซ้ำในขั้นตอนผ่านรายการ
สามารถกำหนดเป็นค่า level ของ user ที่ยินยอมให้ผ่าน 
โดยโปรแกรมฟ้องเตือน ให้ตอบยืนยัน
หรือ กำหนดเป็น ON ซึ่งมีผลเหมือนกับกำหนดค่า _InvChkCusLimit=9 
ยอมให้ผู้ใช้ระดับตั้งแต่ ผู้จัดการ ขึ้นไป สามารถ Save บิลที่เกินวงเงินได้

ส่วนผู้ใช้ที่ระดับต่ำกว่า ที่กำหนด
ถ้ามีการกำหนดรหัสอนุมัติไว้ที่ชื่อผู้ใช้ ~CLIMIT 
โปรแกรมจะขึ้นมาถาม รหัสอนุมัติ ก่อนที่จะยอมให้ Save

3. กรณีระบุ _PInvChkCusLimit
ล่าสุดสามารถกำหนดเป็นค่า level ของ user ที่ยินยอมให้ผ่าน
หรือกำหนดเป็น ON ซึ่งมีผลเหมือนกับ _PInvChkCusLimit=9
นั่นคือ ยอมให้ user ระดับตั้งแต่ระดับ ผู้จัดการ ขึ้นไป ยืนยันผ่านยอดเกินวงเงินได้

ส่วนผู้ใช้ที่ระดับต่ำกว่า ที่กำหนด
ถ้ามีการกำหนดรหัสอนุมัติไว้ที่ชื่อผู้ใช้ ~CLIMIT 
โปรแกรมจะขึ้นมาถาม รหัสอนุมัติ ก่อนที่จะยอมให้ทำงานผ่านรายการต่อไป 
}}}

{{{
11/6/2551

โปรแกรมเดิม มีการตรวจสอบ ยอดหนี้ล่วงหน้า ที่เกิดจากการเปิดบิลล่วงหน้า 
โดยแสดงในคำเตือน แต่ยอดล่วงหน้าดังกล่าว ถูกบวกกลับ เสมือนหนี้นั้นยังไม่เกิดขึ้น 
ดังนั้นผลที่เกิดขึ้นกับบิลที่มีการแก้ไข ย้อนหลัง 
โปรแกรมจะใช้ยอดหนี้จนถึงวันที่ตามบิลนั้น 
ไม่เอายอดหนี้ของบิลที่ลงวันที่หลังจากนั้น 

ปรับปรุงโปรแกรมใหม่ แยกโปรแกรมเป็น 3 แบบ
ย้ายส่วน support _InvChkCusLimit ไปเป็นงาน MODIFY
เพื่อลดขนาดโปรแกรมลง
และทำเพิ่ม ส่วนเพิ่มบวกยอดหนี้จากเช็คที่ยังไม่เคลียร์/เด้ง

_Inv1_  ไม่มีการตรวจสอบเพื่อบวกกลับหนี้ล่วงหน้า จะใช้ยอดหนี้ล่าสุดเสมอ ทำงานเร็ว และไฟล์ .EXE มีขนาดเล็กกว่าเดิม สำหรับผู้ที่ไม่ใช้ _InvChkCusLimit
_Inv2_ มีบวกกลับยอดหนี้ล่วงหน้า เหมือนโปรแกรมรุ่นเดิม
_Inv3_ มีบวกกลับยอดหนี้ล่วงหน้า และบวกเพิ่มยอดหนี้จากเช็คที่ยังไม่เคลียร์/เด้ง ไฟล์ .EXE ขนาดใหญ่กว่า

ดังนั้น default ของโปรแกรมส่วนบิลขายจะเปลี่ยนไป 
ผู้ที่ต้องการใช้ _InvChkCusLimit จะต้องเข้าไป set ใน __FSYS.INI ว่า
_Inv1_=_Inv2_ สำหรับตรวจวงเงินแบบเดิม
หรือ 
_Inv1_=_Inv3_ สำหรับตรวจวงเงินแบบรวมยอดเช็คไม่เคลียร์
}}}
ให้โปรแกรมหา maxrunno ระหว่างหมวดบิลใน [[Work Flow]] เพื่อแก้ปัญหา กรณี move บิลจาก หมวด A ไป หมวด B จะเกิดปัญหา runno ของ หมวด A กลับไปใช้เลขเดิม เนื่องจาก เลขบิลล่าสุด ถูก move หายไปแล้ว ดังนั้นถ้าให้โปรแกรมใช้ runno ที่มากที่สุด ของทั้งหมวด A และ B ก็จะทำให้สามารถ หมวด A run ได้ถูกต้อง

@@"""
_InvCrossRunNo.หมวดบิล=หมวดบิล,หมวดบิล,...
"""@@
@@"""
_PoCrossRunNo.หมวดบิล=หมวดบิล,หมวดบิล,...
"""@@

การทำงาน
โปรแกรมจะหา runno ของหมวดบิลที่ใช้อยู่ก่อน เหมือนปกติ หลังจากนั้น จะตรวจสอบคำสั่ง ~CrossRunNo ถ้ามี ก็จะหา runno ของหมวดบิล ตามที่ระบุ และเลือกใช้ runno ที่เป็นเลขมากที่สุด

> ตัวอย่าง 
> [[_InvCrossRunNo]].I0=I1,I2
ใช้สำหรับเปลี่ยนรายการหมวดบิล ที่ใช้เลือกตอนก่อนเข้าไปเปิดบิล ซึ่งเรียงตามตัวอักษร ให้เป็นเมนูให้เลือกหมวดบิล ที่จัดลำดับหมวดบิลตามต้องการได้
สามารถกำหนดได้ดังนี้
@@"""
_InvCustomListType = หมวดบิล1,หมวดบิล2,...
"""@@

เมนูที่ขึ้นมาให้เลือก จะเรียงตามลำดับรายการหมวดบิลที่กำหนดนั้น ช่วยให้การใช้งานเปิดบิลสะดวกยิ่งขึ้น เนื่องจากเราสามารถลำดับ ให้หมวดบิลที่ใช้บ่อย ขึ้นมาอยู่เป็นรายการแรก นอกจากนี้ยังช่วยซ่อนหมวดบิลที่ไม่ได้ใช้งานแล้ว ให้เหลือแต่หมวดบิลที่ใช้งานอยู่ปัจจุบัน

* ค่าหมวดบิลที่กำหนด ไม่สามารถใช้ wildcard 
* สามารถใส่ ,* ต่อท้ายรายการหมวดบิล มีผลให้สามารถเข้าไปเลือกหมวดบิลทั้งหมด โดยใช้รายการหมวดบิลแบบเดิมได้อีกด้วย ตัวอย่างเช่น [[_InvCustomListType]]=IN,TI,*

(ปรับปรุง ส.ค.52)
สามารถกำหนดเงื่อนไข filter และข้อความที่ต้องการแสดงต่อท้ายหมวดบิล เพื่อให้แสดงเฉพาะบิลที่มีสถานะตามเงื่อนไขที่กำหนด ดังนั้น เราสามารถสร้างเมนูเพื่อให้เลือก บิลหมวดเดียวกัน แต่แยกเป็นบิลที่ชำระแล้ว กับบิลที่ค้างชำระก็ได้ เป็นต้น
@@"""
_InvCustomListType = หมวดบิล1[:filter ข้อความ],หมวดบิล2[:filter ข้อความ],...
"""@@

รหัสสำหรับเงื่อนไข filter
| กลุ่ม | รหัสกลุ่ม | flag | รายละเอียด |h
| การผ่านรายการ | L | - |ไม่ผ่านรายการ |
|~|~| * |ผ่านรายการแล้ว |
|~|~| e |error |
|~|~| ? |รอคืนรายการ |
|~|~| c |ยกเลิก |
|~|~| x |ไม่ยกเลิก มีค่าเท่ากับกำหนด -*e? |
|~|~| @ |ผ่านรายการขั้นสอง (ใบเสร็จ,ใบจ่าย) |
| การพิมพ์ | P | - |ยังไม่พิมพ์ |
|~|~| * |พิมพ์แล้ว |
| การชำระ | R | - |ไม่ชำระ/ยังไม่วางบิล |
|~|~|  n |วางบิลแล้ว มีค่าเท่ากับ ud |
|~|~| * |ชำระแล้ว มีค่าเท่ากับ sfo |
|~|~| s |ชำระแล้ว/ไม่ครบ some paid |
|~|~| f |ชำระแล้ว/ครบ full paid |
|~|~| o |ชำระแล้ว/เกิน over paid |
|~|~| u |วางบิลแล้ว/ยังไม่นัด unknown due |
|~|~| d |วางบิลแล้ว/นัดแล้ว already due |

ตัวอย่าง
[[_InvCustomListType]]=IN'':- (ไม่ผ่านรายการ)'',IN'':* (ผ่านรายการ)'',TI,*'':e (error)''

เราสามารถกำหนดเงื่อนไข filter โดยใช้ @@'' : ''@@ ต่อท้ายหมวดบิลที่กำหนด ตามด้วย รหัสกลุ่ม ''L'' หรือ ''P'' หรือ ''R'' (ต้องใช้ตัวอังกฤษใหญ่) ตามด้วย flag ที่ต้องการ (ใช้ตัวอังกฤษเล็ก) และเราสามารถกำหนดหลายกลุ่มในคราวเดียวกัน เช่น
* ''""":Le?"""'' (ผ่านรายการ error ''หรือ'' รอคืนรายการ)
* ''""":Le?R*"""'' (ผ่านรายการ error ''หรือ'' รอคืนรายการ ''และ'' ชำระแล้ว) 
> สังเกต logic ภายในกลุ่มจะเป็น ''หรือ'' แต่ logic ระหว่างกลุ่มจะเป็น ''และ''

* default ถ้าไม่ได้กำหนดรหัสกลุ่ม โปรแกรมจะ default เป็นกลุ่ม L เช่น TI:- คือ บิลที่ไม่ผ่านรายการ
* เงื่อนไขสำหรับหมวดบิลใดๆ ใช้ ''*:เงื่อนไข'' ซึ่งต้องเข้าไปเลือกหมวดบิล จากรายการหมวดบิลแบบเดิมอีกชั้นหนึ่ง เสร็จแล้วก็จะได้จอรายการบิล ที่แสดงเฉพาะตามเงื่อนไข filter ที่กำหนด
* เราจะต้องใส่เงื่อนไขทั้งหมดติดกันโดยไม่มีเคาะวรรค หลังจากที่เคาะวรรคจะเป็นข้อความที่เราต้องการให้ขึ้นในเมนู custom list เช่น TI:- (ไม่ผ่าน)
* สำหรับเงื่อนไข กลุ่มพิมพ์ และ กลุ่มชำระ จะมีผลกับบิลที่ไม่ยกเลิกเท่านั้น ดังนั้นถ้ามีการกำหนดให้ filter เงื่อนไขใน 2 กลุ่มนี้ บิลที่ยกเลิก จะไม่แสดงออกมาอัตโนมัติอยู่แล้ว เช่น :Lx มีผลเท่ากับ :P-*
|Default|@@""" _InvDspDscNSize = 8 """@@|
สำหรับบังคับค่า ขนาด(กว้าง) ของคอลัมน์__ส่วนลด__ ในจอบิลที่ป้อนข้อมูล กำหนดค่าได้ 0 - 10
* ถ้ากำหนดเป็น 0 จะซ่อนคอลัมน์นี้ ไม่ให้ผู้ใช้เห็น มีผลให้ไม่สามารถเข้าไปแก้ หรือใส่ข้อมูลช่องนี้ แต่โปรแกรมก็ยังเห็น ถ้ามีข้อมูลอยู่แล้ว ก็จะนำไปคำนวณมูลค่า หรือใช้พิมพ์ออกมาได้ด้วย
* ถ้าลดขนาดของช่องนี้ จะมีผลให้ ช่องรายการสินค้าขยายกว้างยิ่งขึ้น
ดูเพิ่มเติม: [[ปรับขนาด column หน่วยนับ, ส่วนลด ในจอบิล]]
|Default|@@""" _InvDspUnitNSize = 4 """@@|
สำหรับบังคับค่า ขนาด(กว้าง) ของคอลัมน์__หน่วยนับ__ ในจอบิลที่ป้อนข้อมูล กำหนดค่าได้ 0 - 12
* ถ้ากำหนดเป็น 0 จะซ่อนคอลัมน์นี้ ไม่ให้ผู้ใช้เห็น มีผลให้ไม่สามารถเข้าไปแก้ หรือใส่ข้อมูลช่องนี้ แต่โปรแกรมก็ยังเห็น ถ้ามีข้อมูลอยู่แล้ว ก็จะนำไปคำนวณมูลค่า หรือใช้พิมพ์ออกมาได้ด้วย
* ถ้าหดขนาดของช่องนี้ จะมีผลให้ ช่องรายการสินค้าขยายกว้างยิ่งขึ้น

ดูเพิ่มเติม: [[ปรับขนาด column หน่วยนับ, ส่วนลด ในจอบิล]]
{{{
10/3/2551

เดิมค่า default ของ _InvGetLastPrice=2
มีผลให้กรณีที่ สินค้าที่ไม่มีราคาขาย ในข้อมูลสต็อก/ตารางราคา
เมื่อเปิดบิล โปรแกรมจะเอาราคาที่เคยขายในบิลหมวดนั้น+ของลูกค้ารายนั้น มาใช้อัตโนมัติ

แก้ไขใหม่ ค่า default เป็น _InvGetLastPrice=-2
กรณีนี้ เมื่อเปิดบิล โปรแกรมจะไม่เอาราคาที่เคยขายมาใช้อัตโนมัติ
ดังนั้นในช่องราคา จะมีค่าเป็น 0 
แต่ ถ้ากด F1 ในช่องราคา จะขึ้น list ของราคาที่เคยขายมาให้เลือก

ข้อดีคือ เมื่อเปิดบิล เลือกชื่อสินค้า โปรแกรมจะไม่เสียเวลาหน่วงค้นหาบิลที่เคยขาย

นอกจากนี้ยังแก้ไขข้อผิดพลาด
กรณีที่ สินค้าที่ไม่มีราคาขาย ในข้อมูลสต็อก/ตารางราคา

เดิม เมื่อมีการเปลี่ยนแปลงจำนวนที่ขายในบิล
โปรแกรมจะพยายาม sync เอาราคาที่เคยขาย หรือราคา 0 มาเปลี่ยนใส่ให้

ใหม่ โปรแกรมจะพยายาม sync ราคาใหม่ตามจำนวนที่เปลี่ยนไป
ถ้ามีราคาในข้อมูลสต็อก/ตารางราคาเท่านั้น
ดังนั้นถ้าไม่มีราคาขายจากข้อมูลสต็อก/ตารางราคา
ราคาในหน้าบิล จะไม่เปลี่ยนแปลง


}}}
|Default|@@""" _InvLimitInvType = ON """@@|
ใช้สำหรับกำหนดให้โปรแกรม ต้องแสดงรายการหมวดบิล มาให้เลือก ก่อนเข้าไปเปิดบิลหรือไม่

| 0 หรือ OFF |ปิด ไม่ต้องแสดงรายการหมวดบิลมาให้เลือก ดังนั้นจึงเข้าไปในจอบิล แบบแสดงบิลรวมทุกหมวด |
| 1 หรือ ON |เปิด แสดงรายการหมวดบิล มาให้เลือก ก่อนเข้าไปเปิดบิล สามารถกด Esc ไม่เลือกหมวดบิล เพื่อเข้าจอบิล แบบแสดงบิลรวมทุกหมวด |
| -1 |บังคับ แสดงรายการหมวดบิล มาให้เลือก ไม่สามารถกด Esc เพื่อเข้าจอบิลรวมทุกหมวด เราสามารถใช้ค่านี้ ร่วมกับคำสั่งซ่อนหมวดบิล [[_InvCfgHideList]] เพื่อ lock ซ่อนข้อมูลบิลหมวดที่ต้องการได้ |
|Default|@@""" _InvLockBeforePrint = OFF """@@|
อ้างอิงจากคำสั่ง [[_InvAllowPrintEdit]]=OFF
ที่ใช้สำหรับ lock ไม่ให้แก้ไขบิลที่พิมพ์แล้ว

ปรากฏว่าเกิดช่วงสูญญากาศ
ระหว่างที่ user เครื่องหนึ่ง เปิดบิลและ save ไปแล้ว
กำลัง preview บิลที่จะสั่งพิมพ์
ซึ่งจังหวะนั้น โปรแกรมยังไม่ได้เปลี่ยนสถานะของบิลนั้น ว่าพิมพ์แล้ว
เนื่องจาก user อาจกด Esc เพื่อยกเลิก ไม่ได้สั่งพิมพ์จริงก็ได้

ขณะเดียวกัน ระหว่างที่ preview นั้น
ปรากฏว่า user อีกเครื่องหนึ่งเข้าไปแก้ไขบิลใบเดียวกันนั้นได้

ก็เลยเกิดปัญหา อ้าว... บิลที่สั่งพิมพ์ออกมา กับบิลที่ save (ถูกแก้ไขโดยอีก user)
มีรายการไม่ตรงกัน ทั้งๆ ที่มีการ lock ไม่ให้ใครแก้ไข

ถ้ากำหนด [[_InvLockBeforePrint]]=ON
เมื่อสั่งพิมพ์ โปรแกรมจะเปลี่ยนสถานะของบิลเป็นพิมพ์แล้ว ก่อนที่จะ preview
ดังนั้น อีกเครื่องหนึ่งก็จะติดเงื่อนไข [[_InvAllowPrintEdit]] ไม่สามารถแก้ไข
และถ้า user ที่สั่งพิมพ์นั้นตัดสินใจยกเลิก กด Esc ไม่ได้สั่งพิมพ์
โปรแกรมก็จะเปลี่ยนสถานะพิมพ์แล้วกลับมากลายเป็น ยังไม่พิมพ์
{{{
ใช้สำหรับ ให้ซ่อนไม่ให้ผู้ใช้เห็น บิลขาย วันที่ย้อนหลัง โดยสามารถกำหนดจำนวนวันที่ยินยอมให้ผู้ใช้เห็นวันที่ย้อนหลังได้ เช่น

_InvLockHiDate = 0
หมายความว่า สามารถเห็นบิลขายที่เปิดไปแล้วย้อนหลังได้ 0 วัน แปลว่าเห็นได้แค่บิลของวันนี้เท่านั้น

และเช่นเดียวกับคำสั่ง เกี่ยวกับควบคุมบิลขายอื่นๆ สามารถเจาะจงหมวดบิลได้เช่น

_InvLockHiDate.T1 = 1
หมายความว่า สำหรับบิลหมวด T1 ให้เห็นบิลย้อนหลังได้แค่ 1 วัน

ถ้ากำหนดให้เป็นค่าติดลบ เช่น -1 ก็จะกลายเป็นว่า บิลที่เปิดไปแล้ว user จะไม่สามารถมองเห็น

สามารถใช้กับระบบที่ออกแบบ ในลักษณะของ POS (Point Of Sale) ป้องกันไม่ให้ user ย้อนเข้าไปแก้ไขหรือเปลี่ยนแปลงบิลเก่าที่เปิดไปแล้ว

คำสั่งนี้ ไม่มีผลกับ user ที่มีระดับเป็น supervisor

update สิงหาคม 2009
สำหรับบิลซื้อก็ใช้ได้เหมือนกัน
_PoLockHiDate

เพิ่มคำสั่ง LockHiDate สำหรับ ใบเสร็จและใบจ่าย ตามนี้

_RcpLockHiDate ใช้กับ "วันที่" ของใบเสร็จ
_MrcLockHiDate ใช้กับ "วันที่" ของใบจ่าย

_RcpLockHiPDate ใช้กับ "วันที่นัด/ชำระ" ของใบเสร็จ
_MrcLockHiPDate ใช้กับ "วันที่นัด/ชำระ" ของใบจ่าย
}}}
{{{
คำสั่ง _InvSaleAsLogin มีการปรับปรุงใหม่ เมื่อ 15-3-48 ดังนี้

ส่วนของค่าที่เหมือนเดิมคือ
= 1 (หรือ ON) ใส่ชื่อ user ที่ login ลงใน field พนักงานขาย
= 2 ใส่ชื่อ user ที่ login ลงใน field หมายเหตุ
= 3 ใส่ชื่อ user ที่ login ลงใน field ชื่อสรุปบิล
= 4 ใส่ชื่อ user ที่ login ลงใน field ส่งของ
= 5 ใส่ชื่อ user ที่ login ลงใน field อ้างถึง
= 10 ให้ copy ชื่อพนักงานขายจากข้อมูลบิลครั้งก่อนมาใส่

ส่วนที่เพิ่มใหม่คือ 
ใช้ = 9 แทน = 10 ให้ copy ชื่อพนักงานขายจากข้อมูลบิลครั้งก่อนมาใส่

สำหรับค่า 1 - 5 ถ้า +20 เช่น =21 จะเป็นการใส่ เวลาปัจจุบันต่อท้ายไปด้วย และถ้า +40 เข้าไป จะเป็นการใส่ วันที่+เวลา ปัจจุบันต่อท้าย

ค่าดังกล่าวถ้าใช้เป็นค่าติดลบ เช่น = -21 ก็จะเป็นการสั่ง lock field ไม่ให้เข้าไปแก้ไข
}}}
| รอเรียบเรียง |
{{{
23/9/51

- ผลสรุปจากการประชุม เรื่อง ปัญหา การป้อนใบ OF (ป้อนจากเอกสาร Sale)
แล้ว ป้อน ราคาสินค้า ผิด เพราะโปรแกรม ดึงราคาเก่าที่เคยเปิดมาให้ (มีการเปลี่ยนราคา)
ผู้เปิด ลืม แก้ไข ราคา สรุป ให้โปรแกรม ขึ้นกรอบ ยืนยัน ยอดรวมของบิลก่อนถึงจะ Save ได้ โดยตอนถามให้ยืนยันห้ามโชว์ ยอดรวมให้ผู้ใช้ดู
(ผิดพลาดได้ไม่เกิน 1 บาท) รบกวนโปรแกรมเมอร์ช่วย พัฒนาด้วยครับ ลูกค้าขอด่วน
}}}

{{{
25/9/51

ทำโปรแกรมเพิ่ม ดังนี้
ใช้ _InvSaveReconcile=ON
กรณี เจาะจงหมวดบิล ก็ใช้ _InvSaveReconcile.XX=ON
XX คือ หมวดบิล

หรือใช้ _InvSaveReconcile=2
ให้ เทียบกับ ยอดมูลค่าสินค้า ไม่รวม VAT ครับ

note: ไฟล์ที่ update คือ _Inv*.exe 
}}}

{{{
อ้างจาก: adm ที่ ตุลาคม 30, 2008, 03:09:00 am
30/10/51

- Work ครับ ติดตั้งให้ลูกค้า ทดสอบ มานานพอควรแล้ว วันนี้ผมเข้าไปที่ Cinnamon
ลูกค้าแจ้ง ขอปรับสักนิดได้ไหมครับ คือขอให้ ยืนยันยอด ทุกครั้ง ที่ Save เพราะมีกรณี
ไปแก้ไข แล้วโปรแกรมไม่เช็ค (เพราะ Save ได้แล้ว) ซึ่งผมแจ้ง ลูกค้าแล้ว ว่าการแก้ไข
ีมีหลายกรณี อาจจะไม่ได้แก้ไข ยอดเงินก็ได้ แล้วยืนยันทุกครั้ง จะไม่รำคาญ เหรอ 
ซึ่งลูกค้าก็ยังยืนยัน ที่จะให้ ยืนยัน ทุกครั้ง เพราะกลัวพนักงานทำงานหลุด รบกวนแ้ก้ไขให้อีกครั้งนะครับ



1/11/2551

ปรับโปรแกรม _Inv*.EXE
กรณีต้องการให้ตรวจตอน แก้ไขด้วย ให้บวก 100 เข้าไป
ใช้ _InvSaveReconcile==101 หรือ _InvSaveReconcile=102
}}}
คำสั่งต่อเนื่องจาก Work Flow
@@"""
_InvWFAutoCmd=ชื่อไฟล์.WFC
"""@@
สำหรับกำหนดให้ ทำงานคำสั่ง Work Flow อัตโนมัติ
เมื่อมีการกด F10 เพื่อ save หลังจาก เพิ่ม (F4) หรือ แก้ไข (F5)

ดูคำอธิบายที่ [[Work Flow]]
custom Work Flow Menu (ไฟล์ .INI หรือ .MNU)
กำหนดใน """__FSys.INI"""
@@"""
_InvWFMenu=ชื่อไฟล์ [.INI หรือ .MNU]
"""@@
หรือ
@@"""
_InvWFMenu.หมวดบิล=ชื่อไฟล์ [.INI หรือ .MNU]
"""@@
ภายในเมนูไฟล์ ใช้ format เหมือนกับเมนูรายงาน ฯลฯ เช่น
<<<
ไฟล์คำสั่ง1.WFC=ข้อความที่แสดงในเมนู1 
ไฟล์คำสั่ง1.WFC=ข้อความที่แสดงในเมนู1 
<<<

ดูคำอธิบายที่ [[Work Flow]]
{{{
สำหรับโปรแกรม update ล่าสุด 18-4-48

เป็นคำสั่งสำหรับเพิ่มความฉลาดและความยืดหยุ่นให้โปรแกรม
ผู้ใช้สามารถป้อนรหัสลูกค้า หรือ รหัสพนักงาน
ในบรรทัดรายการ บรรทัดไหนของบิลก็ได้

โปรแกรมจะตรวจสอบ กรณีที่ไม่พบว่าเป็นข้อมูลสินค้า
ก็จะตรวจสอบว่า เป็นรหัสลูกค้าหรือไม่

ถ้าเป็นรหัสลูกค้า ก็จะย้ายข้อความบรรทัดดังกล่าวมาใส่ที่ฟิลด์ลูกค้าให้อัตโนมัติ


ถ้าไม่ใช่ ก็จะตรวจสอบต่อว่าเป็นรหัสพนักงานหรือไม่
ถ้าเป็นรหัสพนักงาน ก็จะย้ายข้อความบรรทัดดังกล่าวมาใส่ที่ฟิลด์พนักงานให้อัตโนมัติ

ความหมายของค่าต่างๆ ที่ใช้
 1 = ตรวจสอบรหัสกับข้อมูลลูกค้า
 2 = ให้โปรแกรมถามยืนยัน ก่อนใส่ข้อมูลลูกค้า
 4 = ตรวจสอบรหัสกับข้อมูลพนักงาน
 8 = ให้โปรแกรมถามยืนยัน ก่อนใส่ข้อมูลพนักงาน

วิธีใช้คือ เอาค่าดังกล่าวมาบวกกัน เช่น
_InvXCodeItm = 3  แปลว่าให้ตรวจสอบเฉพาะรหัสลูกค้า และต้องถามยืนยันก่อนเติมฟิลด์ลูกค้า

_InvXCodeItm = 5  แปลว่าให้ตรวจสอบทั้งรหัสลูกค้าและรหัสพนักงาน ถ้าตรงให้ย้ายไปใส่อัตโนมัติทันที โดยไม่ต้องรอถามยืนยัน

พิเศษ สำหรับบิลที่กำหนด ~FCB ปกติ ไม่ต้องกำหนด _InvXCodeItm ก็จะทำงานตรวจสอบรหัสลูกค้าและพนักงานให้อัตโนมัติ
}}}
|Default|@@""" _LOGLevel = 1 """@@|
กำหนดความลึกของการเก็บรายละเอียด LOG การทำงาน ถ้าเป็น 0 หรือ OFF คือไม่เก็บ LOG สามารถกำหนดได้ตั้งแต่ 1 ถึง 10 

> LOG file คือ hidden file .LOG เก็บอยู่ใน directory ของชุดข้อมูลนั้นๆ แยกตามวัน โดยตั้งชื่อ ใช้เลข ปีเดือนวัน (yymmdd).LOG เราสามารถใช้โปรแกรม text editor เช่น notepad เปิดไฟล์เพื่อดูได้
|Default|@@""" _LeaveTmpFile = OFF """@@|
กำหนดให้โปรแกรม ปล่อย temp file (.TMP) ที่สร้างในระหว่างประมวลผลรายงานทิ้งไว้ โดยไม่ต้องลบ เมื่อจบรายงาน 

ใช้ประโยชน์ในการ debug โปรแกรม ตรวจสอบข้อมูลที่ได้ระหว่างประมวลผลรายงาน 
|Default|คำสั่งนี้ยกเลิกไปแล้ว|
เป็นคำสั่งสำหรับ แปลงข้อความของโปรแกรมให้เป็นคำอื่น เช่น แปลเป็นอังกฤษ โปรแกรมปัจจุบันถอดออกไปแล้ว เนื่องจากมีปัญหากิน Memory มาก 
|Default|@@""" _LowDate = 0/0/0 """@@|
กำหนดวันที่ต่ำสุดของข้อมูลในช่อง ที่ยินยอมให้ user เข้าไปใส่

โดยถ้า user ใส่วันที่ในช่องดังกล่าว ก่อนวันที่ที่กำหนด โปรแกรมจะฟ้อง error ไม่ยอม save ข้อมูล

สามารถกำหนดได้ 2 แบบ คือ
แบบคงที่ ว้น/เดือน/ปี เช่น 1/1/51 
หรือ แบบอ้างอิงกับวันที่ปัจจุบัน โดยใช้เครื่องหมาย + หรือ - เช่น 

| [[_LowDate]] | ความหมาย |h
| -0 หรือ +0 |วันที่ปัจจุบัน (วันนี้) |
| +1 |+1 วัน จากวันที่ปัจจุบัน (พรุ่งนี้) |
| -7 |-7 วัน จากวันที่ปัจจุบัน |
| 0/-1 หรือ /-1 |-1 เดือน จากวันที่ปัจจุบัน |
| 0/0/-1 หรือ """//-1""" |-1 ปี จากวันที่ปัจจุบัน  |
| 1/- หรือ 1/-0 |วันที่ 1 ของเดือนนี้ |
| 1/1/- หรือ 1/1/-0 |วันที่ 1 เดือน 1 ของปีนี้ |
| 1/1/-1 |วันที่ 1 เดือน 1 ของปีที่แล้ว |

<<<
คำสั่งนี้ ไม่มีผลโดยตรง แต่ใช้เป็นค่า default กรณีมีการกำหนดคำสั่งต่อไปนี้ โดยไม่ระบุค่าใดๆ เช่น @@[[_BnkInLowDate]] = @@

* ภาษีมูลค่าเพิ่ม : [[_BuyTaxLowDate]] [[_SellTaxLowDate]]
* สต็อก : [[_StkInLowDate]] [[_StkOutLowDate]]
* ลูกค้า-ลูกหนี้ : [[_CusCrLowDate]] [[_CurDrLowDate]]
* เจ้าหนี้ : [[_VndCrLowDate]] [[_VndDrLowDate]]
* บิลขาย : [[_InvLowDate]] [[_InvPaidLowDate]]
* ใบเสร็จ : [[_RcpLowDate]] [[_RcpLowPDate]]
* บิลซื้อ : [[_PoLowDate]] [[_PoPaidLowDate]]
* ใบจ่าย : [[_MrcLowDate]] [[_MrcLowPDate]]
* บัญชีธนาคาร : [[_BnkInLowDate]] [[_BnkInLowClrDate]] [[_BnkOutLowDate]] [[_BnkOutLowClrDate]] 
* พิมพ์เช็ค : [[_PrnChqLowDate]]
<<<
|Default|@@""" _LowDateLockLevel = 8 """@@|
กำหนดระดับผู้ใช้ ที่ไม่สามารถป้อนวันที่ย้อนหลัง ก่อนวันที่ที่กำหนด 
วันที่ที่กำหนดแตกต่างกัน ขึ้นอยู่กับ module ที่ทำงาน (ดูคำสั่ง [[_LowDate]]) 
ค่า default 8 คือ lock ตั้งแต่ ผู้ใช้ที่มีระดับ user1 - user7, บัญชี 

| 0 |ไม่ lock |
| 1 |lock user1 |
| 2 |lock user2 หรือ ต่ำกว่า |
| 3 |lock user3 หรือ ต่ำกว่า |
| 4 |lock user4 หรือ ต่ำกว่า |
| 5 |lock user5 หรือ ต่ำกว่า |
| 6 |lock user6 หรือ ต่ำกว่า |
| 7 |lock user7 หรือ ต่ำกว่า |
| 8 |lock บัญชี หรือ ต่ำกว่า |
| 9 |lock ผู้จัดการ หรือ ต่ำกว่า |
| 10 |lock supervisor หรือ ต่ำกว่า |
|Default|@@""" _MoneyTxtSep = 0 """@@|
กำหนดรูปแบบของตัวเชื่อมคำภาษาอังกฤษของข้อความจำนวนเงิน 
> ข้อความจำนวนเงินเป็นภาษาอังกฤษ ในกรณีต่อไปนี้
> เมื่อใช้ระบบวันที่เป็น ค.ศ. [[_ThaiDate]] = OFF ใน """__FSys.INI"""
> หรือในไฟล์รายงาน .FRM  ใช้คำสั่ง [[ThaiPrint]] = OFF 
> หรือในไฟล์รายงาน .FRM  ใช้คำสั่ง [[_Money]] = 0

| [[_MoneyTxtSep]] | คำอธิบาย |h
| 0 |ไม่ใช้ตัวเชื่อม |
| 1 |ใช้ "and" เป็นตัวเชื่อม |
| 2 |ใช้ "," เป็นตัวเชื่อม |
| +4 |เชื่อมบาท/สตางค์แบบไทย xxx BAHT yyy STG. |
| +8 |สตางค์ใช้เป็นตัวเลข yyy/100 |
| +16 (0x10) |แปลงตัวอักษรเป็น lower case |
| +32 (0x20) |แปลงตัวอักษรเป็น upper case |
| +16+32 (0x30) |แปลงตัวอักษรเป็น lower case ยกเว้นตัวอักษรตัวแรกเป็น upper case |

การกำหนดค่า จะต้องใช้ค่าผลลัพธ์ที่บวกกันแล้ว หรือใช้ค่าเลขฐาน 16 ตามที่แสดงในวงเล็บ เช่น [[_MoneyTxtSep]] = 0x3C 

ตัวอย่าง 

* default BAHT xxxx and yyy STGS 
| 0 |BAHT One Thousand Two Hundred Twenty Five and Fifty STGS. |
| 1 |BAHT One Thousand and Two Hundred and Twenty Five and Fifty STGS. |
| 2 |BAHT One Thousand, Two Hundred Twenty Five and Fifty STGS. |

* +4 xxx BAHT yyy STGS. 
| 0+4 (4) |One Thousand Two Hundred Twenty Five BAHT Fifty STGS. |
| 1+4 (5) |One Thousand and Two Hundred and Twenty Five BAHT Fifty STGS. |
| 2+4 (6) |One Thousand, Two Hundred Twenty Five BAHT Fifty STGS. |

* +8 BAHT xxx and ##/100 
| 0+8 (8) |BAHT One Thousand Two Hundred Twenty Five and 50/100 |
| 1+8 (9) |BAHT One Thousand and Two Hundred and Twenty Five and 50/100 |
| 2+8 (10) (0xA) |BAHT One Thousand, Two Hundred Twenty Five and 50/100 |

* +4+8 xxx BAHT ##/100 
| 0+4+8 (12)(0xC) |One Thousand Two Hundred Twenty Five BAHT 50/100 |
| 1+4+8 (13)(0xD) |One Thousand and Two Hundred and Twenty Five BAHT 50/100 |
| 2+4+8 (14)(0xE) |One Thousand, Two Hundred Twenty Five BAHT 50/100 |

* +16 lower case 
|0+16 (16)(0x10) |BAHT one thousand two hundred twenty five and fifty STGS. |
| 0+4+16 (20)(0x14) |one thousand two hundred twenty five BAHT fifty STGS. |
| 0+4+8+16 (28)(0x1C) |one thousand two hundred twenty five BAHT 50/100 |

* +32 upper case 
| 0+32 (32)(0x20) |BAHT ONE THOUSAND TWO HUNDRED TWENTY FIVE AND FIFTY STGS. |
| 0+4+32 (36)(0x24) |ONE THOUSAND TWO HUNDRED TWENTY FIVE BAHT FIFTY STGS. |
| 0+4+8+32 (44)(0x2C) |ONE THOUSAND TWO HUNDRED TWENTY FIVE BAHT 50/100 |

* +16+32 First letter captitalize 
| 0+16+32 (48)(0x30) |BAHT One thousand two hundred twenty five and fifty STGS. |
| 0+4+16+32 (52)(0x34) |One thousand two hundred twenty five BAHT fifty STGS. |
| 0+4+8+16+32 (60)(0x3C) |One thousand two hundred twenty five BAHT 50/100 |

> note โปรแกรมบางรุ่นจะมี bug กรณีคำสั่ง xxx BAHT yyy STGS. ใช้ +4 ไม่ได้ จะต้องใช้ +64 แทน 
ใช้สำหรับซ่อนหมวดใบจ่าย ไม่ให้เลือกใช้ตอนเปิดใบจ่าย
ดูคำอธิบายจาก [[_InvCfgHideList]]
ใช้สำหรับเปลี่ยนรายการหมวดใบจ่าย ที่ใช้เลือกตอนก่อนเข้าไปเปิดใบจ่าย ซึ่งเรียงตามตัวอักษร ให้เป็นเมนูให้เลือกหมวดบิล ที่จัดลำดับหมวดบิลตามต้องการได้

ดูคำอธิบายจา [[_InvCustomListType]]
@@"""
_MrcLimitMrcType = ON 
"""@@

ใช้สำหรับกำหนดให้โปรแกรม ต้องแสดงรายการหมวดใบจ่าย มาให้เลือก ก่อนเข้าไปเปิดใบจ่ายหรือไม่
ดูคำอธิบายจาก [[_InvLimitInvType]]
|Default|@@""" _OffCnt = 15 """@@|
กำหนดเวลา (นาที) ที่โปรแกรมรอ โดยไม่มีการกดคีย์ใดๆ เพื่อเข้าสู่โหมด พักหน้าจอ โดยคำสั่ง [[_OffScr]]
default คือ 15 นาที
|Default|@@""" _OffScr = ON """@@|
พักหน้าจอ (Off Screen) แสดงเป็นตัวหนังสือวิ่ง เมื่อไม่มีการกดคีย์ใด ในช่วงเวลา ตามที่กำหนดใน [[_OffCnt]] (นาที)

> เพิ่มเติม (ยังไม่ test) คำสั่ง [[_OffScr]] สำหรับโปรแกรมรุ่น IDS สามารถใช้ค่า +4 เพื่อให้เช็คสถานะของ remote database ระหว่างที่ไม่มีการกดคีย์ เช่น [[_OffScr]] = 4 ไม่ใช้ Off Screen แต่ให้ตรวจสอบ IDS หรือ [[_OffScr]] = 5 ใช้ Off Screen และตรวจสอบ IDS 
{{{
cin ต้องการขอ modify pgogram 
ขั้นตอนผ่านรายการ ใบจอง (OF) ไม่ได้ Set ให้ผ่านรายการอะไร
กำหนด {~O-} เวลาผ่านรายการให้ตรวจสอบยอดคงเหลือ
"ที่สามารถขายได้" โดย คำนวณจากยอดคงเหลือ(stock.btr) หักลบกับรายจอง
ถ้ายอดที่เหลือน้อยกว่ายอดในใบจอง ให้ฟ้อง Error รอยืนยัน
โดยแสดงข้อมูล ของสาเหตุดังกล่าว เช่น 
เลขที่ใบจอง/ชื่อพนักงานขาย/วันที่จอง/จำนวนที่จอง
}}}

{{{
28/2/2550

กลัวติดค้างข้ามเดือน เลยต้องรีบเคลียร์ ฮิ ฮิ

ใช้ PInvA หรือ PInvB ก็ได้ แทน PInv
จะต้องกำหนด __FSYS.INI

_PInvChkStkBo=ON

ทดสอบคร่าวๆ แล้ว ข้อมูลไม่กี่รายการ ทำงานถูกต้อง
}}}

{{{
30/10/51

- ผ่านไปปีกว่า .. กับ Add-on ระบบนี้ ตอนนี้ลูกค้า แจ้งปัญหาการใช้งาน มาดังนี้ครับ
1. เวลาแสดงรายการ ค้าง อยากให้เรียง ตามลำดับ เลขที่เอกสาร 
(ของเก่าเรียงตามชื่อลูกค้าก่อนแล้วค่อยเรียงวันที่) เพราะเขาบอกดูยาก เพราะตอนนี้ข้อมูลเยอะ
ปล. เรียงตามวันที่ไม่ได้นะครับ เพราะ วันที่อาจมีกระโดดไปกระโดด มา เน้นเรื่องลำดับเอกสาร
2.อยากพิมพ์ สิ่งที่โปรแกรมเตือนได้.. เพราะรายการมันเยอะ จนไม่สะดวกที่จด 
ผมลองแล้ว ทั้ง Ctrl+KP, printsrc ก็ไม่ Work ฟ้อง memory ไม่พออย่างเดียว (mem 460)

พอมีทางแก้ไขไหมครับ..!!

1/11/2551

ให้เรียงตามเลขที่บิล ใช้
_PInvChkStkBo=101

เรื่องพิมพ์ ทดลองแล้ว ไม่น่าจะพิมพ์ได้ ติดปัญหาเรื่อง memory
เลยแก้โปรแกรมให้ กด Ctrl+KS เพื่อ save ไฟล์ไว้แทน
}}}

{{{
อ้างจาก: adm ที่ ธันวาคม 18, 2008, 05:56:43 am
18/12/51

-ที่ยังไม่ work คือการเรียงลำดับ เพราะยังเรียง 
"ลูกค้า" ก่อนที่จะเรียง "เลขที่ี" อีกครั้ง ส่วนอย่างอื่น work หมดแล้ว ครับ

ปล.ต้องการให้เรียงเลขที่เป็นลำดับแรกก่อนอย่างอื่น 
ขอโทษที่ที่ไม่ได้แนบไฟล์มาให้ดู เนื่องจากหาอะไร copy ไม่ได้เลย


18/12/51
ทดลองสร้างข้อมูล เพื่อทดสอบแล้ว พบข้อผิดพลาดตามที่แจ้งแล้วครับ
แก้ไขให้ถูกต้องแล้ว พร้อมทั้งแถมเพิ่มคำสั่ง 
_PInvChkStkBo=201 
สำหรับเรียงตามวันที่ครับ

note 
ข้อจำกัดที่อาจเกิดขึ้น คือปัญหากรณีที่มี lot ค้างส่งมากๆ อาจไม่สามารถแสดงออกมาได้ครบ
เนื่องจาก เดิม load ข้อมูล lot ค้างแยกตามลูกค้า ทีละรายทำให้ไม่ต้อง load lot ทั้งหมดมาไว้ใน memory แต่การสั่งให้เรียงทำให้ต้อง load lot ที่ค้างทั้งหมดของลูกค้าทุกรายเข้ามาไว้ใน memory เพื่อทำการเรียงใหม่ก่อน ดังนั้นวิธีนี้จึงกิน memory มากกว่าเดิม

เพิ่ม
_PInvChkStkBo=501

ไม่แสดงรายละเอียด lot ที่ค้าง 
ขึ้นแสดง error แค่ข้อความ ยอดสต็อกคงเหลือ น้อยกว่า ยอดค้างส่ง
}}}
{{{
update 15 กันยายน 2548

ผ่านรายการบิลขาย (PInv)
ผ่านรายการบิลซื้อ (PPo)
สามารถกำหนดให้ 
ผ่านรายการสต็อก
โดยปรับยอดคงเหลือ ที่ข้อมูลสต็อก
โดยไม่บันทึก Transaction 
รายการออกสต็อก หรือ รายการเข้าสต็อก

ใช้คำสั่ง 
_PInvSkipTrn = 1
หรือ
_PPoSkipTrn = 1

การทำงานยังสามารถ
ผ่านรายการ และคืนรายการ เหมือนปกติ
แต่จะไม่ปรากฏข้อมูล รายการเข้า/ออก สต็อก

ใช้ประโยชน์อะไร (วะ) นะหรือ
เป็น feature หนึ่งใน Project 
Light Weight POS Client
}}}
|Default|@@""" _PRNCode = 1 """@@|
กำหนดรหัสภาษาไทย ของ export ไฟล์ .PRN
* 0 = รหัส เกษตร 
* 1 = รหัส สมอ. (windows-tis) 
|Default|@@""" _PViewColorMode = ON """@@|
การแสดงผลรายงานออกหน้าจอ เป็นแบบสี ถ้าเครื่องพิมพ์ที่จะพิมพ์ออกเป็นเครื่องพิมพ์สี 
ถ้าเปลี่ยนค่านี้เป็น OFF หรือเครื่องพิมพ์ที่ใช้เป็นขาวดำ การแสดงรายงานบนหน้าจอก็จะเป็น ขาว-ดำ
|Default|@@""" _PViewSaveMode = ON """@@|
กรณีแสดงรายงานออกทางหน้าจอ โปรแกรมจะเก็บรายงานหน้าที่ผ่านมาแล้ว เพื่อย้อนกลับมาดูได้โดยกด ~PgUp
ถ้าเปลี่ยนคำสั่งนี้เป็น OFF การดูรายงานทางหน้าจอจะดูได้เฉพาะรายงานหน้าล่าสุด ไม่สามารถย้อนไปดูหน้าก่อนได้ 
|Default|@@""" _PageNoPic = #9-4 """@@|
กำหนด picture สำหรับการพิมพ์เลขหน้า (Page No) ลงบนรายงาน  ค่า default คือ "9999" 
|Default|@@""" _PoAllowChangeDsc = ON """@@|
กำหนดระดับ user ต่ำสุด ที่ยินยอมให้แก้ไขช่อง__ส่วนลด__ต่อรายการสินค้าในบิล

ดูคำอธิบายจาก [[_InvAllowChangeDsc]]
|Default|@@""" _PoAllowChangeNo = ON """@@|
ใช้สำหรับ lock ฟิลด์__เลขที่__บิลซื้อ ไม่ให้ user ที่มีระดับต่ำกว่าระดับที่กำหนด เข้าไปเปลี่ยน

ดูคำอธิบายจาก [[_InvAllowChangeNo]]
|Default|@@""" _PoAllowChangePrice = ON """@@|
กำหนดระดับ user ต่ำสุด ที่ยินยอมให้แก้ไขช่อง__ราคา__สินค้าในบิล

ดูรายละเอียดจาก [[_InvAllowChangePrice]]
|Default|@@""" _PoAllowChangeQty = ON """@@|
ใช้สำหรับ lock ฟิลด์__จำนวน__ในบิลซื้อ ไม่ให้ user ที่มีระดับต่ำกว่าระดับที่กำหนด เข้าไปแก้ไขจำนวนในฟิลด์ดังกล่าว 

ดูคำอธิบายจาก [[_InvAllowChangeDsc]]
|Default|@@""" _PoAllowPostPrint = ON """@@|
ใช้ควบคุมเพื่อ lock ไม่ให้พิมพ์บิลซื้อ ที่ผ่านรายการแล้ว

ดูคำอธิบายจาก [[_InvAllowPostPrint]]
|Default|@@""" _PoAllowPrintEdit = ON """@@|
ใช้ lock ไม่ให้แก้ไขหรือลบ บิลที่พิมพ์แล้ว

ดูคำอธิบายจาก [[_InvAllowPrintEdit]]
|Default|@@""" _PoAutoListBOM = OFF """@@|
ใช้สำหรับหน้าจอเปิดบิลซื้อ เวลาป้อนรายการ ส่วนประกอบสินค้าต้องขึ้นอัตโนมัติ 

ดูคำอธิบายจาก [[_InvAutoListBOM]]
|Default|@@""" _PoAutoPackItm = -1 """@@|
ใช้สำหรับยุบรวมจำนวนสินค้า สำหรับบรรทัดที่มีรายการเหมือนกันหลายบรรทัด มารวมเป็นบรรทัดเดียวกัน

ดูคำอธิบายจาก [[_InvAutoPackItm]]
ใช้สำหรับกำหนดให้ โปรแกรมแสดง list ของบิลต้นแบบ มาให้เลือกก่อน ตั้งแต่ตอนกด F5 เพื่อเปิดบิลใหม่  สามารถกำหนดดังนี้

@@"""
_InvAutoReferNo=หมวดบิล [ +wildcard ของเลขที่บิลต้นแบบ ]
"""@@

ดูคำอธิบายจาก [[_InvAutoReferNo]]
ใช้สำหรับซ่อนหมวดบิล ไม่ให้เลือกใช้ตอนเปิดบิล
ดูคำอธิบายจาก [[_InvCfgHideList]]
ใช้สำหรับเปลี่ยนรายการหมวดบิล ที่ใช้เลือกตอนก่อนเข้าไปเปิดบิล ซึ่งเรียงตามตัวอักษร ให้เป็นเมนูให้เลือกหมวดบิล ที่จัดลำดับหมวดบิลตามต้องการได้

ดูคำอธิบายจา [[_InvCustomListType]]
|Default|@@""" _PoDspDscNSize = 4 """@@|
สำหรับบังคับค่า ขนาด(กว้าง) ของคอลัมน์__ส่วนลด__ ในจอบิลที่ป้อนข้อมูล กำหนดได้ 0 - 10

ดูคำอธิบายจาก [[_InvDspDscNSize]]
@@"""
_PoDspUnitNSize = 8 
"""@@

สำหรับบังคับค่า ขนาด(กว้าง) ของคอลัมน์__หน่วยนับ__ ในจอบิลที่ป้อนข้อมูล กำหนดค่าได้ 0 - 12

ดูคำอธิบายจาก [[_InvDspUnitNSize]]
|Default|@@""" _PoLimitPoType = ON """@@|
ใช้สำหรับกำหนดให้โปรแกรม ต้องแสดงรายการหมวดบิล มาให้เลือก ก่อนเข้าไปเปิดบิลหรือไม่
ดูคำอธิบายจาก [[_InvLimitInvType]]
|Default|@@""" _PrintBreakChk = 0 """@@|
กำหนดจำนวนเวลาของรอบ ที่ให้โปรแกรมตรวจสอบการกดคีย์ Esc เพื่อยกเลิกการพิมพ์ 
ค่า default 0 โปรแกรมจะตรวจสอบการกดคีย์ทุกรอบ 1 วินาที
ถ้ากำหนดค่า 1 โปรแกรมจะตรวจสอบการกดคีย์ทุก 3 วินาที (1 x 3)
ถ้ากำหนดค่า 2 โปรแกรมจะตรวจสอบการกดคีย์ทุก 6 วินาที (2 x 3)
|Default|@@""" _PrintChkReady = ON """@@|
กำหนดให้โปรแกรมตรวจสอบสถานะของเครื่องพิมพ์ก่อนเริ่มพิมพ์ว่า เครื่องพิมพ์พร้อมที่จะพิมพ์ (Ready หรือ Online) หรือไม่

มีกรณีที่ใช้มีกล่องสลับสายบางรุ่น เชื่อมเครื่องคอมพิวเตอร์ 2 เครื่อง ต่อเครื่องพิมพ์ 1 เครื่อง  ไม่ยอมแสดงสถานะว่าเครื่องพิมพ์พร้อม ดังนั้นจึงต้องสามารถสั่งให้โปรแกรมเริ่มพิมพ์โดยไม่ต้องตรวจสอบก่อน โดยเปลี่ยนคำสั่งนี้เป็น OFF 
|Default|@@""" _PrintControl = OFF """@@|
การควบคุมลักษณะการพิมพ์บางอย่าง สามารถทำได้ทั้งจาก panel ของเครื่องพิมพ์ หรือโดยจากโปรแกรมส่งคำสั่งควบคุม คำสั่งนี้ใช้เพื่อกำหนดว่า ผู้ใช้จะเป็นผู้ควบคุมลักษณะการพิมพ์เอง (ON) หรือปล่อยให้โปรแกรมควบคุม (OFF) โดยกำหนดจากไฟล์ .FRM 

* คุณภาพตัวอักษร LQ/Draft (ดู - [[LQ]] หรือ [[QUALITY]]) 
* ฟอนท์ รูปแบบตัวอักษร (ดู - [[LQFONT]]) 
* ขนาดตัวอักษร (10/12/15/17/20 cpi) (ดู - [[12CPI]], [[15CPI]], [[COMPRESS]]) 
|Default|@@""" _PrintExportToTemp = OFF """@@|
ปกติโปรแกรมจะ export ไฟล์ (.PRN, .TXT, .CSV) ไว้ที่ directory ของชุดข้อมูลที่ทำงานอยู่

ถ้ากำหนดค่าเป็น ON โปรแกรมจะ export ไฟล์ ไปไว้ที่ temp directory ซึ่งกำหนดโดยคำสั่ง [[_UseLocalTmp]]
|Default|@@""" _PrintMaskStyle = 15 """@@|
ใช้สำหรับปิดไม่ให้ใช้ style ของ font ในเครื่องพิมพ์บาง style เนื่องจาก เครื่องพิมพ์บางรุ่นเมื่อใช้ style นั้นแล้ว ทำให้ตัวหนังสือไม่สวย หรืออ่านไม่ออก 

| +1 |ขีดเส้นใต้ (underline) |
| +2 |ตัวเอียง (italic) |
| +4 |ตัวเงา (shadow) |
| +8 |ตัวเจาะ (outline) |

ค่า default คือ เปิดใช้ทุก style (1+2+4+8 = 15) 
|Default|@@""" _PrintMaxOutput = 0 """@@|
ใช้สำหรับจำกัดช่องทางการแสดงผลของรายงาน ค่า default=0 คือ ไม่จำกัด 

ช่องทางการแสดงผล มีดังนี้ 
| 1 | หน้าจอ  |
| 2 | 1 + เครื่องพิมพ์ |
| 3 | 2 + PRN File |
| 4 | 3 + TXT File |
| 5 | 4 + CSV File |

ตัวอย่าง 
ถ้ากำหนด [[_PrintMaxOutput]] = 2 คือ จำกัดให้แสดงรายงานได้แค่ลำดับที่ 2 คือ หน้าจอ และ เครื่องพิมพ์ ไม่สามารถ export รายงานออกมาเป็นไฟล์ 
|Default|@@""" _PrintOutput = 0 """@@|
กำหนดค่า default output ของรายงาน 

| 0 | หน้าจอ  |
| 1 | เครื่องพิมพ์ |
| 2 | PRN File |
| 3 | TXT File |
| 4 | CSV File |
|Default|@@""" _PrintPortNo = 0 """@@|
กำหนด printer port ที่ใช้เป็น default port สำหรับพิมพ์รายงาน
| 0 | lpt1 |
| 1 | lpt2 |
| 2 | lpt3 (server) |
|Default|@@""" _PrintServer = OFF """@@|
ใช้สำหรับกรณีที่เครื่องพิมพ์ต่อกับ Netware Server และมีปัญหา server จะ delay ไม่ยอมพิมพ์รายงานออกเครื่องพิมพ์ทันที เพราะรอรับคำสั่ง end of job ก่อน ถ้ากำหนดค่านี้เป็น ON โปรแกรมจะส่งคำสั่ง EOJ หลังจากจบรายงาน 
ใช้สำหรับซ่อนหมวดใบเสร็จ ไม่ให้เลือกใช้ตอนเปิดใบเสร็จ
ดูคำอธิบายจาก [[_InvCfgHideList]]
ใช้สำหรับเปลี่ยนรายการหมวดใบเสร็จ ที่ใช้เลือกตอนก่อนเข้าไปเปิดใบเสร็จ ซึ่งเรียงตามตัวอักษร ให้เป็นเมนูให้เลือกหมวด ที่จัดลำดับหมวดใบเสร็จตามต้องการได้

ดูคำอธิบายจา [[_InvCustomListType]]
|Default|@@""" _RcpLimitRcpType = ON """@@|
ใช้สำหรับกำหนดให้โปรแกรม ต้องแสดงรายการหมวดใบเสร็จ มาให้เลือก ก่อนเข้าไปเปิดใบเสร็จหรือไม่
ดูคำอธิบายจาก [[_InvLimitInvType]]
|Default|@@""" _RecoverMode = 1 """@@|
กำหนดให้โปรแกรมทำการกู้ข้อมูลแบบ auto correction สำหรับกรณี error code 22 (ขนาด record ไม่พอดี) รวมทั้งการตรวจสอบและปรับขนาดของ field ที่เป็น string อัตโนมัติ, ตรวจสอบ field วันที่ 
|Default|@@""" _ReopenDelay = 5 """@@|
กำหนดให้โปรแกรม ปิด database แล้ว เปิดใหม่ ถ้าตรวจเช็คแล้ว พบว่า database ได้เปิด file ทิ้งไว้นานกว่าเวลาที่กำหนด (default คือ 5 นาที)โดยไม่มีการกดคีย์ใดๆ ก่อนที่จะทำงาน save data หรือ delete data ป้องกันปัญหากรณี connection lost โดยเฉพาะกรณี IDS ที่มี database เป็นแบบ remote 
|Default|@@""" _ScrMgrAutoCorrectLen = 6 """@@|
การทำงานจอป้อนข้อมูล สั่งให้ตรวจจับและแปลงตัวอักษรภาษาไทยเป็นตัวเลขอัตโนมัติ โดยกำหนดขนาดความยาวของตัวอักษรภาษาไทยอย่างน้อย (default คือ 6) ที่โปรแกรมจะตรวจและแปลงตัวอักษรภาษาไทยเป็นตัวเลข อัตโนมัติ ใช้ประโยชน์ในกรณีเครื่องอ่านบาร์โค้ดอ่านรหัสตัวเลข ขณะที่คีย์บอร์ดของโปรแกรมย้งอยู่ในโหมดภาษาไทย 
|Default|@@""" _ScrMgrMultiplier = 1000 """@@|
การทำงานจอป้อนข้อมูล สำหรับ field ป้อนตัวเลข ถ้ากดปุ่ม * จะเป็นการคูณตัวเลขใน field นั้น ด้วยค่า Multiplier ที่กำหนด (เหมือนกับเป็นการ Quick Input เติม 000) และกลับกัน ถ้ากดปุ่ม / ก็จะเป็นการหารตัวเลขใน field ด้วยค่า Multiplier 
|Default|@@""" _ScrMgrZoomFlag = 1 """@@|
การทำงานจอป้อนข้อมูล สำหรับ field ป้อนข้อความยาว ที่ยาวกว่าขนาดของ field ที่แสดงบนจอ 
| 0 |ไม่ขึ้น field ขยาย จะต้อง scroll ภายใน field |
| 1 |ขึ้น field แบบขยายขึ้นมายาวเต็มให้ป้อน ซ้อนทับตำแหน่ง field เดิม |
| 2 |ขึ้นหน้าต่างขยายขึ้นมายาวเต็มให้ป้อน พร้อมกรอบ และชื่อ field ซ้อนตำแหน่ง field เดิม |
| 3 |ขึ้นหน้าต่างขยายขึ้นมายาวเต็มให้ป้อน พร้อมกรอบ และชื่อ field ใต้ตำแหน่ง field เดิม |
นอกจากนี้ ในระหว่างป้อนข้อมูล เราสามารถกด Ctrl+Z เพื่อสลับ Zoom Mode ของ field ได้อีกด้วย 
|Default|@@""" _SearchPathPrg = -1 """@@|
กำหนดให้โปรแกรม search หาไฟล์ทำงาน (.EXE) จาก ค่าของ PATH ที่กำหนดใน environment ของเครื่องที่ใช้งานอยู่ หรือไม่ (DOS API - searchpath) ปกติเมื่อมีการเรียกใช้ระบบงานย่อย โปรแกรมก็จะไปเรียกไฟล์ .EXE ของระบบงานนั้นขึ้นมาทำงาน โดยหาไฟล์ที่ต้องการ 2 วิธีดังนี้

* หาภายใน directory ต่างๆ ของโปรแกรมเอง
*# จาก program directory หรือ directory เดียวกันกับที่ไฟล์โปรแกรมเมนู (~MN_*.EXE)
*# จาก home directory หรือ working directory (กรณีอยู่คนละที่กับ program directory)
*# จาก data directory คือ directory ของชุดข้อมูลที่กำลังเปิดใช้อยู่
*# จาก frm directory คือ directory ชื่อ (FRM) ปกติใช้สำหรับเก็บไฟล์ฟอร์มรายงานเพิ่มเติม (.FRM)
* หาโดยใช้ DOS API searchpath จาก directory ที่กำหนดโดย environment PATH
| [[_SearchPathPrg]] | คำอธิบาย |h
| -1 |หาจากภายใน directory ของโปรแกรมเองก่อน ถ้าไม่พบจึงหาโดยใช้ DOS API |
| 0 หรือ OFF |หาจากภายใน directory ของโปรแกรมเองเท่านั้น |
| 1 หรือ ON |หาโดยใช้ DOS API ก่อน ถ้าไม่พบจึงหาจากภายใน directory ของโปรแกรมเอง |

> ข้อดีของ การใช้ DOS API searchpath คือ เราสามารถ จัดที่อยู่ของไฟล์โปรแกรมได้ยืดหยุ่น แต่ข้อเสียคือ การทำงาน DOS API searchpath อาจทำให้เสียเวลา ยิ่งถ้า directory ที่ต้อง search มีไฟล์มาก เช่น windows ก็ยิ่งเสียเวลา
|Default|@@""" _SellTaxChain = OFF """@@|
กรณีที่ใช้ [[_SellTaxChain]]=ON จะมีผลเปลี่ยน sequence การป้อนข้อมูลภาษีขาย โดยหลังจากที่ save ข้อมูลภาษีขาย โปรแกรมจะข้ามไปให้ใส่ข้อมูล เพิ่มหนี้ลูกหนี้ และสต็อกสินค้าออก โดยใส่ค่าในช่อง วันที่ และ เลขที่เอกสาร เป็นค่าเดียวกันกับในรายการภาษีขายที่เพิ่ง save นั้น 

นอกจากนี้ ยังมีผลกับ หน้าจอแสดงรายการภาษีขาย (browse list) เราสามารถใช้วิธีกด Space แล้วกด F1 เพื่อเข้าไปป้อนข้อมูล เพิ่มหนี้ลูกหนี้ หรือสต็อกสินค้าออก ที่มี วันที่/เลขที่เอกสารเดียวกัน 

คำสั่ง [[_SellTaxChain]]=2 ทำงานเหมือน [[_SellTaxChain]]=ON และเพิ่มกรณีสั่งลบรายการภาษีซื้อ โปรแกรมจะส่งคำสั่งไปลบรายการ เพิ่มหนี้เจ้าหนี้ และสต็อกสินค้าเข้า อัตโนมัติ 

ดูเพิ่มเติม: [[_BuyTaxChain]] 
|Default|@@""" _ShowLogo = ON """@@|
แสดง Logo ของ Soft-Craft ตอนเริ่มโปรแกรม 
|Default|@@""" _ShowTitle = ON """@@|
แสดงกรอบ ชื่อ/ที่อยู่ ของกิจการ ตรงกลางจอ 
|Default|@@""" _SleepDelay = 5 """@@|
ในระหว่างที่อยู่ในจอ Browse ข้อมูล ถ้าไม่มีการกดคีย์ใดๆ ภายในกำหนดเวลา (default คือ 5 นาที) โปรแกรมจะปิด database และเข้าสู่ mode sleep (idle) เพื่อปล่อยให้ process อื่นทำงาน จนกว่าจะมีการกดคีย์ 
@@"""
_StkXListStock=hide#,ข้อความเมนู[,hide#,ข้อความเมนู...] 
"""@@

กำหนดเมนูเพื่อแยกแสดงรายการสินค้า ตามเงื่อนไขที่อ้างถึงโดยคำสั่ง [[_StockXListHide]] 

ตัวอย่าง เราสามารถกำหนด channel # ของ [[_StockXListHide]] เตรียมไว้ก่อนได้ไม่จำกัด 
|[[_StockXListHide]].1 = 3 |(ซ่อนรายการสินค้าที่ยอดคงเหลือเป็น 0 ทุกกรณี) |
|[[_StockXListHide]].2 = 0x182,*สีดำ* |(ซ่อนรายการสินค้าที่ยอดเป็น 0 แบบมี transaction และ มีคำว่า "สีดำ" ในชื่อสินค้า) |
|[[_StockXListHide]].3 = 0x102,*สีดำ* |(ซ่อนรายการสินค้าที่ยอดเป็น 0 แบบมี transaction หรือ สินค้าที่มีคำว่า "สีดำ" ในชื่อสินค้า) |
|[[_StockXListHide]].4 = 0x100,!*สีแดง* |(ซ่อนรายการสินค้าที่ไม่มีคำว่า "สีแดง" ในชื่อสินค้า) |

แล้วเราก็กำหนดรายการเมนู ดังนี้ 
|[[_StkXListStock]] = 0,สินค้าทั้งหมด,1,เฉพาะสินค้าที่เหลือในสต็อค,4,สินค้าสีแดง |

> คำสั่งนี้ มีผลให้ขึ้นเมนูเลือกแสดงสินค้าตามเงื่อนไข ก่อน ที่จะเข้าหน้าจอแสดงรายการสินค้าปกติ และไม่สามารถเข้าหน้าจอแสดงรายการปกติ ยกเว้นในคำสั่งนี้มีกำหนด channel 0 ให้เลือกด้วย 

> นอกจากนี้ เมื่อกด F1 เพื่อเลือกชื่อสินค้า จากหน้าจอป้อนข้อมูล สินค้าเข้า, สินค้าออก, บิลขาย, บิลซื้อ โปรแกรมก็จะแสดงเมนูให้เลือกแสดงสินค้าตามเงื่อนไขก่อนเช่นกัน 
|Default|@@""" _StockAltPrice = 0 """@@|
กำหนดให้คำนวณราคาขาย ของสินค้าจากตารางราคา มาแสดงในจอ browse list ของสินค้า แทนราคาที่เก็บใน master ข้อมูลสินค้า 

| default 0 |ใช้ราคาจาก master ข้อมูลสินค้า |
| 1 ถึง 99 |ใช้ราคาตามดัชนี (1-99) จาก ตารางราคา? ที่ตั้งไว้ในข้อมูล สินค้าเพิ่มเติม |
| 100 |ใช้ราคาตามดัชนี 0 จาก ตารางราคา ที่ตั้งไว้ในข้อมูล สินค้าเพิ่มเติม กรณีที่ไม่พบราคาตามดัชนีที่กำหนด โปรแกรมจะใช้ราคาจาก master ข้อมูลสินค้า |
|Default|@@""" _StockFilterChoice = OFF """@@|
ถ้ากำหนดค่าเป็น ON หรือ 1 โปรแกรมจะขึ้นเมนูให้เลือกแสดงรายการสินค้า ระหว่าง สินค้าที่เป็นสต็อก 
สินค้าที่ไม่เป็นสต็อก (มี * นำหน้าชื่อ หรือมี \ ภายในชื่อ หรือมี {N} ภายในหน่วยนับ/หรือชื่อหมวด) 
ก่อนที่จะเข้าสู่จอแสดงรายการสินค้า (browse list) 

> note: คำสั่งใหม่ [[_StkXListStock]] สามารถกำหนดเงื่อนไขเลือกแสดงรายการสินค้าได้หลากหลาย และยีดหยุ่นกว่า 
|Default|@@""" _StockShowQInf=-3 """@@|
(มี.ค.53) ใช้ควบคุมการแสดงข้อมูลเพิ่มเติม (QuickInfo) ที่ด้านล่างของจอ Browse ของข้อมูลสต็อก ผู้ใช้สามารถกด ''Alt + I'' เพื่อสลับระหว่าง ซ่อน/แสดง QuickInfo
| 0 หรือ OFF |ปิด ไม่แสดง QuickInfo |
| -1 |เปิดใช้ QuickInfo แต่ซ่อนเมื่อเริ่ม |
| 1 หรือ ON |เปิดใช้ QuickInfo และแสดงเมื่อเริ่ม |
| 100 |เปิดใช้ QuickInfo และแสดง ไม่สามารถใช้ ~Alt-I เพื่อสั่งซ่อน |
 
|Default|@@""" _TXTCode = 1 """@@|
กำหนดรหัสภาษาไทย ของ export ไฟล์ .TXT
* 0 = รหัส เกษตร 
* 1 = รหัส สมอ. (windows-tis) 
|Default|@@""" _ThaiDate = ON """@@|
แสดงวันที่แบบปี พ.ศ. 
ถ้าใช้ [[_ThaiDate]] = OFF จะเปลี่ยนเป็นปี ค.ศ. มีผลทำให้ การแสดงข้อความจำนวนเงินในรายงานเป็นภาษาอังกฤษด้วย
|Default|@@""" _TransactionDelay = 0 """@@|
กำหนดให้หน่วงเวลา (millisec = 1/100 วินาที) เมื่อโปรแกรมทำการ commit transaction กรณีที่ database server ต้องรับ load ปริมาณมาก มีจำนวน client ที่ connect มาก อาจเกิดปัญหาคอขวด ไม่สามารถ update database ได้ทัน เมื่อมีการ commit 
|Default|@@""" _UseLocalTmp = OFF """@@|
ปกติโปรแกรมจะใช้ directory ''(BTR)'' ที่อยู่ภายใน directory ของโปรแกรมที่ทำงานอยู่ เป็น temp directory

แต่ถ้ากำหนดเป็น ON โปรแกรมจะใช้ directory ตามที่ตั้งไว้ที่ TEMP ใน DOS environment ของเครื่องนั้นๆ เป็นที่เก็บ temp file (.TMP) และ export file (.PRN, .TXT, .CSV) ถ้ากำหนด [[_PrintExportToTemp]] = ON
|Default|@@""" _UseRTC = OFF """@@|
กำหนดให้อ่านเวลาของระบบ (system time) จาก Bios Realtime Clock แทนที่จะอ่านเวลาจาก DOS Time สำหรับ Windows 98 นั้นไม่แตกต่าง แต่สำหรับ Windows 2000, Windows XP ซึ่ง DOS เป็น Virtual Platform จะข้อแตกต่างของเวลาจาก RTC กับ DOS Time นั่นคือ DOS สามารถ Pause หรือหยุดการทำงานชั่วคราวได้ ทำให้เวลาอาจเดินๆ หยุดๆ จนทำให้เวลาของ DOS ไม่ตรงกับเวลาจริง 
ให้โปรแกรมซ่อนชื่อเจ้าหนี้ โดยกำหนดเงื่อนไขจากข้อความในช่องผู้ติดต่อ สามารถใช้ wildcard และ , (comma) เช่น @@"""_VendorHideContact"""=*ซ่อน*,*{H}*@@
ให้โปรแกรมซ่อนชื่อเจ้าหนี้ โดยกำหนดเงื่อนไขจากข้อความในช่องหมวดเจ้าหนี้ สามารถใช้ wildcard และ , (comma) เช่น @@"""_VendorHideVndGroup""" = ส่วนตัว,*เลิก@@
|Default|@@""" _VendorShowQInf=-1 """@@|
(มี.ค.53) ใช้ควบคุมการแสดงข้อมูลเพิ่มเติม (QuickInfo) ที่ด้านล่างของจอ Browse 

ดูรายละเอียดที่ [[_StockShowQInf]]
ใช้สำหรับซ่อนเล่มใบหักภาษี ไม่ให้เลือกใช้ตอนเปิดใบหักภาษี
ดูคำอธิบายจาก [[_InvCfgHideList]]
|Default|@@""" _WTaxLimitWTGNo = ON """@@|
ใช้สำหรับกำหนดให้โปรแกรม ต้องแสดงรายการเล่มใบหักภาษี มาให้เลือก ก่อนเข้าไปเปิดใบหักภาษีหรือไม่
ดูคำอธิบายจาก [[_InvLimitInvType]]
|Default|@@""" _XMem = ON """@@|
กำหนดให้โปรแกรมใช้ XMS เป็น Memory ส่วนขยาย ไม่ควรเปลี่ยนค่านี้ ใช้สำหรับ test debug เท่านั้น 
|Default|@@""" __BDirSkip = OFF """@@ฅ
ใช้สำหรับกำหนด ให้ user สามารถเลือกเปลี่ยน ชุดข้อมูลที่ต้องการ ก่อนเข้าโปรแกรมหรือไม่

| 0 หรือ OFF |ให้โปรแกรมหยุดรอถามชื่อชุดข้อมูลก่อนเข้าโปรแกรม |
| 1 หรือ ON |ไม่ต้องหยุดรอถามชื่อชุดข้อมูลก่อนเข้าโปรแกรม |
| 2 |ไม่ต้องหยุดรอถามชื่อชุดข้อมูลก่อนเข้าโปรแกรม และไม่สามารถเปลี่ยนชุดข้อมูลด้วย |

ใช้คำสั่งนี้คู่กับ [[__BDirStart]] และสามารถใช้ชื่อย่อของ user ที่ต้องการต่อท้าย ช่วยให้สามารถควบคุมการใช้งานชุดข้อมูลที่แตกต่างกัน ของ user แต่ละคนได้ เช่น

[[__BDirStart]].TOM = SALE
[[__BDirSkip]].TOM = 2
มีผลให้ user TOM เข้าโปรแกรมโดยใช้ชุดข้อมูลชื่อ SALE อัตโนมัติ และไม่สามารถเปลี่ยนไปใช้ชุดข้อมูลอื่น

{{{
สำหรับโปรแกรม update ล่าสุด 31/3/48 
(load โปรแกรม update ล่าสุดได้จาก ftp อยู่ใน scaft/small business pack/latest built)

__BDIRSKIP=ON ใน __FSYS.INI
ใช้สำหรับควบคุมให้ข้าม ไม่ต้องหยุดรอถามชุดข้อมูล
ปกติควรใช้คู่กับ __BDIRSTART ดูรายละเอียดได้ที่ http://xpcnet/phpbb2/viewtopic.php?t=388 และเช่นเดียวกับ __BDIRSTART สามารถระบุเจาะจงเฉพาะ user ต่อท้ายได้ เช่น 
__BDIRSTART.TOM=SALE
__BDIRSKIP.TOM=ON

ตามตัวอย่างข้างต้น เมื่อ TOM login เข้ามา จะบังคับชุดข้อมูลสำหรับ TOM เป็นชุดที่ชื่อ SALE และไม่หยุดรอถามชุดข้อมูล ดังนั้น TOM จะถูกบังคับให้เข้าสู่ชุดข้อมูล SALE อัตโนมัติ ไม่สามารถเลือกเปลี่ยนไปชุดข้อมูลอื่น
}}}

{{{
update ล่าสุด built 1/4/48

เพิ่มความหมายกรณี __BDIRSKIP=2 จะบังคับไม่ให้เลือกเปลี่ยนชุดข้อมูลหลังจากเข้าโปรแกรมไปแล้ว ในเมนู เลิก

ที่จริงแล้วมีอีกวิธีที่ผมเคยใช้อยู่คือ บังคับโดยใช้ command line บังคับชื่อ user ที่ใช้ และชื่อชุดข้อมูล เป็นการบังคับเจาะจงในระดับเครื่องเลยว่าต้องเป็น user ชื่อนี้ และใช้ชุดข้อมูลนี้ นั่นคือเมื่อเรียกโปรแกรมผ่าน icon จะทะลุเข้าโปรแกรมอัตโนมัติ ไม่ต้อง login หรือ เลือกชุดข้อมูล ตัวอย่างเช่นที่ BTG ผมใช้วิธีบังคับ login เป็น POS1 ที่เครื่องหนึ่ง และ POS2 อีกเครื่องหนึ่ง ด้วย command line ช่วยให้ตรวจสอบรู้ได้ว่าเป็นบิลที่ออกจาก คอมพิวเตอร์เครื่องไหน
}}}
ใช้สำหรับกำหนด ชื่อชุดข้อมูลเริ่มต้น เมื่อเข้าโปรแกรม ตัวอย่างเช่น
@@"""
__BDirStart = MYDATA
"""@@

> ปกติ โปรแกรมจะใช้ชุดข้อมูลเริ่มต้นชื่อ WORK ถ้าไม่พบก็จะใช้ DATA ถ้าไม่พบอีกก็จะเว้นว่าง

นอกจากนี้ เราสามารถกำหนดชุดข้อมูลเริ่มต้น สำหรับ user แต่ละคนให้แตกต่างกันได้ โดยใช้
[[__BDirStart]]''.ชื่อย่อ'' = ชุดข้อมูล

ต้วอย่างเช่น
[[__BDirStart]].TOM=SALE สำหรับ user TOM จะใช้ชุดข้อมูลชื่อ SALE เป็นชุดข้อมูลเริ่มต้น

คำสั่งนี้ จะต้องอยู่ในไฟล์ """__FSys.INI""" ที่อยู่ใน directory ของโปรแกรมเท่านั้น
| 0 หรือ OFF |lock ไม่อนุญาต user ทุกระดับ |
| 1 หรือ ON |อนุญาตให้ user ทุกระดับ (default) |
| 2 |อนุญาตตั้งแต่ระดับ user2 ขึ้นไป |
| 3 |อนุญาตตั้งแต่ระดับ user3 ขึ้นไป |
| 4 |อนุญาตตั้งแต่ระดับ user4 ขึ้นไป |
| 5 |อนุญาตตั้งแต่ระดับ user5 ขึ้นไป |
| 6 |อนุญาตตั้งแต่ระดับ user6 ขึ้นไป |
| 7 |อนุญาตตั้งแต่ระดับ user7 ขึ้นไป |
| 8 |อนุญาตตั้งแต่ระดับ บัญชี ขึ้นไป |
| 9 |อนุญาตตั้งแต่ระดับ ผู้จัดการ ขึ้นไป |
| 10 |อนุญาต เฉพาะระดับ supervisor |
{{{
ปรับปรุง 21/7/2548

เป็นการปรับปรุง
เพื่อให้เกิดความยืดหยุ่นสำหรับ 
รายงานที่ไม่ Fix รูปแบบ

เราสามารถกำหนดคำสั่งควบคุมรายงาน บางส่วน
ที่เดิมต้องไว้ใน .FRM
เอามาไว้ใน __FSYS.INI แทน
ซึ่งทำให้มีผลกับทุกรายงานอัตโนมัติ
ยกเว้นภายใน .FRM มีคำสั่งนั้นมาซ้อน เพื่อบังคับใช้ค่าตาม .FRM
เพื่อความสะดวกในการเปลี่ยนแปลงค่าในอนาคต

การใช้คำสั่งจะเป็น คำสั่งเดียวกันกับใน .FRM
แต่ต้องเพิ่ม FRM. นำหน้าคำสั่ง เมื่อนำมาใช้ใน __FSYS.INI
เช่น FRM.PORTNO = 2

มีคำสั่งที่เพิ่มขึ้นมาคือ NLINE_PAGE 
เพื่อรองรับกรณีปรับค่า PAGELENGTH
และต้องการปรับจำนวนบรรทัดต่อหน้า ให้สัมพันธ์กัน

มีผลก็คือ ถ้ามีการกำหนด LINE_PAGE จาก __FSYS.INI
สำหรับ .FRM ที่มีกำหนด NLINE_PAGE=ON
ก็ให้ใช้ค่าตาม __FSYS.INI นั้น 
แต่ถ้าไม่มีกำหนดใน __FSYS.INI
จะใช้ค่าตาม LINE_PAGE ใน .FRM

กลับกันถ้ากำหนด NLINE_PAGE=OFF
ก็จะมีผลบังคับใช้ค่า LINE_PAGE ใน .FRM
และยัง reset ค่า PAGELENGTH ให้เป็น 11 อีกด้วย

สำหรับโปรแกรมรุ่นเก่า ที่ไม่รู้จัก NLINE_PAGE 
ก็จะใช้ค่าตาม LINE_PAGE เดิม 
แต่โปรแกรมรุ่นใหม่ก็จะใช้ค่า NLINE_PAGE 
ช่วยให้เราออกแบบ .FRM รองรับทั้งโปรแกรมรุ่นเก่าและรุ่นใหม่


อ้างถึง

คำสั่งที่สามารถใช้ได้ใน __FSYS.INI ได้แก่
LEAVETMPFILE
LOCALELBL
THAIPRINT
MONEYTXTSEP
15PAPER
OUTSCR
OUTPUT
ADJCPI
PRNCOPY
PGPAUSE
PORTNO
TTLPGPRINT
PGPRINT
PRINTGRID
FEED
THAIFEED
ONEPASS
COLOR
EMPHASIZE
LQ
QUALITY
LQFONT
BORDER
SHOWDATETIME
SHOWFRMNAME
SHOWTITLE
SHOWQUERY
WAITSETUP
EXPORTNAME
TITLEMASK
QUERYMASK
TXTCODE
PRNCODE
CSVCODE
CSVDATE
_MONEY
PAGENO_PIC
UNIDIR
PRINTNODATA
INSLEFTMARGIN
PAGELENGTH
PAGESUBLENGTH
LINE_PAGE
TTLPAGENO_ROW
TTLPAGENO_COL
PAGENO_ROW
PAGENO_COL
PAGEDATE_ROW
PAGEDATE_COL
PAGETIME_ROW
PAGETIME_COL
FRMCODE_ROW
FRMCODE_COL

และคำสั่ง set ค่าสี ในส่วนต่างๆของรายงาน
C.NORMAL
C.DATANUM+
C.DATANUM-
C.DATADATETIME
C.BORDER
C.PAGENO
C.TTLPAGENO
C.PAGEDATE
C.PAGETIME
C.FRMCODE
C.HEAD
C.DETAIL
C.FOOT
C.TITLE0
C.TITLE1
C.REPTITLE
C.COUNT
C.BRK
C.TOTAL
C.QUERY
}}}
{{{
ปรับปรุง 26 ก.ค. 2548

ใครที่เคยติดปัญหา
การวางระบบ คาใจอยู่นาน
อ่านเรื่องนี้จบ
รับรองว่าจะต้อง ซี๊ด..ปาก กัน   

ก่อนอื่นต้องขอยอมรับก่อน
ว่า เรื่องนี้ ไม่ได้อยู่ในแผนมาก่อน
และก่อนหน้านั้น 
ก็เคยคิดหาทางแก้ปัญหาอยู่นาน

อยู่ดีๆ พอ เพิ่มคำสั่ง _InvCfgHideList
ก็เลย ปิ๊งไอเดีย
ว่าเราน่าจะกำหนดได้ว่า
คำสั่งนี้ มีผลเฉพาะกับ user คนไหนได้

ตอนแรกก็ทำใช้ เฉพาะกับ _InvCfgHideList
พอทำแล้ว ก็เลยเปลี่ยน
ย้ายมันมาตรวจกันตอนที่ load ไฟล์ __FSYS.INI กันซะเลย
ทำให้มันกลายเป็นคำสั่งมาตรฐาน
สามารถใช้ควบกับคำสั่งอะไรก็ได้

ลองดูตัวอย่าง


โค๊ด:
<sale>@_InvCfgHideList = !S*
<acc>@_InvCfgHideList = !*
_InvCfgHideList = T*
แปลว่า 
สำหรับ user sale จะถูกซ่อนหมวดบิลทุกหมวด 
ยกเว้นหมวดที่ขึ้นต้นด้วย S
สำหรับ user acc จะเห็นหมวดบิลทุกหมวด
ส่วน user อื่นๆ ที่เหลือ จะไม่เห็นบิลหมวดที่ขึ้นต้นด้วย T

กลไกของมันเป็นอย่างนี้ครับ

สำหรับบรรทัดที่ขึ้นต้นด้วย
<.....>@
โปรแกรมจะตรวจสอบว่า
ไอ้ที่อยู่ใน <....> มันตรงกับ
ชื่อย่อ ของคนที่ login เข้ามาหรือเปล่า

ถ้าไม่ใช่
โปรแกรมก็จะ ตัดบรรทัดนั้นทั้งบรรทัดออกไป จากรายการ INI
แต่ถ้าใช่
โปรแกรมก็จะคงบรรทัดนั้นไว้ 
โดยตัดท่อน <....>@ ที่นำหน้าทิ้งไป

จากตัวอย่างข้างบน
ถ้าผู้ใช้คือ sale เป็นผู้ login เข้ามา

ก็จะได้ __FSYS.INI หลังจากกรองผู้ใช้แล้วดังนี้

โค๊ด:
_InvCfgHideList = !S*
_InvCfgHideList = T*
ตามกลไกปกติของ INI ในโปรแกรม คำสั่งที่มีผล ก็คือคำสั่งที่อยู่ก่อน

เราสามารถใช้ได้ แม้กระทั่งกับคำสั่ง #include
เช่น
<sale>@#include=salecfg.ini
<acc>@#include=acccfg.ini

ตอน ไอนสไตน์ คิด ทฤษฏี สัมพันธภาพ
ก็ไม่เคยคิดว่า e = mc2 
จะกลายเป็น ระเบิดปรมาณู

ขอให้พวกคุณ บรรเจิด เตลิดเปิดเปิง สักพัก
เอาโปรแกรมไป upgrade แล้ว set กันให้มันส์
ผสมกันกลายเป็น ระเบิด หรือ กลายเป็น โรงไฟฟ้า
ก็แล้วแต่ จินตนาการ นะครับ
ผมหว้งแต่ว่า จะได้มีเวลาพัก ทำอย่างอื่นบ้าง
 :idea:  :idea:
}}}

{{{
ปรับปรุง 1 ส.ค. 48

เพิ่มเติมอีกเล็กน้อย
แต่ประโยชน์ มหาศาล

สามารถใช้กับไฟล์ .INI, .FRM ทุกไฟล์

สามารถใช้ wildcard ภายใน <....>@ 
หรือใส่เป็น list ก็ได้ เช่น

<ADM,JOE>@SHOWCOST = OFF
<!ADM*>@SHOWCOST = 5

เพิ่มเงื่อนไขกับ รหัสแผนก ของผู้ใช้
<depcode:.....>@....
เช่น
<depcode:FIN*,ACC*>@....

เพิ่มเงื่อนไข ระดับผู้ใช้
<userlevel:...>@...
เช่น
<userlevel:1,2,3>@...

เพิ่มเงื่อนไข ชุดข้อมูล
<bdir:...>@...
เช่น
<bdir:DEMO>@...
}}}
{{{
13/1/2553

คำสั่ง _GlbLowDate

สามารถใช้ได้เหมือนกับคำสั่ง LockHiDate

แต่ _GlbLowDate จะมีผลกับข้อมูลทั้งหมด
สำหรับ บิลซื้อ, บิลขาย, ใบจ่าย, ใบเสร็จ สามารถกำหนดขยาย แบบเจาะจงเฉพาะหมวดบิลได้ 
เช่น _GlbLowDate.xx 

เราสามารถกำหนดวันที่ ที่ยินยอมให้ user เห็นข้อมูล ได้ 3 ลักษณะดังนี้

1. days count 
กำหนดจำนวนวัน ที่ยินยอมให้ย้อนหลัง นับจากวันที่ปัจจุบัน
เหมือนกับคำสั่ง LockHiDate เดิม
เช่น _GlbLowDate=7 แสดงข้อมูลย้อนหลังได้ 7 วัน
คำสั่งซ่อนนี้ มีผลกับ ระดับ user1 - ผู้จัดการ (ไม่มีผลกับ supervisor)
ยกเว้น เราบวกค่า bias สำหรับกำหนด ระดับ user ที่มีผลกับคำสั่งนี้ ดังนี้
+1000 ซ่อนข้อมูล สำหรับ ระดับต๋ำกว่า user1 (แปลว่า ไม่ซ่อนข้อมูล สำหรับ  user ทุกระดับ)
+2000 ซ่อนข้อมูล สำหรับ ระดับต่ำกว่า user2 (ซ่อนสำหรับ user1)
+3000 ซ่อนข้อมูล สำหรับ ระดับต่ำกว่า user3 (ซ่อนสำหรับ user1 - user2)
+4000 ซ่อนข้อมูล สำหรับ ระดับต่ำกว่า user4 (ซ่อนสำหรับ user1 - user3)
+5000 ซ่อนข้อมูล สำหรับ ระดับต่ำกว่า user5 (ซ่อนสำหรับ user1 - user4)
+6000 ซ่อนข้อมูล สำหรับ ระดับต่ำกว่า user6 (ซ่อนสำหรับ user1 - user5)
+7000 ซ่อนข้อมูล สำหรับ ระดับต่ำกว่า user7 (ซ่อนสำหรับ user1 - user6)
+8000 ซ่อนข้อมูล สำหรับ ระดับต่ำกว่า บัญชี (ซ่อนสำหรับ user1 - user7)
+9000 ซ่อนข้อมูล สำหรับ ระดับต่ำกว่า ผู้จัดการ (ซ่อนสำหรับ user1 - บัญชี)
ตัวอย่างเช่น 
_GlbLowDate=9007 (คำสั่งซ่อน 7 วัน สำหรับ user1 - บัญชี)

2. absolute date
กำหนดวันที่แบบเจาะจง 
เช่น _GlbLowDate=1/1/53 ให้แสดงข้อมูล เริ่มตั้งแต่ วันที่ 1/1/53
คำสั่งนี้ มีผลกับ user1 - ผู้จัดการ
เราสามารถบวก bias ในค่า วัน เพื่อมีผลกับระดับ user ที่ต้องการ เช่นเดียวกันข้อ 1
เช่น _GlbLowDate=9001/1/53

นอกจากนี้ สามารถใช้ bias +1000 ในค่าเดือน เพื่อให้มีผลกับ user ทุกระดับ ไม่เว้นแม้แต่ supervisor
เช่น _GlbLowDate=1/1001/53

3. relative date
แบบกำหนด -วัน/-เดือน/-ปี ที่บวกลบ อ้างอิงจาก วันที่ปัจจุบัน
โดยใช้รูปแบบคล้ายวันที่ แต่มีค่าเป็นลบ 
เช่น _GlbLowDate=0/-1/0  ให้แสดงข้อมูลย้อนหลังไม่เกิน 1 เดือน
หรือ _GlbLowDate=-7/0/0 ให้แสดงข้อมูลย้อนหลังไม่เกิน 7 วัน (มีผลเช่นเดียวกับ _GlbLowDate=7)

กรณีใช้ bias เพื่อควบคุมระดับ user ที่ต้องการ
เช่น _GlbLowDate=9000/-1/0 หรือ -9007/0/0

ใช้ bias เพื่อให้มีผลกับทุก user
เช่น _GlbLowDate=0/-1001/0 หรือ _GlbLowDate=-7/1000/0

note:
กรณี days count การกำหนด จำนวนวันย้อนหลังจะใช้ค่าเป็นบวก ปกติ
แต่กรณี relative จะใช้ค่าเป็นลบ เพื่อย้อนหลัง

note: 
ผลจากการ update นี้ ทำให้คำสั่ง LockHiDate เดิม 
สามารถใช้รูปแบบการกำหนดค่า แบบเดียวกับ _GlbLowDate ได้อีกด้วย

update 15/1/53

bias พิเศษ
+10000 
  สำหรับ บิลขาย/บิลซื้อ กรณีหมวดบิลที่ใช้ผ่านรายการลูกหนี้/เจ้าหนี้ ให้แสดงบิลที่ค้างชำระด้วย
  สำหรับ ใบเสร็จ/ใบจ่าย กรณีหมวดบิลที่ใช้ชำระ ให้แสดงบิลที่ค้างชำระด้วย

+20000 
  สำหรับ ใบจ่าย/ใบเสร็จ กรณีหมวดบิลที่ใช้ผ่านรายการวางบิล ให้แสดงบิลที่ไม่มีวันที่นัดด้วย

bias พิเศษ ใช้บวกเพิ่มในค่า "วัน" 
เช่น _GlbLowDate=19007
หรือ _GlbLowDate=-10007/1000/0

note: สำหรับรายการชำระ บิลขาย/บิลซื้อ มีแนวคิด 2 แบบคือ
1. แสดงข้อมูล ตามเงื่อนไขวันที่ชำระ ของข้อมูลตัวเอง (default)
2. แสดงข้อมูลโดยอิงกับ วันที่ของ บิลขาย/บิลซื้อ ที่ refer อยู่ (ยังไม่ implement)

module suffix extension
ใช้สำหรับกำหนด _GlbLowDate ในระดับ module เช่น _GlbLowDate._Inv_
สามารถใช้ร่วมกับหมวดบิลได้ด้วย เช่น _GlbLowDate._Inv_.RC 
(แก้ปัญหากรณีมีการใช้รหัสหมวดบิลเหมือนกัน ในระบบต่างกัน เช่น ใบเสร็จ กับ บิลขาย ให้หมวด RC เหมือนกัน)

_Tax_ ภาษีมูลค่าเพิ่ม
_Stk_ สต็อก
_Cus_ ลูกค้า
_Vnd_ เจ้าหนี้
_Inv_ บิลขาย
_Po_ บิลซื้อ
_Rcp_ ใบเสร็จ
_Mrc_ ใบจ่าย
_Bnk_ บัญชีธนาคาร
_Chq_ เช็ค
_WTax_ หักภาษี ณ ที่จ่าย
_WS_ ใบค่าจ้าง
_Wkr_ พนักงาน
_GV_ บัญชีแยกประเภท
_SOBo_ ค้างส่ง
_SIBo_ ค้างรับ
_FA_ ทรัพย์สินถาวร

}}}

{{{
อ้างจาก: jojosati ที่ มกราคม 13, 2010, 01:02:46 pm
bias พิเศษ
+10000 
  สำหรับ บิลขาย/บิลซื้อ กรณีหมวดบิลที่ใช้ผ่านรายการลูกหนี้/เจ้าหนี้ ให้แสดงบิลที่ค้างชำระด้วย
  สำหรับ ใบเสร็จ/ใบจ่าย กรณีหมวดบิลที่ใช้ชำระ ให้แสดงบิลที่ค้างชำระด้วย

+20000 
  สำหรับ ใบจ่าย/ใบเสร็จ กรณีหมวดบิลที่ใช้ผ่านรายการวางบิล ให้แสดงบิลที่ไม่มีวันที่นัดด้วย


1. เมื่อใช้เป็นใบจ่าย/ใบเสร็จ ผ่านรายการไปชำระบิล ใบที่มีวันที่ก่อน LowDate ปกติจะถูกซ่อนทั้งหมด แต่สามารถสั่งให้ยกเว้น แสดงใบที่ค้างชำระ โดยใช้ +10000

ืnote: ใบที่ไม่มีวันที่นัด ย่อมไม่สามารถใส่รายละเอียดการชำระ ดังนั้นจึงเข้าเงื่อนไข เป็นใบที่ค้างชำระ แต่ความหมายของ เงื่อนไขค้างชำระ รวมถึงใบที่มีวันที่นัด แต่ยังไม่มีรายละเอียดการชำระด้วย

2. เมื่อใช้วางบิล ผ่านรายการไปปรับสถานะวางบิล ใบที่มีวันที่ก่อน LowDate ปกติจะถูกซ่อนทั้งหมด แต่สามารถสั่งให้ยกเว้น แสดงใบที่ไม่มีวันที่นัด  โดยใช้ +20000

3. เมื่อใช้เป็นใบลอยๆ ไม่ได้เชื่อมโยงไปผ่านรายการใดๆ bias พิเศษจะไม่มีผล ใบที่มีวันที่ก่อน LowDate ปกติจะถูกซ่อนทั้งหมด 

}}}
| รอเรียบเรียง |
{{{
28/11/2551

ขอ note ไว้ก่อน

ซ่อนรายชื่อสินค้าที่ไม่มีในสต็อค ตอนกด F1 ในบิลขาย และบิลซื้อ
ให้แสดงเฉพาะสินค้าที่ยอดคงเหลือเป็น 0

พิเศษคือ จะต้องกำหนดเงื่อนไขอื่นๆ เช่น
ซ่อนเฉพาะสินค้าที่ เคยมีรายการเข้า-ออก
ซ่อนเฉพาะสินค้า บางกลุ่ม

1-12-51
ทบทวนความสามารถเดิม
ความสามารถที่โปรแกรมทำได้อยู่แล้ว
1. เราสามารถใช้ {H} ในหมวดสินค้า หรือหน่วยนับ 
เพื่อซ่อนรายการสินค้าที่ไม่ต้องการให้แสดงตอนกด F1 เลือกสินค้าตอนเปิดบิล

2. เราสามารถกำหนดใน __FSYS.INI 
เพื่อสั่งซ่อนสินค้าบางหมวด หรือสินค้าบางชื่อ ตอนกด F1  
_StockHidePGroup=wildcard และ _StockHideUnit=wildcard
}}}

{{{
1/12/51

-หารือ หน่อยครับ ผมนอนคิดไป คิดมา คิดว่า น่าจะเพิ่มการกด แบบพิเศษ ด้วย
น่าจะดี เช่น กด Ctrl+F1(เป็นการเรียกแบบดั้งเดิม)  
เพราะบางครั้ง อาจต้องการดึงรายการ บางอย่างมาทำรายการ หรือตรวจสอบรายการปกติ
เวลาลูกค้ามีปัญหา หรือสอบถามได้ (สามารถปิด/เปิด ความสามารถนี้ได้ด้วย)

รบกวนฝากให้พิจารณาด้วยครับ

5/12/51

-อ้อ อย่าลืม แยกระหว่างบิลซื้อกับบิลขายด้วยครับ (ต้องรองรับแบบเฉพาะหมวดด้วย)
อิ อิ ขอทีเดียว เยอะ เลย
}}}

{{{
6-12-51
คำสั่งสำหรับซ่อนรายการสินค้า
_StockXListHide.#=mode,sign (wildcard)
เช่น
_StockXListHide.1 = 3
ซ่อนรายการสินค้าที่ยอดคงเหลือเป็น 0 ทุกกรณี
_StockXListHide.2 = 0x182,*สีดำ*
ซ่อนรายการสินค้าที่ยอดเป็น 0 แบบมี transaction และ มีคำว่า "สีดำ" ในชื่อสินค้า
_StockXListHide.3 = 0x102,*สีดำ*
ซ่อนรายการสินค้าที่ยอดเป็น 0 แบบมี transaction หรือ สินค้าที่มีคำว่า "สีดำ" ในชื่อสินค้า
_StockXListHide.4 = 0x100,!*สีแดง*
ซ่อนรายการสินค้าที่ไม่มีคำว่า "สีแดง" ในชื่อสินค้า


เราสามารถกำหนด # ของ xlist เตรียมไว้ก่อนได้ไม่จำกัด

ส่วนทางด้านบิลขาย
สามารถกำหนดเมนูเวลากด F1 เลือกสินค้าดังนี้
_InvXListStock=#xlist,ข้อความเมนู,#xlist,ข้อความเมนู,...
เช่น
_InvXListStock=0,สินค้าทั้งหมด,1,เฉพาะสินค้าที่เหลือในสต็อค,4,สินค้าสีแดง
ถ้าผู้ใช้เลือก "เฉพาะสินค้าที่เหลือในสต็อค"
โปรแกรมก็จะแสดงรายการสินค้าตามคำสั่ง _StockXListHide.1
ตามตัวอย่างข้างบน กำหนดไว้เป็น 3 นั่นคือ ให้ซ่อนรายการสินค้าที่จำนวนเป็น 0 ทั้งหมด


อ้างถึง
_StockXListHide.#=mode,sign (wildcard)
qty status
1 = hide if qty is zero trn (ซ่อน จำนวนเป็น 0 ที่มีรายการเข้า-ออก)
2 = hide if qty is zero non-trn (ซ่อน จำนวนเป็น 0 ที่ไม่มีรายการเข้าออก)
4 = hide if qty is negative (ซ่อนจำนวนติดลบ)
8 = hide if qty is positive (ซ่อนจำนวนบวก)

extend nstk
+16 (0x10) = exclusive mode ****
+32 (0x20) = hide if stockable (สินค้าที่ตัดสต็อกได้)
+64 (0x40) = hide if non-stockable (สินค้าที่ไม่ตัดสต็อค เช่น มี * ข้างหน้า หรือมี comment \ )

extend sign string checking
+128 (0x80) = exclusive mode ****
+256 (0x100) = hide if match wildcard in PName
+512 (0x200) = hide if match wildcard in PGroup
+1024 (0x400) = hide if match wildcard in UnitName
+2048 (0x800) = hide if match wildcard in  AltName

**** note: exclusive mode means
hide if qty status is TRUE 'and' extend checking also TRUE
example: 
mode 35 (3+32) = (not exclusive) hide if zero qty 'or' stockable 
  (hide all zero + hide all stockable)   -> show only 'non-zero with non-stockable' 
mode 51 (3+16 + 32) = (exclusive) hide if zero qty 'and' stockable
 (hide only zero in stockable product)  -> show all except 'zero with stockable' 


note เพิ่มเติม
ความสามารถสร้างเมนู ตัวเลือกสต็อค ในบิลขายจะต้องใช้ _Inv2_ หรือ _Inv3_ เท่านั้น ส่วน _Inv1_ ที่เป็นโปรแกรมมาตรฐานใช้ไม่ได้ ดูข้อแตกต่างระหว่าง _Inv1_, _Inv2_, _Inv3_ ได้ที่นี่
http://admthai.homeip.net/forum/index.php/topic,338.msg3117.html#msg3117

คำสั่งซ่อนที่ตรวจสอบจำนวน จะไม่ทำงานถ้ามีการใช้คำสั่ง StkKeepQty
http://admthai.homeip.net/forum/index.php/topic,530.0.html
และตรวจสอบจากจำนวนรวม(ที่ฟิลด์ข้อมูลสต็อค) โดยไม่มีการคำนวณแยกโกดัง

ไฟล์ที่ update
_Stk*.EXE
H_Stk*.EXE
_Inv*.EXE

สำหรับบิลซื้อ ใช้คำสั่งลักษณะเดียวกับบิลขายคือ

_PoXListStock=#xlist,ข้อความเมนู,#xlist,ข้อความเมนู,...


และจะต้องใช้ไฟล์ใหม่คือ _Po2_ แทน _Po1_ เดิม
}}}
{{{
2 กันยายน 2548

เพิ่มให้ใส่ ที่เก็บ หรือ โกดัง เข้าไปด้วย

ผลก็คือ
เปลี่ยนโครงสร้าง database ของระบบนี้
ใหม่ทั้งหมด

พูดง่ายๆ ก็คือ
รื้อใหม่หมด

ข้อมูลของเก่า
ต้องทิ้ง
สั่งสร้างแฟ้มข้อมูลใหม่ ทับไปเลย

การใช้งาน ทั่วๆ ไปก็ เหมือนเดิม

เพียงแต่ต้องระบุ ชื่อที่เก็บ (ถ้ามี)
ช่วยให้ สามารถตรวจนับ 
แยกทีละโกดัง

การ Post รายการปรับปรุงยอด
ไปที่บิลขาย
สามารถกำหนดให้
ผ่านรายการบิลอัตโนมัติ 
ในคราวเดียวกันได้ด้วย

สามารถสร้างรายการ
ปิดงวด เพื่อ Lock ยอดของโกดังนั้น
ได้อีกด้วย

คำสั่งใน __FSYS.INI ค่า default

_StkCntAdjDirect = ON
กำหนดว่า ยินยอม 
ให้สั่ง Post รายการปรับปรุง
ไปที่ รายการสินค้าออก โดยตรง 
โดยไม่ผ่านบิลขาย ได้หรือไม่

_StkCntMaxInvItm = 16
กำหนด จำนวนบรรทัด ต่อบิล 1 ใบ
เมื่อ Post รายการปรับปรุงไปบิลขาย
ถ้ากำหนดเป็น 0 ก็จะมีผล
ไม่ยินยอม ให้ Post ไปเข้าบิลขาย

_StkCntPostInv = OFF
กำหนดให้ ทำการ ผ่านรายการบิลขาย
เพื่อ ตัดสต๊อก ทันทีพร้อมกันไปเลยหรือไม่

_StkCntAddTrnClosed = OFF
กำหนดให้ สร้าง Closed Transaction
(รายการสินค้าเข้า ที่เลขที่เอกสารเป็น ดอกจัน
ชื่อสินค้าเป็นดอกจัน ใช้สำหรับ lock ไม่ให้ทำรายการย้อนหลัง)
อัตโนมัติ เมื่อ Adjust เสร็จหรือไม่
}}}
{{{
กำหนด __Fsys.ini

InvTabPic = 99
InvTabPicX = 99
InvTabWinRow = 8
InvTabWinCol = 10
InvTabMaxRow = 10
InvTabMaxCol = 10

_Inv_ = _Invcs_

การป้อนข้อมูลใน Stock \{frm=cs} (ถ้าจำไม่ผิด)
}}}

{{{
INVCS.TXT
_INVCS_: Inv module add-on

Usage:
_Inv1_ = _InvCS_

Inv Table Input
---------------
\{FMT=CS} -> <F1>
or
\{FMT=CC} -> <F1>

__FSYS.INI
----------
InvTabPic=99  ;item picture
InvTabPicX=99 ;total picture
InvTabWinRow=8 ;position of popup window
InvTabWinCol=10 ;position of popup window
InvTabMaxRow=10 ; max row
InvTabMaxCol=10 ; max col
}}}
{{{
_InvTypeAsLastPrice=""	// use same invtype to search last price
_InvPrcTabByDsc=OFF		// ON or 1 = use dsc for -xx, 2 = for +xx, 3= for - and +
_InvGetLastPrice=2		// scan last price for 2 last times
_InvUsePrcTab=-1000		// use prc tab for only exist customer/with loosely prc choice

InvUsePrcTab combine value
---------------------------
1000= use prc tab for only customer that exist in customer file
2000= disable if stock has no prctab use prctab name="*stkgrp" instead
4000= disable prctab (check for lastprice only)
1xx	= if customer has prcidx=0 then use prcidx=xx instead
	all value can combine by adding
	value can be negative for loosely price choice
	negative -> show all possible price of other prcidx
	positive -> show all price within prcidx only

InvGetLastPrice combine value
-----------------------------
deep bit:	0-3 = deep level (max=16) (0x01 - 0x0F)
			4-5 = reserved
			6	= skip same price (0x40)
			7	= prefer as default choice (0x80)
			8	= filter on salename (0x100)
			9	= filter on invbrief (0x200)
			10	= reserved
			11	= reserved
			12	= (0x1000) for '*' cusname (or empty) = not check (default is check)
			13	= (0x2000) for any cusname (except '*' or empty) = not check   (default is check)
			14  = (0x4000) for '*' filter (or empty) = not check (default is check)
			15	= (0x8000)- for any filter (except '*' or empty) = not check  (default is check)
}}}
[[ต้นทุนแฝง]] เป็นส่วนหนึ่งของ ~MOD-CIN ต้องการบันทึกค่าใช้จ่ายเกี่ยวกับการนำเข้า เอาไปบวกเพิ่มกับมูลค่าต้นทุนสินค้า 
[[ต้นทุนแฝง]]คือ การบันทึกค่าใช้จ่ายหรือต้นทุนเพิ่มเติมที่เกิดขึ้นภายหลัง กับสินค้าที่เข้าสต็อกไปแล้ว เช่น ค่าพิธีการศุลกากร, ค่าขนส่ง ฯลฯ ซึ่งค่าใช้จ่ายหรือต้นทุนเพิ่มเติมที่เกิดขึ้นนั้นอาจจำเป็นต้องคำนวณเฉลี่ยให้กับสินค้าหลายๆ ตัวที่เข้าสต็อกในล็อตเดียวกันนั้น เพื่อไปบวกเพิ่มเข้าเป็นต้นทุนแฝงให้กับสินค้านั้น 
!!!!คำอธิบายเพิ่มเติม เกี่ยวกับ concept ของ[[ต้นทุนแฝง]] (กุมภาพันธ์ 2548) 
การบันทึก[[ต้นทุนแฝง]] คือ การเปิดบิลซื้อต้นทุนแฝงใบใหม่ เพื่อนำยอดจำนวนเงินในบิลซื้อใหม่ ไปผนวกกับต้นทุนสินค้า ของบิลซื้อที่รับสินค้าเข้าสต็อกใบเดิม ดังนั้น ในบิลซื้อต้นทุนแฝงใบใหม่ จะต้องระบุเงื่อนไขอ้างถึงบิลซื้อใบเดิม ซึ่งอาจมีหลายใบ เช่น เลขที่บิล, วันที่ของบิลซื้อ ฯลฯ
* บิลซื้อ โปรแกรมใช้บิลซื้อทำการบันทึกค่าใช้จ่ายหรือต้นทุนเพิ่มที่เกิดขึ้น โดยภายในบิลซื้อสามารถกำหนดเงื่อนไข ที่สั่งให้โปรแกรมไปหารายการสินค้าที่ต้องการให้ทำการเฉลี่ยยอดต้นทุนแฝง 
** ในหมวดบิลซื้อที่ใช้ต้นทุนแฝงต้องใส่ ~X 
** ภายในบิลซื้อจะต้องอ้างถึงเลขที่เอกสาร ที่เป็นเลขที่เดียวกับบิลซื้อที่ใช้ผ่านรายการเข้าสต็อกใช้อ้างถึง เช่น ถ้าบิลซื้อหมวดที่ผ่านรายการเข้าสต็อกอ้างถึงเลขที่ใบกำกับภาษี บิลซื้อที่ใช้ผ่านต้นทุนแฝงก็ต้องอ้างถึงเลขที่ใบกำกับภาษีเหมือนกัน (ไม่ใช่เลขที่ของบิลซื้อ) 
** ใส่รายละเอียดหรือรายการของค่าใช้จ่ายที่เกิดขึ้น เหมือนกับบิลค่าใช้จ่ายปกติ เมื่อสั่งผ่านรายการ บิลซื้อจะไปตรวจหารายการเข้าสต็อก ที่มีเลขที่เอกสารตรงกับที่อ้างถึง นำมาคำนวณเฉลี่ยต้นทุนแฝง โดยใช้วิธีปัน cost ตามมูลค่าของสินค้า (นำมูลค่าทั้งหมดมารวมกัน เพื่อ weight สัดส่วนของมูลค่าต้นทุน) 
* """__FSys.INI""" จะต้องกำหนด XCostLevel=128 เพื่อเปิดให้โปรแกรมรับรู้การใช้งานต้นทุนแฝง 
* รายการเข้าสต็อก ที่หน้าจอ browse สำหรับสินค้าที่มีต้นทุนแฝง จะมีเครื่องหมาย + ขึ้นที่หน้าชื่อสินค้า และเมื่อเคาะ space โปรแกรมจะแสดงรายละเอียดของต้นทุนแฝงที่บันทึกไว้กับรายการสินค้าเข้าสต็อกดังกล่าว 
* รายงานสต็อกสินค้า(ใหม่) มีตัวอย่างรายงานเพิ่มเติม ที่แสดงยอดต้นทุนแบบคำนวณรวมต้นทุนแฝง 

ดูเพิ่มเติม [[ต้นทุนแฝง-advance1]]
!!!!เทคนิค การใช้งาน[[ต้นทุนแฝง]] advance (กุมภาพันธ์,เมษายน 2548) 
* [[ต้นทุนแฝง]] ภายในโปรแกรมแยกเป็น 3 level (เดิมมี 2 level)
** level 1 (~XCost) เป็นต้นทุนแฝงที่ "มี" ผลเปลี่ยนแปลงมูลค่าที่ใช้ในการคำนวณเฉลี่ยต้นทุนแฝงในครั้งถัดไป กรณีที่มีการทำต้นทุนแฝงมากกว่า 1 ครั้ง 
** level 2 (Expense) เป็นต้นทุนแฝงที่ "ไม่มี" ผลเปลี่ยนแปลงกับการคำนวณเฉลี่ยต้นทุนแฝงในครั้งถัดไป 
** level 3 (Deposit) เหมือนกับ level 2 ใช้สำหรับ deposit (ปรับปรุงเพิ่มเข้ามา เมษายน 2548) update ล่าสุด 23-4-2548 ตกลงการแก้ไขโปรแกรมเพื่อรองรับ deposit ทำดังนี้ บิลซื้อ/ผ่านรายการ สำหรับบรรทัดค่าใช้จ่ายที่มีคำว่า ''{XDEP}'' เมื่อผ่านรายการจะไปเข้ายอดต้นทุนแฝงชนิดใหม่ เป็นยอด Deposit 
* รายการเข้าสต็อค เมื่อกด space หรือ Enter เพื่อแสดงรายละเอียดของรายการเข้าสต็อค ในจอย่อยที่แสดงรายการต้นทุนแฝง เดิมจะมีคอลัมน์ของยอด ~XCost กับ Expense จะมีคอลัมน์เพิ่มอีกเป็นยอดของ Deposit แต่มูลค่าของต้นทุนต่อหน่วยเฉลี่ยที่คำนวณรวมต้นทุนแฝง จะคำนวณรวมเฉพาะยอดของ ~XCost กับ Expense 
* รายงานสต็อก เพิ่ม field ~IXDeposit (เฉลี่ย deposit ต่อหน่วย) และ ~IXDAmnt (มูลค่า deposit) 
* กรณีที่ต้องการให้ต้นทุนแฝงมีผลเหมือนกับเป็นต้นทุนจริงๆ เช่น ในรายงานสต็อก(ใหม่) ให้รายงานมาตรฐาน ทุกตัวใช้มูลค่าต้นทุนที่รวมมูลค่าแฝง แล้ว, หรือรายงานวิเคราะห์การขาย ให้เปรียบเทียบกับต้นทุนที่รวมมูลค่าแฝง สามารถกำหนดค่า XCostLevel ใน """__FSys.INI""" 
** 1 ให้รวมคำนวณมูลค่าแฝงของ ต้นทุน level1 
** 2 ให้รวมคำนวณมูลค่าแฝงของ ต้นทุน level2 
** 3 ให้รวมคำนวณมูลค่าแฝงของ ต้นทุนทั้ง 2 level 
** ปรับปรุงเพิ่ม เมษายน 2552 เพิ่ม level 4 - 7 ดูที่ XCostLevel 
* คำสั่งเงื่อนไขพิเศษ ภายในบิลซื้อ นอกจากกำหนดเลขที่อ้างถึง เพื่อเลือกล็อตของสินค้าที่ต้องการเฉลี่ยแล้ว เราสามารถกำหนดเงื่อนไขที่ซับซ้อนภายในบรรทัดรายการของบิลซื้อ แทนการกำหนดที่เลขที่อ้างถึงก็ได้ มีคำสั่งดังต่อไปนี้ 
> \''{DOC}[''wildcards'']'' 
> \''{DATE}[''99/99/99'']'' หรือ \''{DATE}[''99/99/99''-]'' หรือ \''{DATE}[''99/99/99''-''99/99/99'']'' 
> \''{PGRP}[''wildcards'']'' 
ตัวอย่าง 
> \ใบสั่งซื้อ''{DOC}[''I0523*,X0507*'']'' 
> \วันที่''{DATE}[''1/1/48''-]'' 
* กรณีที่มีเงื่อนไขมากกว่า 1 เงื่อนไข ทุกเงื่อนไขที่ระบุจะต้องเป็นจริงทั้งหมด 
** ''inclusive case'' บรรทัดที่มี \{+} ถ้าเงื่อนไขเฉพาะบรรทัดนั้นบรรทัดเดียวเป็นจริง ให้รวมข้อมูลสินค้าเข้านั้น มาคำนวณกระจายต้นทุน 
** ''exclusive case'' บรรทัดที่มี \{-} ถ้าเงื่อนไขเฉพาะบรรทัดนั้นบรรทัดเดียวเป็นจริง ให้ยกเว้นข้อมูลสินค้าเข้านั้น ออกจากรายการคำนวณกระจายต้นทุน 
** ''continue line'' (ใช้กับกรณีของ inclusive หรือ exclusive) กรณีที่ช่องรายการบรรทัดเดียวไม่พอ บรรทัดต่อไปใช้ \& จะมีผลให้เงื่อนไขของบรรทัดนั้นต่อกันเป็นบรรทัดเดียวกันกับบรรทัดก่อนหน้านั้น 
* กรณี เงื่อนไขของชื่อสินค้า (ชื่อสินค้าเต็มหรือ wildcard) เป็นกรณีพิเศษ ให้ระบุ \''{PNAME}'' ในบรรทัดก่อนหน้า แล้วบรรทัดต่อมาให้ระบุชื่อสินค้าในช่องรายการตามปกติ โดยไม่ต้องใส่ จำนวน หรือ ราคาต่อหน่วย 
* กรณียกเว้นบรรทัดที่ ไม่ต้องการใช้เป็นเงื่อนไขสินค้า ให้ใส่ \ ในช่องหน่วยนับ หรือใช้ * นำหน้าชื่อสินค้า 
กรณีที่มีคำสั่งเงื่อนไขกระจายต้นทุนภายในบิล โปรแกรมจะไม่ใช้ค่าในช่องอ้างถึง เป็นเงื่อนไขกรองรายการสินค้าเข้า 
* ชื่อรายการในบิลซื้อ ปกติจะผ่านรายการเข้าเป็นต้นทุนแฝง level 2 (ไม่มีผลต่อเปลี่ยนแปลงมูลค่าต้นทุนที่ใช้เป็นฐานคำนวณปัน cost)ยกเว้นรายการบรรทัดนั้น มีการระบุว่า ''{XCOST}'' อยู่ด้วย จึงผ่านรายการเข้าเป็นต้นทุนแฝง level 1 เช่น 
> *ค่าพิธีการภาษี ''{XCOST}'' 
> *ค่าล่วงเวลา ''{XCOST}'' 

ดูเพิ่มเติม [[ต้นทุนแฝง-advance2]]
!!!!ปรับปรุงเพิ่มเติม เกี่ยวกับการทำรายการ[[ต้นทุนแฝง]]ในบิลซื้อ (กุมภาพันธ์ 2548) 
การกำหนดจับคู่ ระหว่างรายการค่าต้นทุน กับเงื่อนไขเลือกกระจายต้นทุน ใช้ สัญญลักษณ์ ''!'' แล้วตามด้วยเลข ใส่ในช่องหน่วยนับ ของบรรทัดค่าต้นทุน และบรรทัดเงื่อนไข เช่น 
| ที่ | รายการ | หน่วยนับ | จำนวน | ราคา | เป็นเงิน |h
| 1 |ค่าพิธีการศุลกากร {XCOST} | | | 2500.-| 2500.-|
| 2 |DUTY FEE | ''!1'' | | 1000.-| 1000.-|
| 3 |DUTY FEE | ''!2'' | | 2000.-| 2000.-|
| 4 |ค่าน้ำร้อนน้ำชา | ''!!'' | | 500.-| 500.-|
| 5 |ใบรับสินค้า{DOC}[PO47012] | | | | |
| 6 |สินค้า IMPORT ABC | ''!1'' | | | |
| 7 |สินค้า IMPORT XYZ | ''!2'' | | | |
จากตัวอย่าง จะเห็นว่า 
* "ค่าพิธีการศุลกากร" ไม่มีกำหนดกลุ่ม ซึ่งจะกระจายต้นทุน ตามเงื่อนไข ที่ไม่มีระบุกลุ่ม นั่นคือ {DOC}[PO47012] 
* "ค่า DUTY FEE" ในบรรทัดที่ 2 ระบุเป็นกลุ่ม 1 จะต้องกระจายตามเงื่อนไขไม่ระบุกลุ่ม {DOC}[PO47012] แต่เพิ่มด้วยเงื่อนไขของกลุ่ม 1 คือ สินค้า IMPORT ABC 
* "ค่า DUTY FEE" ในบรรทัดที่ 3 ระบุเป็นกลุ่มที่ 2 จะเป็นการกระจายด้วยเงื่อนไข {DOC}[PO47012] และ สินค้า IMPORT XYZ 
* "ค่าน้ำร้อนน้ำชา" ในบรรทัดที่ 4 เป็นการระบุกลุ่มที่ผิดเงื่อนไข ซึ่งจะมีผลให้ยอดของค่าน้ำร้อนน้ำชา ในบรรทัดนี้ ไม่ถูกกระจายไปรายการใดทั้งสิ้น 
ปรับปรุง 4 กันยายน 2548

เพิ่มคำสั่งใน """__FSys.INI"""

[[_InvDspUnitNSize]]=4
สำหรับบังคับค่า ขนาด(กว้าง) ของคอลัมน์__หน่วยนับ__ ในจอบิลที่ป้อนข้อมูล

[[_InvDspDscNSize]]=8
สำหรับบังคับค่า ขนาด(กว้าง) ของคอลัมน์__ส่วนลด__ ในจอบิลที่ป้อนข้อมูล

ถ้ากำหนดเป็น 0 ก็จะมีผลทำให้คอลัมน์นั้นหายหายไป
แปลว่า user มองไม่เห็น แต่โปรแกรมยังมองเห็น 

เช่น ถ้าตอน F1 เลือกสินค้ามา หน่วยนับสินค้านั้นติดมาด้วย มีการตั้งไว้ว่า @NV ที่หน่วยนับ (ยกเว้นภาษี-No VAT) โปรแกรมก็ยังเห็น @NV ที่หน่วยนับนั้นได้ สินค้ารายการนั้น ก็คือ สินค้าที่ยกเว้นภาษี

> note: 
> ช่องรายการสินค้าจะ ปรับขนาดอัตโนมัติ 
> สามารใช้ควบคุม ในระดับหมวดบิลได้ เช่น [[_InvDspDscNSize]].IN = 0

> สำหรับบิลซื้อ ใช้ [[_PoDspUnitNSize]] [[_PoDspDscNSize]]
{{{
คำสั่งใน __FSys.INI

สำหรับผ่านรายการบิลขาย
_PInvAddNewCus = ON
ถ้าไม่พบชื่อลูกค้า โปรแกรมจะเพิ่มให้อัตโนมัติ

_PInvAddNewStk = ON
ถ้าไม่พบชื่อสินค้า โปรแกรมจะเพิ่มให้อัตโนมัติ

สำหรับผ่านรายการบิลซื้อ
_PPoAddNewVnd = ON
ถ้าไม่พบชื่อเจ้าหนี้ โปรแกรมจะเพิ่มให้อัตโนมัติ

_PPoAddNewStk = ON
ถ้าไม่พบชื่อสินค้า โปรแกรมจะเพิ่มให้อัตโนมัติ
}}}
{{{
MOD ผ่านรายการบิลขาย

ยี่ปั๊ว ใช้ฟิลด์ ชื่อลูกค้า
ลูกค้าย่อย ใช้ ฟิลด์ผู้ขาย

ตรวจสอบ ราคาของยี่ปั๊ว แต่ละราย ที่ขายให้ลูกค้าย่อย 
และฟ้องเตือนเมื่อเจอราคาไม่เท่ากัน
}}}

{{{
PInvA ใช้แทน PINV
ให้ตรวจสอบราคาขาย กับราคาซื้อครั้งก่อน (ต้องใส่ ~E ในชื่อบิล)

__FSYS.INI (default)
=====================
_PInvAddNewCus=OFF ;(for movinv)
_PInvAddNewStk=OFF  ;(for movinv)
_PInvECostType=4,5,5
_PInvECostLev=0,0,2003

_PInvECostInvType=xx,xx,xx

แปลความหมาย จับคู่ระหว่าง CostType กับ CostLev
4(0) -> ราคาซื้อสูงสุด (ย้อนไปจนถึงรายการซื้อแรกสุด)
5(0) -> ราคาซื้อต่ำสุด (ย้อนไปจนถึงรายการซื้อแรกสุด)
5(2003) -> ราคาขายต่ำสุด (ย้อนไม่เกิน 3 ครั้ง)


คำอธิบายเพิ่มเติม
=============
CostType
      -1  ไม่คำนวณ
      (0-3 ต้นทุนจริง) 0=เฉลี่ย 1=หลังสุด 2=มาตรฐาน 3=FIFO
      (4-8 ต้นทุนประเมินจากราคาซื้อ ข้อมูลเข้าสต๊อค หรือราคาขาย ขึ้นอยู่กับ Lev)
          4=สูงสุด 5=ต่ำสุด 6=เฉลี่ย 7=Mean 8=Median

กรณี costtype บวกด้วยค่าต่อไปนี้ เพื่อกำหนดเงื่อนไขการเปรียบเทียบ เพื่อฟ้อง error
0 (ไม่บวก) = ราคานั้น ต่ำกว่า ราคาที่คำนวณมาได้
1xx = ราคานั้น สูงกว่า ราคาที่คำนวณมาได้
2xx = ราคานั้น ไม่เท่ากับ ราคาที่คำนวณได้


CostLev
ส่วนของหลักสิบ/หน่วย
      lev=0 ค้นย้อนไปจนถึงแรกสุด (ไม่เกิน 500 รายการ)
      lev=1-99  ค้นย้อนไปตามค่าที่กำหนด

กรณีบวกด้วยหลักร้อย แสดง ราคาซื้อ/ส่วนลด
      กรณี 1xx เหมือนกับกรณี 0 - 99
          ยกเว้นการแสดงListที่มาของต้นทุนจะแสดงแบบ ราคาที่ขาย(ส่วนลด%)
      กรณี 2xx เหมือนกับกรณี 0 - 99 (ต้องใช้ R_INVB.EXE)
          ยกเว้นการแสดงListที่มาของต้นทุนจะย้อนไปค้นจากบิลซื้อแทน (หรือบิลขาย) หลักพันจะเป็นตัวกำหนด ว่าใช้บิลซื้อ หรือบิลขาย
      กรณี 3xx เหมือน 2xx การตรวจสอบชื่อสินค้า จะใช้ชื่อตามบิลขาย(ถ้ามี comment จะต้องมีชื่อที่มี comment ตรงกัน)

              
      กรณี 6xx,7xx เหมือนกับกรณี 2xx,3xx
          แต่รายการที่ไม่พบในบิลซื้อ(หรือบิลขาย)จะไม่นำมาคำนวณ

     

กรณีบวกด้วยหลักพัน
    กรณีไม่บวก จะเป็นการตรวจจากต้นทุนหรือราคาซื้อ
    กรณี  2xxx จะเป็นการตรวจจากราคาขายตามสต๊อคออก
    กรณี 12xxx จะเป็นการตรวจจากราคาขายตามสต๊อคออก ไม่เจาะจงลูกค้า

เพิ่มเติม 26/5/44 
  ใช้คู่กับ _PInvECostInvType=xx,xx,xx (กำหนดหมวดบิลที่ตรวจสอบ)
    กรณี  3xxx จะเป็นการตรวจจากราคาขายตามบิลขายโดยตรง(ไม่ตรวจผ่านสต๊อคออก)
    กรณี 13xxx จะเป็นการตรวจจากราคาขายตามบิลขายโดยตรง ไม่เจาะจงลูกค้า 

  ใช้คู่กับ _PInvECostPoType=xx,xx,xx
    กรณี 4xxx จะเป็นการตรวจจากราคาซื้อตามบิลซื้อโดยตรง 


15/9/49
    กรณี 5xxx จะเป็นการตรวจจากราคาขายตามบิลขายโดยตรง เจาะจงผู้ขาย และเจาะจงลูกค้า
    กรณี 15xxx จะเป็นการตรวจจากราคาขายตามบิลขายโดยตรง เจาะจงผู้ขาย แต่ไม่เจาะจงลูกค้า 
}}}

{{{
27/10/49

ทดสอบละเอียดวันนี้
ได้ข้อสรุป
1. ต้องใช้ PINVB (ที่แก้ไขล่าสุด) ไม่ใช่ PINVA
2. หมวดบิลต้องมี ~E
3. กำหนด __FSYS.INI
_PInvECostType=208 (ราคาไม่เท่ากับ Median) 
_PInvECostLev=15004 (ตรวจย้อน 4 บิลล่าสุด เฉพาะที่ชื่อผู้ขายตรง ไม่เจาะจงชื่อลูกค้า)

มีการปรับปรุง วิธีคิดค่า Median เดิม 
เอาจำนวนสินค้าที่ขายมาใช้เป็น ประชากร ซึ่งอาจมีปัญหา 
บิลที่ขาย volumn สูงลดราคาพิเศษ กลายเป็นราคาที่ถูกเลือก
เปลี่ยนใหม่เป็น ใช้นับจำนวนบิลแทน โดยไม่สนใจจำนวนสินค้า
ดังนั้นถ้าพบว่า มี 3 บิล ขาย 200 บาท บิลละตัว
แต่มี 1 บิลขาย 190 บาท 100 ตัว
ราคาที่เป็นค่า median คือ 200 เพราะมี 3 บิล มากกว่า 1 บิล
ถ้าคำนวณอย่างเดิม จะได้ราคา 190 เพราะมีจำนวน 100 ตัว มากกว่า 3 ตัว
}}}

{{{
วันศุกร์ 3/11/49 ไปรุ่งแสง 
กะจะปิดงานสักหน่อย ...
Up program ปุ๊ป เล่นให้ดูทันที ..
ผู้บริหาร 6 ท่านมามุงดู และประชุม
5 คนบอกเป็นเสียงเดียวกัน เยี่ยม ..!!! คราวนี้น่าจะช่วยทำให้งาน
ปัญหาน้อยลงทันที แต่... ช้าก่อน ผู้บริหารคนที่ 6
มีข้อท้วงติง ว่าน่าจะใช้ไม่ได้ ผมก็ถามว่าทำไม..
เขาบอกว่าข้อมูลของรายย่อยของเขา (ที่อยู่ช่องพนักงานขาย)
1 รายมีหลาย ๆ ชื่อ โดยแยกกันจาก {} เช่น
กิจรุ่งเรืองเมืองตรัง {พ}
กิจรุ่งเรืองเมืองตรัง {ป}
กิจรุ่งเรืองเมืองตรัง {ม}
ซึ่งตามข้อเท็จจริงคือรายเดียวกันหมด..
ผมเลยสรุปว่าทำงานยังนี้ไม่ได้ ต้องแก้ไขชื่อทั้งหมดให้ยุบเหลือแค่ 1
เพราะไม่งั้นโปรแกรมตรวจไม่ได้ .. 
เขาก็เลยบอกว่างั้นเขาก็ต้องเริ่มใหม่หมด และข้อมูลในเครื่องก็มีค่อนข้างมาก
คร่าว ๆ มีประมาณเกือบ พัน ชื่อ !!!
นั่นคือประเด็นที่ 1

คราวนี้มาเรื่องของการฟ้องตอนตรวจ
(ขอแทรกนิดหนึ่ง การผ่านรายการบิลแต่ละใบ ใช้เวลาประมาณเกือบ 30 วินาที)
โปรแกรมฟ้องกรณี Error ว่าราคาไม่เท่ากับ xxx และมีรายละเอียด
ให้ 1 บรรทัด เช่น 150(3/10/49 ล49100080),160(3/12/49 ล491200012)
ประมาณ นี้ เขาก็ถามว่าแล้วเป็นผู้ขาย(ยี่ปั๊ว/ลูกค้าตามโปรแกรม)รายไหน 
ผมบอกว่าก็ไปดูตามบิลที่โปรแกรมโชว์ว่ารายไหน ให้ไปค่อย ๆ เคาะดูทีละบิล
เขาบอกว่ายังนี้ก็ยังช้าอยู่ดี แทนที่จะทำงานได้เลย พนักงานเปิดบิลต้องไป
เข้าหน้าโน้นหน้านี้อีก ไม่สะดวกเท่าที่ควร .. สุดท้ายผมเสียเวลาไป 1 วัน
ไม่สามารถปิดงานได้ (วันนั้นนัดลูกค้าไว้ 3 ราย สุดท้ายแห้วหมด..เก็บเงิน
ไม่ได้อีกต่างหาก)..นั่นคือประเด็นที่ 2

สรุป...แล้ว.. หลังปรึกษาเฮียธงชัย อยากขอให้ช่วยปรับโปรแกรมเพิ่มเติม
1.สามารถกำหนดการตรวจ โดยมองชื่อรายย่อย(ช่องพนักงานขาย) ว่าให้ตัด
{xxx} ด้านหลังออกและถือว่าเป็นชื่อเดียวกัน ในการตรวจราคา..
2.หน้าจอฟ้อง Error ตอนตรวจสอบขอให้มีชื่อลูกค้าตามบิลขึ้นมาด้วย 
คนทำงานจะได้รู้ว่ายี่ปั๊วคนไหน ทำงานต่อได้ทันที่และเรียงเป็นบรรทัด
เพื่อสะดวกในการดูดังนี้ ตาม Format ดังนี้
1.ลูกค้าa ราคา(จำนวน วันที่ เลขที่บิล)
2.ลูกค้าb ราคา(จำนวน วันที่ เลขที่บิล)
รบกวนช่วยแก้ไขให้ด้วยครับ (จะได้ปิดงานซะที) งานนี้ค่า mo ผมคิดเขา 9,000

เพิ่มเติมนิดหนึ่ง ประวัติการขาย ทีเรากด F1 ช่องราคา
ถ้าสามารถ
1.ตรวจเฉพาะช่องพนักงานขายตรงกัน (โดยที่ตัดข้อมูล {xxx} แล้วมองเป็นราย
เดียวกันแบบที่สรุปให้แก้ไข) ก่อน
2.เวลาโชว์ราคา ให้ใช้ราคาหลังสุด พอกด F1 ให้แสดงประวัติ โดย มี 
ราคา,ชื่อลูกค้า,วันที่,เลขที่บิล ได้หรือไม่ ถ้าได้ละ เยี่ยม มากเลย สำหรับผู้บริหาร
ท่านนี้เพราะเขาไม่ยอมไปดูรายงาน(บอกว่าช้าต้องเข้าหน้านี้ออกหน้านั้น)และทำ
งานต่อเนื่องได้ทันที จะเอาไว้ดูราคาว่ารายย่อยรายนี้ มีปั๊วคนไหนขายบ้าง, และ
ขายราคาเท่าไร สะดวกสุด ๆ ฝากไว้เพิ่มเติมละกันครับ !!!
}}}

{{{
7/11/49

เพิ่มคำสั่งต่อไปนี้

StkEstFormatCus = mode
StkEstFormatSale = mode
StkEstFormatStk = mode

สำหรับตัดต่อชื่อ ก่อนที่จะทำการ compare


โค๊ด:
mode มีดังนี้

10 code only
40 name+comment (without code)
41 name without code & comment
42 comment only
43 code + name (without comm)
 
+100 = also strip hidden 

ตัวอย่างชื่อ A125|MY STOCK {+} \RED

10 = A125
40 = MY STOCK {+} \RED
41 = MY STOCK {+}
42 = \RED
43 = A125|MY STOCK {+}

100 = A125|MY STOCK  \RED
140 = MY STOCK  \RED
141 = MY STOCK
143 = A125|MY STOCK

กรณีรุ่งแสง จะต้องกำหนดเพิ่ม สั่งให้ตัด {xxx} ออก คือ
StkEstFormatSale = 100
}}}
{{{
void	Inv_getINI (char *invtype)
{
#ifndef	_MINIMUM_SIZE_
	char	*cache,*s ;

	if (invtype && _APIsEmptyField (STRING,invtype))
		invtype	= NULL ;

	//cache	= am_loadINICache (NULL) ;
	cache = am_cacheFSys () ;



	InvTypeAsLastPrice[0]= 0 ;
	InvAutoReferNo[0]= 0 ;
#ifdef	_LIMITSTATUS_MODIFY_
	InvAutoReferStatus = 0 ;
#endif
	InvChkCusLimit= OFF ;
	InvShipToAutoFill= ON ;
	InvDscAutoFill= OFF ;
	InvSaleAsLogin= OFF ;
	InvSaleAsCustomer= OFF ;
	InvAllowPostPrint= ON ;
	InvAllowPrintEdit= 7 ;
	InvPrcTabByDsc= OFF ;
	InvUsePrcTab= -1000 ;
	InvAllowChangeNo= ON ;
	InvAllowChangeQty= ON ;
	InvAllowChangePrice = ON ;
	InvAllowChangeDsc = ON ;
	InvGetLastPrice= -2 ;
	InvAutoPackItm = -1 ;
	InvDspDscNSize = -1 ;
	InvDspUnitNSize = -1 ;
	InvFixBug85 = 0 ;
	InvSaveReconcile = 0 ;
	InvAutoListBOM = 0 ;
	InvTraceCurLoc = OFF ;
#ifdef	_MULTILINE_MODIFY_
	InvMultilineEdit = 0 ;
#endif
	InvRemarkList[0]= 0 ;
#ifdef	_WF_MODIFY_
	InvWFAutoCmd[0]= 0 ;
#endif
	
	am_switchINICache (&InvShipToAutoFill,"_InvShipToAuto",invtype,cache) ;
	am_switchINICache (&InvDscAutoFill,"_InvDscAuto",invtype,cache) ;
	am_switchINICache (&InvSaleAsLogin,"_InvSaleASLogin",invtype,cache) ;
	am_switchINICache (&InvSaleAsCustomer,"_InvSaleASCustomer",invtype,cache) ;
	s	= am_switchINICache (&InvChkCusLimit,"_InvChkCusLimit",invtype,cache) ;
	if (s)
	{
		if (strcmpi(s,"ON")==0)
			InvChkCusLimit	= 9 ;
	}
	am_switchINICache (&InvAllowPostPrint,"_InvAllowPostPrint",invtype,cache) ;
	am_switchINICache (&InvAllowPrintEdit,"_InvAllowPrintEdit",invtype,cache) ;
	am_switchINICache (&InvAllowChangeNo,"_InvAllowChangeNo",invtype,cache) ;
	am_switchINICache (&InvAllowChangeQty,"_InvAllowChangeQty",invtype,cache) ;
	am_switchINICache (&InvAllowChangePrice,"_InvAllowChangePrice",invtype,cache) ;
	am_switchINICache (&InvAllowChangeDsc,"_InvAllowChangeDsc",invtype,cache) ;
	am_switchINICache (&InvPrcTabByDsc,"_InvPrcTabByDsc",invtype,cache) ;
	am_switchINICache (&InvUsePrcTab,"_InvUsePrcTab",invtype,cache) ;
	am_switchINICache (&InvGetLastPrice,"_InvGetLastPrice",invtype,cache) ;
	am_switchINICache (&InvAutoPackItm,"_InvAutoPackItm",invtype,cache) ;

	InvXCodeItm = -15 ;	// autofill customer & sale with confirm 
	if (((InvSaleAsLogin%10)==-1 || (InvSaleAsCustomer%10)==-1))
		InvXCodeItm = -3 ;	// autofill customer with confirm 
	am_switchINICache (&InvXCodeItm,"_InvXCodeItm",invtype,cache) ;
	am_switchINICache (&InvDspDscNSize,"_InvDspDscNSize",invtype,cache) ;
	am_switchINICache (&InvDspUnitNSize,"_InvDspUnitNSize",invtype,cache) ;

	s	= am_switchINICache (NULL,"_InvTypeAsLastPrice",invtype,cache) ;
	if (s)
	{
		_ResizeStr (s,2) ;
		strcpy (InvTypeAsLastPrice,s) ;
	}

	s	= am_switchINICache (NULL,"_InvAutoReferNo",invtype,cache) ;
	if (s)
	{
		if (strlen(s) > sizeof(InvAutoReferNo)-1)
			s[sizeof(InvAutoReferNo)-1] = 0 ;
//		_ResizeStr (s,10) ;
		strcpy (InvAutoReferNo,s) ;
	}
#ifdef	_LIMITSTATUS_MODIFY_
	s	= am_switchINICache (NULL,"_InvAutoReferStatus",invtype,cache) ;
	if (s)
		InvAutoReferStatus = Inv_parselimitstatus (s) ;
#endif
	am_switchINICache (&InvFixBug85,"_InvFixBug85",invtype,cache) ;
	am_switchINICache (&InvSaveReconcile,"_InvSaveReconcile",invtype,cache) ;
	am_switchINICache (&InvAutoListBOM,"_InvAutoListBOM",invtype,cache) ;
	am_switchINICache (&InvTraceCurLoc,"_InvTraceCurLoc",invtype,cache) ;
#ifdef	_MULTILINE_MODIFY_
	am_switchINICache (&InvMultilineEdit,"_InvMultilineEdit",invtype,cache) ;
#endif
	s	= am_switchINICache (NULL,"_InvRemarkList",invtype,cache) ;
	if (s)
	{
		if (strlen(s) > sizeof(InvRemarkList)-1)
			s[sizeof(InvRemarkList)-1] = 0 ;
		strcpy (InvRemarkList,s) ;
	}
#ifdef	_WF_MODIFY_
	s	= am_switchINICache (NULL,"_InvWFAutoCmd",invtype,cache) ;
	if (s)
	{
		if (strlen(s) > sizeof(InvWFAutoCmd)-1)
			s[sizeof(InvWFAutoCmd)-1] = 0 ;
		strcpy (InvWFAutoCmd,s) ;
	}
#endif
#endif	// MINIMUM
	//am_freeINICache (cache) ;
}
}}}

{{{
	s	= am_switchINICache (NULL,"_InvWFMenu",InvRec.data.InvType,am_cacheFSys()) ;
}}}

{{{
	InvMaxBItm	= -InvMaxItm ;	// force to use XMS
	if ((mdltype>=0 && mdltype<10) || mdltype==81)
	{
		char	*s ;
		int	max ;

		s	= am_getINI (NULL,"_InvMaxItm") ;
		if (s)
		{
			max	= atoi (s) ;
			InvMaxBItm	= -max ; // force to use XMS
		}
	}
}}}

{{{
	if (access (am_prgFileName ("IP-Pos",NULL),0)==0)
	{
		char	*cache ;
		
		//cache	= am_loadINICache (NULL) ;
		cache = am_cacheFSys () ;

		am_switchINICache (&pflag,"IPPosCall",NULL,cache) ;
		am_switchINICache (&pflag,"_IPPosCall",((char **)InvPaidXParm)[0],cache) ;
		
		//am_switchINICache (&dflag,"IPDrwCall",NULL,cache) ;
		//am_switchINICache (&dflag,"_IPDrwCall",NULL,cache) ;
		//am_freeINICache (cache) ;
	}
}}}

{{{
int	IPDrwCall (void)
{
	int	flag ;
	char	*cache ;
	char	sendstr[41],portstr[41] ;

	flag= TRUE ;
	strcpy (portstr,"com1,8,n,1") ;
	strcpy (sendstr,"00000000") ;

	//cache	= am_loadINICache (NULL) ;
	cache = am_cacheFSys () ;
	if (cache)
	{
		am_switchINICache (&flag,"IPDrwCall",NULL,cache) ;
		am_switchINICache (&flag,"_IPDrwCall",NULL,cache) ;
		if (flag)
		{
			am_strINICache (portstr,"IPDrwPort",NULL,cache) ;
			am_strINICache (portstr,"_IPDrwPort",NULL,cache) ;

			am_strINICache (sendstr,"IPDrwSendCmd",NULL,cache) ;
			am_strINICache (sendstr,"_IPDrwSendCmd",NULL,cache) ;

		}
		//am_freeINICache (cache) ;
	}
	if (flag)
	{
		if (strncmpi (portstr,"COM",3)==0)
		{
			IPDrw_com (portstr,sendstr) ;
			return (TRUE) ;
		}
	}
	return (FALSE) ;
}
}}}

{{{
void	IPPos_getINI (void)
{
	char	*cache ;	

	IPPos_PDet1[0]= IPPos_PDet2[0]= 0 ;
	IPPos_ChangesWait = 6 ;
#ifdef	_CUSBONUS_LINK_
	strcpy (IPPosBN_CusGrp,"*วฟฮจูก*") ;
	IPPosBN_Unit	= 5 ;
	IPPosBN_Step	= 100 ;
#endif
	//cache	= am_loadINICache (NULL) ;
	cache = am_cacheFSys () ;
	if (cache)
	{
		am_strINICache (IPPos_PDet1,"_IPPosPDet1",((char **)IPPos_XParm)[0],cache) ;
		am_strINICache (IPPos_PDet2,"_IPPosPDet2",((char **)IPPos_XParm)[0],cache) ;
		am_switchINICache (&IPPos_ChangesWait,"_IPPosChangesWait",((char **)IPPos_XParm)[0],cache) ;

#ifdef	_CUSBONUS_LINK_
		am_strINICache (IPPosBN_CusGrp,"_IPPosBNCusGrp",((char **)IPPos_XParm)[0],cache) ;
		am_valINICache (DOUBLE,&IPPosBN_Step,"_IPPosBNStep",((char **)IPPos_XParm)[0],cache) ;
		am_valINICache (DOUBLE,&IPPosBN_Unit,"_IPPosBNUnit",((char **)IPPos_XParm)[0],cache) ;
#endif
		//am_freeINICache (cache) ;
	}

}
}}}

{{{
void	PstInv_getINI (char *invtype)
{
	char	*s,*cache ;
#ifdef	_ESTCOSTCHK_
	int	i ;
#endif
	//cache	= am_loadINICache (NULL) ;
	cache = am_cacheFSys () ;

#ifndef	_NO_TAX_
	PstInvTaxForce = FALSE ;
	am_switchINICache (&PstInvTaxForce,"_PInvTaxForce",invtype,cache) ;

	PstInvTaxChkCus = FALSE ;
	am_switchINICache (&PstInvTaxChkCus,"_PInvTaxChkCus",invtype,cache) ;
#endif
	
#ifndef	_NO_CUS_
	PstInvAddNewCus	= OFF ;
	am_switchINICache (&PstInvAddNewCus,"_PInvAddNewCus",invtype,cache) ;
	PstInvChkCusLimit= 9 ;
	if ((s=am_switchINICache (&PstInvChkCusLimit,"_PInvChkCusLimit",invtype,cache))==NULL)
	{
		if (am_switchINICache (&PstInvChkCusLimit,"_InvChkCusLimit",invtype,cache))
		{
			if (PstInvChkCusLimit>0)
				PstInvChkCusLimit	= 0 ;
			else
				PstInvChkCusLimit	= - PstInvChkCusLimit ;
		}
	}
	else
	{
		if (strcmpi(s,"ON")==0)
			PstInvChkCusLimit	= 9 ;
	}
#endif

#ifndef	_NO_STK_
	PstInvAddNewStk	= OFF ;
	am_switchINICache (&PstInvAddNewStk,"_PInvAddNewStk",invtype,cache) ;

	PstInvMaxMat	= 20 ;
	if (am_switchINICache (&PstInvMaxMat,"_PInvMaxMat",invtype,cache))
	{
		if (PstInvMaxMat<8)
			PstInvMaxMat	= 8 ;
	}

	am_switchINICache (&PstRI_CrossChk,"_PStkCrossChk",NULL,cache) ;

#endif

#if	!defined(_NO_STK_) || !defined(_NO_CUS_)
	PstInvSkipTrn= OFF ;
	am_switchINICache (&PstInvSkipTrn,"_PInvSkipTrn",invtype,cache) ;
#endif
	
#ifdef	_ESTCOSTCHK_
	for (i=0; i<MAXECOSTLIST; i++)
	{
		PstInvECostTypeList[i]	= -1 ;
		if (i<2)
			PstInvECostTypeList[i]	= 4+i ;
		//if (i==2)
		//	PstInvECostTypeList[i]	= 4 ;
		PstInvECostLevList[i]	= 0 ;
		if (i==2)
		{
			PstInvECostTypeList[i]	= 5 ;
			PstInvECostLevList[i]	= 12003 ;
		}
		if (i==3)
		{
			PstInvECostTypeList[i]	= 5 ;
			PstInvECostLevList[i]	= 3703 ;
		}
	}

	s = am_switchINICache (NULL,"_PInvECostType",invtype,cache) ;
	if (s!=NULL)
	{
		char	buf[40] ;
		i	= 0 ;
		do
		{
			s	= _GetStrSeg (s,buf) ;
			PstInvECostTypeList[i]	= atoi(buf);
			i++ ;
			if (i>=MAXECOSTLIST)
				break ;
		} while (s);
		for (;i<MAXECOSTLIST; i++)
			PstInvECostTypeList[i]	= -1 ;
	}
	s = am_switchINICache (NULL,"_PInvECostLev",invtype,cache) ;
	if (s!=NULL)
	{
		char	buf[40] ;
		i	= 0 ;
		do
		{
			s	= _GetStrSeg (s,buf) ;
			PstInvECostLevList[i]	= atoi(buf);
			i++ ;
			if (i>=MAXECOSTLIST)
				break ;
		} while (s);
	}
#endif

#ifdef	_USE_BOSTKDET_
	PstInvChkStkBo = 0 ;
	am_switchINICache (&PstInvChkStkBo,"_PInvChkStkBo",NULL,cache) ;
#endif
	//am_freeINICache (cache) ;

}

}}}
{{{
เป็นระบบที่ modify ให้กับร้าน บ้านหนังสือ ชุมพร
ทำไว้ตั้งแต่สมัย 5-6 ปีก่อน
เรียกได้ว่า 
เป็นผู้บุกเบิกใช้ Billing + Barcode ทำเป็น POS รุ่นแรก

โจทย์ก็มีมีอยู่ว่า
ลูกค้าที่ซื้อหนังสือเขา ยอดทุก 100 บาท
จะให้ Bonus สะสม 5 คะแนน 
เท่ากับส่วนลด 5 บาท สำหรับการซื้อครั้งต่อไป
เท่านี้ เอง
แต่ทั้งหมด ใช้โปรแกรมควบคุมทั้งหมด
ตั้งแต่เก็บยอด หักยอดเมื่อเอามาใช้ลด

กลไกก็คือ 
ใช้หมวดลูกค้า 
เป็นตัวกำหนดว่า เป็น Member หรือไม่
ถ้าเป็น Member เมื่อรับชำระเงิน
ก็จะคำนวณสะสมยอด Bonus ให้อัตโนมัติ

ในขั้นตอนรับชำระเงิน 
สามารถดึงยอด Bonus สะสมมาใช้แทนเงินได้

ความยีดหยุ่นของโปรแกรมที่ทำไว้คือ

_IPPosBNCusGrp
ชื่อหมวดลูกค้า ที่เป็น Member 
สามารถกำหนดเป็น wildcard เองได้

ตัวเลขคำนวณเพื่อปันผล Bonus สามารถกำหนดเองได้
ประกับดัวย _IPPosBNStep และ _IPPosBNUnit
ตามโจทย์ ทุก 100 ให้ 5 จะต้องตั้งเป็น
_IPPosBNStep=100 และ _IPPosBNUnit=5
}}}
{{{
U_HongA 
โอนข้อมูล หงษไทย ISoft
8/10/2548

1. Set เมนูให้เรียกใช้โปรแกรมเพิ่ม
ไฟล์ MN_BL3.INI ใส่คำสั่งต่อไปนี้

U_HongA,100=โอนข้อมูล Hong - ISoft

เพื่อให้ผู้ใช้สามารถเรียกใช้ จากเมนู เบ็ดเตล็ด -> [ส่วนขยายเพิ่มระบบ]
ภายในโปรแกรม BILLING

2. __FSYS.INI
กำหนด Folder ที่ ISoft ส่งไฟล์ข้อมูลมาให้

ISOFTDATAPATH=C:\TEMPDATA	

3. ไฟล์ ISOFT1.ALI
ใช้สำหรับ Map รหัส ISoft เป็นชื่อลูกค้า/ชื่อสินค้า
เหมือนกับไฟล์ ALI ใน Genesis เช่น

พ-050 = ไพโรจน์การไฟฟ้า บจก.

*สำหรับรหัสลูกค้า ถ้าไ่ม่ได้่ Map ผ่าน ISOFT.ALI
โปรแกรมจะตรวจหารหัสจาก ข้อมูลลูกค้าเพิ่มเติม ใส่ส่วนของชื่อแทน
เช่น {C#พ-050}
เหมือนกับโปรแกรมเดิม ที่ส่งรหัสลูกค้าให้ ISOFT

note: format รหัสสินค้า ISOFT 
1-xx -yy = กล่อง xx ลอน yy
2-SB-yy = แผ่น ลอน yy
3-SR-xx = ลูกฟูกม้วน หน้า xx


=========================
note: อ้างอิงจาก ISOFT
=========================
                                    การโอน INVOICE เข้า SOFTCRAFT

1. รูปแบบ EXPORT FILE
    1.1 FILE NAME
          1.1.1 เป็นแบบ RUN ชื่อไปเรื่อยๆ
             1.1.2 รูปแบบ   YYRRRRRR  เช่น  05000001,05000002,05000003...
2. โครงสร้าง
     2.1 HEADER RECORD
          ลำดับ         ข้อมูล                          รายละเอียด
                1          H                        หมายถึง HEADER
            2          เลขที่                          
                3         สถานะ                        N=ปกติ   C=รายการยกเลิก
                4         วันที่เอกสาร                YYYY/MM/DD
            5         รหัสลูกค้า
                6         เครดิตเทอม                 
            7         ครบกำหนด                YYYY/MM/DD
            8         VAT RATE
            9         ยอดรวมสินค้า
              10        คำพูดส่วนลด              เช่น  3%
           11        ส่วนลด                       เป็นส่วนลดจำนวนเงิน
              12        ยอดเงินรวม                ยอดรวมสินค้า - ส่วนลด
              13        มูลค่า VAT
    2.2  DETAIL RECORD
         ลำดับ         ข้อมูล                          รายละเอียด
               1            D                      หมายถึง DETAIL
            2          ลำดับ                         1,2,3...
            3         รหัสสินค้า                  3.1  กล่อง    
                                                        1-XX-ลอน     
                                                                          XX = MODEL หรือสูตรกล่อง
                                                                 3.2  แผ่น
                                                                          2-SB-ลอน
                                                                 3.3  ลูกฟูกม้วน
                                                                           3-SR-XX
                                                          XX = หน้ากระดาษ  เช่น 48

  
    



3. ตัวอย่างข้อมูล
H,48090083,N,2005/09/02,พ-050,30,2005/10/02,7,23170.60,,0.00,23170.60,1621.94
D,1,1-08-B,552
D,2,1-08-B,559
D,3,1-01-BC,1093
H,48090084,N,2005/09/02,ค-028,30,2005/10/02,7,8211.00,3%,246.33,7964.67,557.53
D,1,2-SB-E,1050
H,48090085,N,2005/09/02,ค-028,30,2005/10/02,7,42210.00,3%,1266.30,40943.70,2866.06
D,1,2-SB-E,1280
D,2,2-SB-E,900
D,3,2-SB-E,2700
H,48090083,C,2005/09/02,พ-050,30,2005/10/02,7,23170.60,,0.00,23170.60,1621.94
D,1,1-08-B,552
D,2,1-08-B,559
D,3,1-01-BC,1093
H,48090085,N,2005/09/02,ค-028,30,2005/10/02,7,40824.00,3%,1224.72,39599.28,2771.95
D,1,2-SB-E,1280
D,2,2-SB-E,900
D,3,2-SB-E,2500

}}}
{{{
31/12/50
ลาทีปีเก่า สวัสดีปีใหม่

โจทย์:
บริษัทฯ ขายเข็มจักร อุตสาหกรรม
เสนอราคาลูกค้าเป็นเงินบาท แต่ใช้ฐานราคาเป็นเงินต่างประเทศ คูณด้วยอัตราแลกเปลี่ยน
ปัจจุบันใช้หลายสกุลเงิน ขึ้นอยู่กับว่าสินค้านั้นสั่งมาจากประเทศไหน เช่น USD JPY
เนื่องจากปัจจุบัน อัตราแลกเปลี่ยนมันลอยตัว เปลี่ยนแปลงขึ้นลงทุกวัน
ทำให้บริษัทฯ จำเป็นต้องคำนวณราคาใหม่ตามอัตราแลกเปลี่ยนทุกวัน เพื่อเสนอราคาลูกค้า
ซึ่งยุ่งยาก และมีโอกาสผิดพลาดสูง

วิธีแก้ปัญหา:
ข้อเสนอจาก adm...
แก้โปรแกรม ให้บริษัทฯ สามารถเปลี่ยนค่าอัตราแลกเปลียนใน __FSYS.INI
แล้วปรับโปรแกรมให้สามารถคำนวณราคาขาย โดยคูณกับอัตราแลกเปลี่ยนที่กำหนด

โปรแกรมเมอร์ก่ายหน้าผาก...
คิดไปคิดมา 2 คืน 3 วัน
แล้วก็ทำดังนี้

1. ปรับโปรแกรมสต็อก เพิ่มคำสั่ง _StockAltPrice=100 ใน __FSYS.INI
มีผลคือ กรณีที่ข้อมูลสต็อก ไม่ได้กำหนดราคาต่อหน่วย (ราคา=0)
โปรแกรมจะไปหาราคาต่อหน่วย จากตารางราคา ในข้อมูลสต็อกเพิ่มเติม (AltName)
ที่เป็นของระดับ 0 มาแสดง ตัวอย่างเช่น
0=12,-5%, -10%
แปลว่า ลูกค้าทั่วไปใช้ราคา 12 บาท
ลูกค้าระดับ 1 ลด 5% (จากระดับ 0)
ลูกค้าระดับ 2 ลด 10% (จากระดับ 0)

ปกติ ในบิลขาย สำหรับลูกค้าที่ไม่มีการกำหนดระดับให้ จะใช้ระดับ 0 อัตโนมัติ
ซึ่งถ้ามีการกำหนด ราคาของระดับ 0 ไว้ในตารางราคา 
ก็จะใช้ราคาในตารางราคาแทน ราคาในข้อมูลสินค้าอยู่แล้ว

ดังนั้นคำสั่งนี้ มีประโยชน์คือ ช่วยให้สามารถแสดงราคาขายจากตารางราคา ขึ้นมาบนจอ 
เมื่อเรากด F1 เพื่อ browse เลือกรายการสินค้า (กรณีที่สินค้านั้นไม่มีการตั้งราคาใน master stock)

หมายเหตุ: การแสดงราคาแทน จำกัดเฉพาะกรณี inline ตารางราคาในข้อมูลสต็อกเพิ่มเติมเท่านั้น
ไม่สามารถใช้ตารางราคา ที่ชี้ไปหา ชื่อตาราง ในแฟ้มข้อมูลตารางราคา

2. สร้างระบบ ตัวแปร ในตารางราคา
เพิ่มความสามารถให้กำหนดตัวแปร ไว้ในตารางราคาได้
โดยตัวแปรจะต้องตั้งดังนี้ {$ชื่อตัวแปร}($ชื่อตัวแปร) เช่น {$USD} ($USD)
แล้วใน __FSYS.INI ก็กำหนดค่าให้ตัวแปรนั้นเป็น 
$USD=33.2345

ก่อนที่จะตีความตารางราคา โปรแกรมจะถอดค่าตัวแปรก่อน
ตามตัวอย่างข้างต้น
ถ้าตารางราคาเป็น
0=2.1X{$USD} 0=2.1X($USD)
ก็จะได้เป็น 0=2.1X33.2345

ปิ๊งงงงงงงง บรรเจิดดดดด
เดี๋ยว adm ต้องขอตัวแปรไป ทำอย่างอื่น อีกแน่เลย... เฮ้อ
}}}

{{{
วันนี้เพิ่งเสร็จ

อัตรากำไร ก็ตั้งเป็นตัวแปรได้ ไม่ใช่ว่าจะตั้งแค่ อัตราแลกเปลี่ยน

model การตั้งค่าเท่าที่นึกได้เป็นดังนี้

ที่ข้อมูลสินค้า ในช่องราคาขาย ใส่ฐาน ที่เป็นเงิน ตปท. เช่น 2.00 (ดอลล่าร์)

ในข้อมูลเพิ่มเติมใส่ตางราคาเป็น 0={$USD}{$MARKUP1} ($USD)($MARKUP1)

ใน __FSYS.INI เราก็กำหนดไว้เป็น
$USD=X32.1223
$MARKUP1=+10%

เมื่อโปรแกรมแปลมาก็จะได้ 0=X32.1223+10%

ค่า MOD 500 USD ครับ

เรื่องรายงานตรวจสอบ ใช้รายงานสต็อก -> รายงานยอดคงเหลือ -> รายงานแสดงราคา ไงครับ มี field ตารางราคาให้ดูด้วย

และที่สำคัญ เราสามารถใช้ _InvPrcTabByDsc=7
ให้แสดงการคำนวณในช่องส่วนลด แทนการปรับราคาต่อหน่วย โดยไร้ร่องรอย

ดังนั้นเมื่อเปิดบิล ก็จะเห็นทันทีว่า สินค้ารายการนี้ ใช้ตัวคูณ ตัวบวกเท่าไหร่

อ้อ... เพื่อตอบโจทย์ล่วงหน้าว่า แล้วเวลาพิมพ์บิล ไม่อยากให้ช่องส่วนลดออกมาด้วย
แต่ราคาต่อหน่วย มันไม่สอดคล้องกับ จำนวนเงินรวม

ล่าสุด กำลังจะแก้ส่วนพิมพ์บิล เพิ่ม field QPriceN มาให้
เป็นช่องราคาต่อหน่วย ที่ไม่ใช่ ราคาต่อหน่วยที่ เก็บในข้อมูลบิล
แต่เป็นราคาต่อหน่วย ที่ได้จากการเอา จำนวนเงิน มาหารกับ จำนวนหน่วย โดยตรง
ดังนั้นจึงเป็นราคาต่อหน่วย ที่เกิดจากการหารเฉลี่ยจริงๆ ไม่ต้องแสดงส่วนลดอีก

จุดที่หลุดตอนนี้คือ 
รายงานสต็อก แสดงราคา นั้น ยังใช้ราคาจาก master สต็อก 
ไม่ได้ตรวจสอบราคา level 0 จาก ตารางราคา

2/1/50

update เพิ่มเติมแล้ว download ที่นี่

ปรับปรุง _StockAltPrice ให้สามารถคำนวน แบบอ้างถึง ชื่อตารางราคาแล้ว
(ตาม spec ของส่วนขยายตารางราคา ที่ใช้กับบิลขายนั่นเอง)

ในช่อง ตารางราคา ของข้อมูลเพิ่มเติม สามารถอ้างอิงเป็นชื่อตาราง
แล้วไปกำหนด ตารางราคา ในแฟ้มข้อมูล ตารางราคาอีกทีหนึ่ง

นอกจากนี้ กรณีที่ ไม่มีข้อมูลสต็อกเพิ่มเติม หรือ ไม่มีข้อมูล ในช่องตารางราคา ของข้อมูลเพิ่มเติม
โปรแกรมจะไปใช้ ตารางราคา ที่ตั้งชื่อตรงกับ ชื่อหมวดสินค้า (แต่เพิ่ม ดอกจัน นำหน้าชื่อหมวด)
เช่น สินค้าเป็นหมวด SOFTWARE โปรแกรมก็จะไม่หาตารางราคาที่ชื่อ *SOFTWARE
หรือแม้กระทั่ง สินค้าที่ไม่มีชื่อหมวด ก็จะไปหาตารางราคาที่ชื่อ "*" 
}}}

{{{
6/2/2551

ปรับ concept เพิ่มเติม

1. เปลี่ยน notation ของตัวแปรส่วนลด จาก {$ชื่อตัวแปร} เป็น ($ชื่อตัวแปร)

2. เพิ่มความหมายพิเศษสำหรับ ($$ชื่อตัวแปร) เป็นตัวแปรที่ไม่แสดงค่าจริง ให้ผู้ใช้เห็น เช่นกรณีเราใส่ค่า Margin ซึ่งไม่ต้องการให้พนักงานอื่นทราบว่ามีค่าเท่าไหร่

3. ส่วนลดแบบค้างตัวแปร $$ ถือเป็นส่วนลดแบบ ไม่สามารถใช้คำนวณในช่องส่วนลดต่อรายการได้ เช่นเดียวกับ กรณีส่วนลดที่กำหนดใน ตารางราคาแล้ว มีความยาวเกิน 10 ตัวอักษร ซึ่งทำให้มีผลดังนี้

- ในการแสดงราคาขายในบิล ไม่สามารถใช้แบบ ส่วนลดต่อรายการ คู่กับ ราคาเต็มที่ยังไม่ลด จะต้องใช้ราคาที่คำนวณส่วนลดแล้ว ถึงแม้ว่าจะกำหนด _InvPrcTabByDsc=7 ก็ไม่มีผล

4. สามารถกำหนด _InvPrcTabByDsc=0x10 หรือ 0x20 เพื่อให้แสดงข้อความส่วนลด ในบรรทัดถัดไป (โดยราคาขายในบรรทัดรายการสินค้า จะเป็นราคาที่คำนวณส่วนลดแล้ว)  
สำหรับ 0x20 แตกต่างคือ ข้อความส่วนลดที่แสดงจะมีเครื่องหมาย {....} จึงสามารถเห็นบนจอ แต่ไม่พิมพ์ออกมา
หรือ ถ้ากำหนดแบบผสมผสานคือ _InvPrcTabByDsc=0x17 หรือ 0x27 ถ้าส่วนลดเป็นแบบปกติ ก็แสดงแบบในบรรทัด แต่ถ้าเป็นส่วนลดแบบไม่สามารถแสดงในบรรทัด ก็จะแสดงที่บรรทัดถัดไป

ข้อจำกัด 
ส่วนลดในตารางราคา มีข้อจำกัด ยาวได้ไม่เกิน 30 ตัวอักษร
}}}
{{{
3/2/52

เพิ่มความสามารถของโปรแกรม
ในระหว่างป้อนข้อมูล สำหร้บ field ที่มีข้อความเป็น [xxxx]
เช่น
**ส่วนลด [3%]
ค่าไฟฟ้า มิเตอร [12332] - [10202]

โดยเราสามารถกด Ctrl-X
โปรแกรมจะแปลงส่วนที่อยู่ภายใน [...] ให้กลายเป็น sub field อัตโนมัติ

นอกจากนี้ เมื่ออยู่ในหน้าจอ sub field ยังมี key พิเศษ
เพื่อสลับค่าระหว่าง sub field ดังนี้
F2 Shift Left เอาค่าใน sub field ทางขวา ไปใส่ใน sub field ทางซ้าย
F3 Shift Right เอาค่าใน sub field ทางซ้าย ไปใส่ใน sub field ทางขวา
F4 Rotate Left ทำงานเหมือน Shift Left แต่แทนที่จะเว้นว่าง sub field ทางขวาท้ายสุด จะเอาค่าใน sub field ซ้ายแรกสุด มาใส่แทน
F5 Rotate Right ทำงานเหมือน Shift Right แต่แทนที่จะเว้นว่าง sub field ทางซ้ายแรกสุด จะเอาค่าใน sub field ขวาท้ายสุด มาใส่แทน

ดูตัวอย่าง
รูปที่ 1 ข้อความเดิม ใน field
รูปที่ 2 เมื่อกด Ctrl-X จะขึ้นเป็นจอ sub field
รูปที่ 3 ภายในจอ sub field เมื่อกด F3 เลื่อนเอาค่าใน field แรก ไปใส่ใน field ที่สอง
}}}

[img[Bracket2SubFld01.jpg]]
[img[Bracket2SubFld02.jpg]]
[img[Bracket2SubFld03.jpg]]