Using AI with MoneyWorks

MoneyWorks Gold 9.2.5 and later includes a Model Context Protocol server that allows a local AI client to query and control MoneyWorks on your computer.

Requirements

  • MoneyWorks Gold 9.2.5 or later

and a desktop AI client app that supports local stdio MCP servers; currently, the best choice for this is:

MoneyWorks does also include install support for the just-released Codex app

Setup

In MoneyWorks Gold:

  1. MoneyWorks Preferences → AI → Configuration…
  2. Click the checkbox to enable the MCP server (you do not need logging)
  3. Click Install into Claude and/or Install into Codex
  4. Claude should offer to install MoneyWorks MCP. It will show a scary warning, however the MoneyWorks MCP will not in any way give Claude access to everything on your computer. The Codex install doesn’t have any UI in the app; you will just get a confirmation of the installation. You should restart Codex for it to load the server.

Privileges

Any actions/enquiries the AI takes will be subject to the privileges you have in the file you are logged into.

In the User Privileges for users in documents that you want to access via the MCP server, enable the following privileges:

  • Expression Evaluation
  • Exporting
  • Importing
  • MCP Server Access

Conversely, for users that should not have AI access to the document, you should disable those privileges. Note that in MoneyWorks Gold 9.2.5, disabling the Expression Evaluation privilege does not prevent typing expressions into entry fields starting with an = sign, but it does restrict the functions available to only those that do not query the database.

Reports that might be accessed via the MCP server are subject to per-report privileges, or — for custom reports — report signing per-user (or else the Report Signing privilege itself)

The MCP Server Access privilege applies to the auto-loaded MCP server. Turn off this privilege to prevent casual/accidental exfiltration of business data to AI providers.

AI Queries

That’s it. With the server enabled, and appropriate privileges, you can now ask your AI to run reports and data analysis, open recent MoneyWorks files, and even find records and display them in MoneyWorks.

Examples to try:

  • Please open the MoneyWorks sample file
  • How is the balance sheet looking?
  • Analyse the last 3 months’ sales breaking down by customer
  • Open the MyCompanyLimited file from my recents in a new instance of MoneyWorks
  • Set the colour of all of the sales invoices in Acme Widgets with a value over $1000 to red
  • Find and display in MoneyWorks all of the invoices for customer SPRING
  • Write me a MoneyWorks relational search expression to find all sales invoices for products whose colour is red

* AI-generated responses can be wrong, (as can human-generated responses).

Installing updates

After updating MoneyWorks, AI clients will lose their connection to the MCP server (since it has been replaced with a new one). You should quit and restart any AI client you are using to encourage it to reconnect. On Windows, you will need to right-click on the icon in the system tray to properly quit (Claude and Codex keep running even when you close the main window).

Other AI clients

These clients do not currently support local MCP servers:

  • ChatGPT — has a desktop app, but does not support local MCP; use OpenAI Codex
  • Manus — has a desktop app, purports to support local MCP servers, but does not
  • Copilot — does not support local MCP
  • Deepseek — does not have a desktop app

You can connect other AI clients such as gemini-cli or self-hosted models by configuring them manually. See Model Context Protocol

Posted in Uncategorized | Comments Off on Using AI with MoneyWorks

Change History for 9.2.5

Beta — not yet released. Contact Cognito for beta access

  • MCP server to allow your AI to work with MoneyWorks Gold
  • Stripe Bank Statement Importer
  • Calendar updated holidays to end 2029
  • update to openssl 3.4
  • Analysis window will run report on the server when creating/testing a new report (the same as for saved analysis reports) which is much much faster
  • Support the new subscription version of Numbers.app which has a different (but hidden) real name
  • Fixed: Adding department to group could acquire and not release additional single user locks
  • Fixed incorrect coachtip for Received Goods Before Invoice when serial tracking off
  • Fixed CSS injection for mail composer
  • Fixed Reorder stock to handle existing orders that have had the Recv field cleared (and prevent inadvertent clearing of that field)
  • Fix potential failure of Clear Bank Recs to fully reset the reoncciliation status of all line items; also protect the operation with a database transaction to prevent partial rollback
  • Assets: Added Canada Depreciation 50% for the first year
  • Assets: Fix department mismatch function
  • Assets: Fix bad search error
  • Fix stocktake entry field sometimes being misplaced on Windows
  • Fix incorrect (discounted) unit price for tax-inclusive products for customers with a tax code override
  • Fix spurious error when emailing from preview after testing custom form
  • Detect file system flush failures
  • Fixed account sticky note display by transaction type
  • Now possible to set passwords longer than 16 characters
  • Currency revaluation no longer treats currency gain/loss as realised
  • Reversing backdated Rate Change journals have ref numbers starting with “JX”
  • Saving a form no longer thumbnails it twice
  • The Expression Evaluation privilege is no longer required to evaluate simple in-field expressions, provided the expression does not use functions that access the database. This privilege absolutely should be turned off for users who should not have free access to all data
  • Fix typos in BAS guide
  • Windows clients now load SSL certificates from the “CA” and “AuthRoot” stores as well as the “ROOT”
  • Closing a duplicated transaction window via the close box on Mac will no longer put back the allocated reference number

Server

  • Support for loading scripts in REST workers (see below). This is for private servers. We will not be enabling this on MoneyWorks Now servers
  • Fixed update notes opening in browser when the updates tab is reselected on Windows
  • Server-Timing: header provides an indication of the worker process that processed the request and the CPU time. This can be used to help with optimising your requests
  • Removed cache-control header
  • Partition temp files on multi-tenanted servers
  • Configurable server autosave behaviour nightlyAutoSaveIfUnsavedForHours = 5 nightlyAutoSaveHour = 23 in .conf file
  • Windows: Do not allow document root to be in file share or OneDrive etc
  • Fixed memory leak in SSL setup that could particularly affect long-running Console document status querying on SSL-enabled server

Scripting

  • MoneyWorks Gold now includes the moneyworks CLI (on Mac it is in the Helpers subdirectory of the .app)
  • Call MWScript scripts from REST. see Accessing MWScript scripts on the server from REST
  • GetHTTPRequestPayload(bAsPath), GetHTTPRequestHeaders(), PutHTTPRequestResult(file) for use by server-executed scripts
  • MWScript in MoneyWorks Gold can start an HTTP server on localhost with requests serviced by a handler — StartHTTPServer(handler, [port]) (MCP server uses it). This HTTP server can also support SSE via Accept: text/event-stream. Use SSE_Send(server, data) to push SSE data to all listeners
  • CLI moneyworks can run a custom stdio command shell via -j handlername
  • Debugger: newly instantiated variables are displayed in red
  • Objects returned by JSON_Get no longer need to be freed with JSON_Free . These objects will display as the referenced json in the debugger (it is re-stringified from the object). You will still get NULL when getting a non-existent node
  • Select sign option when opening a signed package if the signing key is available
  • Do not enable signing for .mwscript file format
  • The “recall” XML importing option for replacing a transaction with update="true" will now update an unposted transaction or unprocessed order in place, rather than importing a new transaction and deleting the old one. In this case the sequencenumber will remain the same
  • Improved error reporting for REST evaluate endpoint (message rather than error number)
  • Suppress click counting on list headers
  • Fix newlines in REST evaluate output sometimes being modified by the server
  • GetFieldAttribute(target, i, "kind"), GetActiveField(win)
  • Fix JSON_AsArray crash when the JSON root is an array rather than an object
  • Non-mwscript files in a script package now show with document icons (for known extensions, e.g. .js, .json, .md, .html)
  • Syntax colouring for non-mwscript files package files, based on either the extension or the initial characters of the text
  • Fixed ExpandDetail et al for the case where two forms might be generated simultaneously (as can happen for navigator forms)
  • Allow UpdateOrderLines to work when called from the After handler of a transaction
  • GetMWEnv(what) funtion to get functions, globals, constants, instances
  • StartMoneyWorksInstance(url) to start another MW instance
  • DoReport now automatically sets from and to from period or year like the report settings dialog does. Also from and to are no longer case-sensitive
  • Replace(src, pattern, repl, [pattern, repl]...) fucntion can take additional replacement params
  • Paths can begin with ~/ and / directory separators are respected on Windows
  • GetPlugins("report_desc", reportname) gets the required parameters for report
  • BeforeGeneratingForms handler for preprocessing records. A form can be set to call this handler in a particular script. The script must be loaded when you configure the form in Form Options
  • URLDecode()
  • GetCommandLine() function
  • ProcessType global = “cli”/”gui”
  • Transaction.PayNowToken field
  • Exporting “xmlschema” has expanded field attributes and corrects the field lengths which were off by one
  • DocumentPath now returns a proper URL for connections
  • Several script-only functions are now available to normal expressions
  • Analyse() is less fussy about dates needing to be be date type. An 8 digit number will be considered to be a yyyymmdd date
  • SetErrorHandler(handler) function will call the function and return a TypeError result from functions that would normally throw a runtime error. This is particularly useful for the Val function if it is being used with user or AI input that may cause it to fail
  • GetErrorNumber(err) function
  • GetErrorMessage(err) function
  • TypeError constant for testing of error return values
  • UserLoggedIn handler is no longer called twice on login
  • StdOut function outputs a line of text to stdout
  • AddDashboatdPage add an html page or url to the Navigator dashboard
  • RemoveDashboardPage remove an html page from the dashboard
  • Script editor has a unique syntax colour for MoneyWorks globals
  • Using the DoReport function will no longer change the user’s output mode for that report to Clipboard
  • Outputting reports as text, including with DoReport will now output a chart as the original tabular data instead of omitting the chart. The chart data is bracketed with # start/end of chart data so that AI clients can render the chart themselves
  • XML importing now automatically moves all work-it-out fields to the end of the record so that they do not fail when placed before imported fields that the heuristic depends on
  • Document names in URLs should no longer be case-sensitive (which has historically caused a lot of frustration for REST client developers)
  • TransformXSLT(xml, xsl) function
Posted in Change History | Comments Off on Change History for 9.2.5

Change History for 9.2.4

December 2025

General

  • Windows 32 → 64 bit migration If you have the 32-bit MoneyWorks Gold installed, this update will migrate your installation to 64 bit MoneyWorks Gold. The install location will change from Program Files (x86) to Program Files (so if you have a pinned taskbar icon, you will need to update it). 64-bit Windows OS is required.
  • MoneyWorks Gold Windows arm64 support. If your Windows computer has a Snapdragon (ARM) processor, the universal installer will migrate your (32- or 64-bit) MoneyWorks Gold to the arm64-native version. Updating an existing MoneyWorks Gold 32-bit installation will move it from Program Files (x86) to Program Files.
  • Mail composer now has an option to use plain text only (especially useful if you are sending via your mail app)
  • Use Microsoft Print to PDF should work more reliably (was failing on some Windows installations)
  • Restored the missing PPD Disc column to invoice receipting
  • Fixed Mail Merge with MAPI
  • Batch-mode emailing server-rendered statements no longer truncates the PDF after the first statement
  • Modeless MAPI is no longer forced modal when database is a local document
  • Bank Rec cosmetic improvement for Windows HiDPI
  • Bank Rec: old reconciliations are reloaded in transaction date order
  • Build dialog cosmetic fix
  • Uninstaller on Windows updated
  • Mail templates can be pinned in Mail Merge
  • The email composer now self-hosts the quill editor
  • Fix repeated export of report to file/spreadsheet etc switching to email mode (9.2.3 bug)
  • PDFs attached to messages in the local mail client (Mail, Outlook) now have better handling of name collisions
  • Improved naming of reports generated as PDF mail attachments
  • Enabled right-click → Help in modal windows on Windows
  • Logging out of a document no longer closes non-document windows such as script or report editors
  • Switch back to classic linker on Mac to give a little bit more grace for antique macOS versions
  • Fixed option-copy payments to clipboard (9.2.3 bug)
  • Removed unused language lexers from Lexilla.dll since some of the text can evidently make particularly stupid antivirus delete the file
  • Fixed potential report setup dialog failures on macOS Tahoe
  • Emailing server-generated statements now reliably gets the addressing information
  • SMTP now has a shorter timeout to prevent hangs with a non-existent SMTP server
  • Better detection of HTML when passing email message to Outlook on Windows
  • Force plain text mode in mail composer if mail mode is MAPI
  • Disable MS Print to PDF if selected on Windows 10 because it does not work on Windows 10

Asset Register 1.1

  • Dispose of asset with personal use might not work correctly
  • Departmentalised account may not work as a depreciation
  • Feature Request – Fixed Assets Amend Existing Asset
  • Fixed Assets – don’t zero out accum depn in the asset record when disposing asset
  • Import categories does not accept a depreciation value of zero
  • Part disposal of asset might give wrong new book value
  • Error when Importing Assets with zero depreciation rate
  • Report that calculates depreciation for the end of the current financial year
  • Asset Register Report to Show Depreciation Rate and Method
  • On sale, Current Yr Depreciation is reversed from GL but not reversed from Asset

Server

  • MoneyWorks Datacentre Windows arm64 support. Universal installer will install 64-bit x86_64 or arm64 as appropriate.
  • Installer on Mac no longer demands “Documents” access
  • Fix minor memory leak for sql handles
  • Fix diagnostic log names on Windows
  • Console has more immediate updates info in the Updates tab

Scripting

  • Fix UI editor scaling issues with popups on Windows HiDPI
  • LoadURLInWebView(url, [userContentJS]) now takes an optional usercontent javascript injection to be loaded after the page loads
  • LoadURLInWebView) now explictly makes a file:// URL’s directory readable to the webview
  • GetModulePath() returns the path of a script’s own package for externally loaded packages
  • fListMode_NoEditTools no longer results in a crash if you press enter in the list
  • "useTahomaForUI" app preference
  • Implement Open Link in New Window for WKWebview → opens in browser
  • Work around Webview2 bug where it does not reliably become visible after being created invisible
  • Text fields with scroll bars will now always ignore the click selects field user preference
  • Fix Upper crash if passed non text param (9.2.3 bug)
  • The email composer now self-hosts the quill editor inside a .mwpkgd which serves as sample code for the scenario
  • Opening a preloaded package in its original location or with the same leaf path now posts a coach tip letting you know the original instance was unloaded. Similarly if you have such a package open when you open a document, reactivating a script in the package will alert you about unloading the autoloaded instance
  • CLI convertpkg will do a simple copy if the src is already a .mwpkgd
  • IWebBrowser2 (old Windows web view) no longer opens in external browser when you call LoadURL a second time
  • Mail() to mail client with suggested name no longer renames a non-temp source attachment file (if necessary it copies into Temp first)
Posted in Change History | Comments Off on Change History for 9.2.4

Creating messages with attachments in Outlook

Windows

MoneyWorks supports creating messages and adding attachments in Outlook. But only in “Real” Outlook.

Microsoft has been aggressively pushing “New” Outlook, which is not a local app but just a wrapper on the website outlook.live.com. As merely a webpage, the “New” outlook has no support for local automations, so MoneyWorks cannot communicate with it to make messages for you. If you want to create messages from MoneyWorks in Outlook, you must use real Outlook.

On Windows, MoneyWorks offers two methods of interfacing to Outlook: Via Simple MAPI, or via the Outlook automation API. “New Outlook” does not work with either.

  • Ensure you have real Outlook installed. This is part of Microsoft Office
  • Real Outlook is labelled Outlook (classic). It has an option to switch to New Outlook. Do not use that. If you have switched on New Outlook, look in the top right of the window for a switch to turn off New Outlook

Mac

On Mac, MoneyWorks uses the Apple sharing API to create messages with attachments in the default mail client. New Outlook does not properly support this API.

  • Ensure you have real Outlook installed. This is part of Microsoft Office
  • Outlook has has an option to switch to New Outlook. Do not use it. If you have switched on New Outlook, look in the top right of the window for a switch to turn off New Outlook
Posted in FAQ | Comments Off on Creating messages with attachments in Outlook

Change History for 9.2.3

Nov 2025 — 202511.11.1237

General

  • New email composer allows formatted emails, saving and loading of email templates, and testing of mail merge. You can also use it for composing emails that will be sent to your Mail/Outlook app — not just for SMTP
  • Standalone mail merge function for mailshots with mail merge
  • Multibyte unicode characters sent to Windows Outlook no longer turn to mojibake
  • Fixed cosmetic issues with text editing in line item cells on Windows at higher screen resolutions
  • Sorting by fields containing @ signs (such as email address) now works properly. They were inadvertently being treated as wildcards for sorting
  • The title of list printouts is no longer stored, since it could apply the wrong file name when you switch documents; the filename is also no longer included by default
  • “Plain” invoices now remember the selected output mode
  • Various improvements to HiDPI support on Windows
  • Improved the reporting of SMTP authentication errors
  • Windows UI font updated to Segoe UI Emoji where available
  • Product margin display in the Selling Info tab is now consistently based on buy price
  • Reorder counted products takes the current count into consideration
  • Auxiliary document windows now show a changed indicator (•) on Windows
  • Prevent drill-down from creating an additional writeable window for an already-open transaction (if this happens, the window will be read-only to prevent the same transaction potentially being posted twice)
  • Prevent all system control accounts of a particular type from being user-disabled via a tilde prefix. There must be at least one of each type
  • HiDPI fixes on Windows for status column formatting and drill down button drawing
  • Fix lack of drilldown icon click highlight with Windows compositing
  • Small popup menus on Mac increased to regular size for better rendering on Tahoe
  • Fix Name enquiry privilege handling when only one of Sales/Purchases is enabled
  • Fixed Mac edit fields no longer using monospaced digits since Big Sur
  • Fixed read-only edit list rows not getting background colour when active on Windows
  • Tahoe-compatible app icons
  • Fixed an automation crash on Tahoe
  • Fixed creation of multiple messages in mail app with attachments with the same suggested name (filenames are now forced unique with a timestamp since the process is not synchronous)
  • Fixed saving of PDF files using libHaru to paths containing non-ASCII characters on Windows
  • Fixed mail merge attaching a spurious temp file
  • Mail composer: Enable Send Message button without an email address being entered when message will be created in the local mail client
  • Fixed performance issue with progress window on Windows especially when a WebView2 is visible
  • Fixed message body not being passed to Simple MAPI
  • Rebuild template menu after deleting a template
  • Fix privileges checkbox positioning for HiDPI (Windows)
  • Fix Save A Copy as (verbatim) breaking scripts
  • Add build number to welcome screen
  • Fix zero amounts being displayed in Bank Rec in 32 bit-bit Windows Gold client
  • Fix incorrect email addressing for batch mode SMTP when form is generated on the server due to high network latency
  • Fix errors thrown by Mail merge
  • Fixed mail template saving (and in fact all sqlite3 functionality) which was not working over a network for 32-bit Windows clients

Server

  • Let’s Encrypt support for automatically obtaining and renewing SSL certificates. If you use SSL/TLS you will soon need to have automatic renewal because certificate lifetimes are going to shorten to 45 days. To use Let’s Encrypt with the ACME challenge, you need to be able to forward port 80 to the server.
  • Exporting and copying records is now much faster on high-latency networks
  • Certificate private keys are now preferentially stored in a separate .key pem file instead of the cert .pem file. If you will obtain certificate renewals by other means, this makes it easier to automate copying new certificates into the Datacentre configuration
  • The same certificate is now used by default for REST and native protocol network services; you do not need to specify them separately, although that is still available as an option
  • Fixed potential bad log data in IP address for HTTP/S logging
  • Changing a server’s timezone while users are logged in will no longer risk logging them out
  • Clean up temp files when user cancels a server-side report (on Windows Server 2016 and earlier, these could accumulate for years in C:\Windows\Temp)
  • Server alerts will no longer complain about offline backup volumes overnight
  • Recovery after a database crash is faster
  • Console displays the server’s primary IPv4 (enet preferred)
  • Installer creates Windows firewall rules to allow UDP multicast for mDNS because it seems to be blocked at a lot of Windows sites

Scripting

Note that the first couple of fixes here change some behaviours that could potentially break existing scripts if they rely on the undocumented and unintended behaviours that were fixed.

  • Nowdoc strings no longer interpret \ as an escape character (this will be a breaking change if you have scripts where you have double-escaped newlines as \\n to make them work in, e.g. javascript) [potential breaking change]
  • WebViewControl no longer changes unspecified options (in particular, using it to set the browser technology option useWKWebview or useWebView2IfAvailable for one platform would have the side effect of setting the option for the other platform to false)
  • External packages – a standalone script window can be saved as a binary or directory package (as well as XML deployment), The package can be codesigned and later be loaded using LoadScriptFile
  • LoadScriptFile(packagePath, publicKeyArray, domain) returns false if package fails to load, see log for reason. The function now also expands paths beginning with “CACHE/” or “TMP/”
  • Script editor window dirty indicator on Windows
  • PutClipboardText flakiness on Windows; now properly supports unicode text; it ill also put text as HTML if it looks like HTML
  • SetFieldValue(win, ident, value, [flags]) 1 = append; 2 = preserve window modified state
  • Unzip(src, dst) function
  • Debugger context help now works for looking up highlighted function/handler in the manual as for the script editor
  • Public handlers can be called from custom column expressions (they will be optimised first with an assumption that the result will not vary across records in the list, so every row will see the same result — useful for accessing a global setting)
  • ContactRoles global variable — semicolon-delimited list of role names
  • GetRoleForRoleName function maps a role name to a role number
  • Fixed potential window modality failure closing a scripted modal window
  • When activating a script from the Script Editor, the script editor will now call a LoadFromScriptEditor handler that you can use for testing a script rather than putting test code into the main Load handler
  • Select All in the Windows script editor (and scintilla generally) now actually selects all rather than falling short when the text contains multibyte characters
  • Updated to the latest Scintilla + Lexilla libraries. If you store html+javascript as a named script for use with GetScriptText, it will now be syntax-coloured
  • ModalListWindow and CreateListWindow now support hosting a WebView2 in the same window
  • ModalListWindow and CreateListWindow now check that a document is open
  • SetFieldValue on a tab control can now be used to replace the tab definition if the given value contains semicolons
  • Script Editor no longer clears breakpoints when you select another script. Breakpoints remain as long as the editor window is open
  • The debugger will no longer allow you to unload a script from a breakpoint inside a callback handler that was called from a library, since that would dispose the library’s object from under it
  • Curl_Exec should now provide better results from GetLastErrorMessage when errors occur
  • Libcurl’s CURLOPT_DEBUGFUNCTION may now be used
  • Navigator("prvw:path/to/file.xml") will open a preview xml file created via DoReport or DoForm with output format xml
  • Script Editor context menu copy selection as styled HTML or RTF preserving syntax colouring for documentation purposes
  • InsertVars() can now see fields from a table loop control variable (using either the variable name or the table name as a prefix)
  • ProgressStopped() function enables regular users to stop a long running operation in a script
  • It is now possible to make a very narrow popup menu that will open as a full size combo box on Windows (it will temporarily resize itself when opened)
  • Ask() now accepts a "width" parameter to set the window width in points for when you need a wider entry field
  • Record-specific functions that were previously only available for loop control variables in the report writer may now be used with table loop control variables in MWScript: prod.StocktakeNewQtyForLocation, prod.StocktakeStartQtyForLocation, prod.SOHForLocation, prod.SellPriceForPriceCode. prod.AvailableStockForBatch, name.GetContactForRole, ldgr.GetMovement, and ldgr.GetBalance
  • REST xml-terse export is now slightly less terse (it includes the LastModifiedTime field). This field will be ignored if importing the same XML
  • Custom window text field mnemonics <BORD> to apply a border to an <SBA2> type field; <LOCK> to make a field read-only without appearing disabled on Windows
  • GetReplyTo function to get the reply-to address for the current user (if an override has been specified)
  • Fixed ugly Webview2 borders in custom windows
  • Fixed multipart alt + mixed MIME formatting in the internal SMTP function
  • Fixed some potential script editor crashes
  • Fixed crash with very large data export via Applescript
  • Inappropriately calling WriteCurrentRecordForWindow will no longer bring down the server
  • Sort(tabulartext) no longer strips commas from the text
  • Curl_AsyncExec(curl, completionHandler) to run a curl request in a background thread and call a completion handler when it finishes
  • Curl_GetOpt(curl, opt) for retrieving handles from the curl handle
  • CallHandler(handlerName, ...) for patching callbacks
  • ConfirmClose(winRef) handler for custom windows; return false to cancel closing
  • PATH_SEP constant ("/" on Mac, "\" on Windows)
  • convertpkg src="some.mwpkg" dst="some.mwpkgd" CLI command for converting binary packages (useful for checking into version control)
  • LoadPicture no_pic option now works when a picture has already been loaded
  • Export() function, plus CLI, Applescript, COM, and REST export now support "json", "json-verbose", "json-terse", "sql", "sqlite", "sql-drop-create", and "sqlite-drop-create" as an output format. Dates and times are formatted as ISO8601
  • JSON_GetArray(jsonRef, id, ...) similar to JSON_Get but returns a JSON sub-object as an associative array
  • JSON_AsArray(jsontext) parses the JSON to an associative array
  • DuplicateTransaction(seq, bSameRef) function
  • Fix crash with malformed Ask() parameter list
  • JSON_Free no longer gives an error if given a null handle
  • Handlers and properties now have a distinct syntax colour from built-in functions
  • ⌘-click on a handler name to jump to declaration (Esc to return to where you were)
Posted in Change History | Comments Off on Change History for 9.2.3

Change History for 9.2.2

August 2025

  • Asset register Investment Boost support (New Zealand)
  • Don’t allow sticky note window to be closed on Windows while it is being edited
  • Fix scripts loading in wrong order on Mac when app is launched by opening a document (this could cause some GST reporting functionality to fail)
  • Changes to enable new VMS version for Fiji
  • Extended wiki
  • Don’t allow sticky note window to be closed on Windows while it is being edited
Posted in Change History | Comments Off on Change History for 9.2.2

Date bug in macOS Sequoia 15.4

MacOS 15.4, released on 1 April appears to have a new bug that causes the currently-set d/m/y date format (at least in New Zealand and Australia locales; maybe others) to render in US format (m/d/y) in some apps (including current versions of MoneyWorks 9)

This results in a startup alert “This computer is set for non- standard date formats. If you wish to use day/month/year date formatting, please select it using the ‘Region and Language’ System Preferences pane, then quit and restart MoneyWorks.”

The workaround for this Apple bug is to quit out of MoneyWorks, go to System Settings → Date and Number Formats, and set your date format to a different option, and restart MoneyWorks. This should eliminate the incorrect date formatting. Reports seem to indicate that the format set at the time of upgrading to 15.4 will be the one that breaks.

The upcoming 9.2.1 release of MoneyWorks seems to be unaffected by the bug.

Posted in Uncategorized | Comments Off on Date bug in macOS Sequoia 15.4

Change History for 9.2.1

May 2025

  • 9.2.1r3 Fix inability to enable services
  • 9.2.1r3 Fix unintended change to toolbar search behaviour in 9.2.1
  • 9.2.1r2 Fix crash in certain circumstances such as processing orders modally with print preview
  • 9.2.1r2 Fix SMTP MIME formatting issue that caused Outlook recipients to display an extra non-existent empty attachment
  • 9.2.1r1 Sales Enquiry was broken by 9.2.1
  • Bank Reconciliation of arbitrary GL account now omits orders from printed summary
  • Sanitise email addresses containing control characters before using with SMTP
  • Completed orders no longer offer to update ship quantities if they were manually completed with backorders outstanding
  • Customer Enquiry no longer show movements for blank customer code
  • Ship Orders for a selection of sales orders is now stoppable (and much faster to start)
  • Fix Mac contextual menu Share command incorrect title
  • Fixed Assets Find Related acquisition or disposal transaction
  • Fixed potential crash in preview search
  • The “Just Beep” option for changing a GST value is now persistent once you set it. You can reset the option (get the alert back) by typing the expression =SetAppPreference("changedGst_suppressAlert", 0) into a field
  • Fixed missing privilege checks on some standard reports
  • Age by Due Date report now respects the local/base currency name
  • Custom report privilege control no longer truncates the privilege name in the settings
  • New Signing report to show the accessibility of signed custom reports (in the Reports/Security)
  • Moved the Privileges report from Audit to Reports/Security
  • Stock on Hand History for Location Report
  • Copy transactions to clipboard (canonical export) now includes detail.custom1,2
  • Scripted floating windows (and the manual window) now have full size title bars on Mac instead of utility window title bars
  • Fixed incorrect error message when file damage is detected
  • Fixed Mac list focus rect cosmetic glitches
  • Fixed Mac incorrect cursor in modal dialogs
  • Recent files paths/urls are now shown in the status bar on Windows
  • Fixed potential failure of HTML Navigator panels to load properly on Mac
  • Fixed unreliably coach tip display on Windows
  • Fixed incorrect display when shift-navigating in a list that only allows a single row selection
  • Local documentation wiki
  • Fixed inability to delete validation list items
  • Fixed incorrect recent shortcut loading in the Welcome screen on Windows when there are omitted recent files that no longer exist
  • More informative message when connecting to a server port that is not a MoneyWorks server
  • Fixed manual search field losing focus on Windows
  • Fixed incorrect setting of Read-Only for uses whose privileges are defined by Role
  • Fixed privilege violation error for read-only user when closing Navigator after using Ledger chart or Sales Explorer
  • Manual window on Windows now uses Webview2 to improve formatting
  • Updated default GST rates for new files in Singapore

Server

  • 9.2.1r3 Fix server error that could be triggered by duplicating a transaction after a search
  • 9.2.1r3 Fix potential spurious SSL network error
  • 9.2.1r3 Fix corrupt logging when REST GET request is very long
  • 9.2.1r1 A couple of conditions that are not errors are no longer flagged as errors in the log
  • Fixed random REST 500 Internal Server errors some Windows servers were getting with 9.2
  • Addressed some extremely rare SSL error conditions
  • Generally faster network performance for sequential record updates (including Bank Reconciliation finalisation)
  • Detect ghostscript hangs when optimising malformed PDFs; always log ghostscript invocations
  • Datacentre client configurable idle packet interval for extremely high load servers
  • Ship Orders backorder analysis now runs on the server so that a Ship operation on a selection of sales orders now starts much faster
  • Work-in-Progress journal creation now runs on the server for much faster performance on a network
  • Additional server network diagnostics
  • TLS settings now accepts EC private keys
  • Rollbacks are now logged
  • Updated Censys netblock list
  • Mac clients now auto-retry connections on LAN if the first connection fails with a network error (due to flaky network permission issues on macOS Sequoia)
  • Optimised login performance by deferring Calendar load until it is used
  • Fixed REST login errors being incorrectly reported with status code 500 instead of 401
  • If login fails due to server disk full error, clients are now notified of the reason

Scripting

  • MWScript Debugger: The MoneyWorks scripting language now has a full-featured debugger with breakpoints, single-stepping, and variable viewing. See The MWScript Debugger for more information
  • The script editor Find command is much improved; all matches are indicated and you can step through matches forwards and backwards (shift key for backwards)
  • Foreach array key type — changed behaviour: MWScript foreach k in array... the array key values for k now have their original type (numeric, string, date) instead of always being a string. This should be transparent to existing scripts unless they do something in particular that assumes the type is text (with numbers padded with zeroes on the left)
  • New addition assignment operator: += operator allows addition/concatenation to a variable to be more succinct (i.e. let s += expr instead of let s = s + expr. The += version is much faster for string concatenation when the string being appended to is large
  • GetListContents now has a new option to get just the header of the list with formatting information (ListGetHeader). This header can be reused when next inserting the list to preserve column width changes the user may have made
  • Saving a new standalone script document now puts the new doc into the Recents list
  • New scripts pre-populate the meta with your name
  • Added a better error message for incorrect MWScript code that nests for loops with the same loop control identifier name
  • Built_In:__SendSMTPMail now supports passing an array of ["text"] and ["html"] multipart/alternative parts for the message
  • Create custom plugins folder hierarchy if necessary for sqlite3 database creation
  • WaitMilliseconds function no longer suppresses “script is running” dialog
  • -P option on Windows CLI
  • Improvements to the behaviour of OpenDocument() and CloseDocument() from a standalone .mwscript
  • ChangePrimaryKeyCode extended to support updating Product and Name codes
  • CurrencyName function
  • Webviews suppress the Reload option after LoadHTML
  • WebView2 webview no longer eats keyboard navigation keys
  • File_Open with just a file name will look in the first writeable script location (ignoring non-writeable directories)
  • Round rounding mode for halves (away from zero or to even) now works as expected for numbers whose floating point representation is inexact but very very close to 5 at the position being rounded
  • Hidden, scriptable Verify buttons in the Name entry screen (B_EID and B_ABN) for implementing online verification scripts
  • BaseName function
  • GetPlugins can optionally get the full path to the reports/forms (include a . at the start of the type parameter)
  • Columns appended by AppendColumnToStdEditList in the by account view no longer get an incorrect length limitation when the Job column is not shown
  • SwizzleHandler function. Renames or adds duplicate names for a handler at runtime
  • Scripts launched from the Command menu now check privilegse
  • Scripts launched from the Command menu can now be .mwxml packages
  • Navigator now gets a Before:panelname message when a non-html panel is selected
  • Script Load handler performance is logged if the script makes database requests (this should always be avoided)
  • Constants for GetFieldValue pseudo-fields (GetField..) plus a new pseudofield that gets the edit mode (add, duplicate, modify = 0, 1, 2)
  • New flags to suppress toolbar items for CreateListWindow
  • List.Comment, Filter.Name, and Filter.FilterFunction are mutable by ReplaceField()
  • Improved behaviour of openLinksinExternalBrowser mode for webviews
Posted in Change History | Comments Off on Change History for 9.2.1

Change History for 9.2

Performance and important stability enhancements

9.2r2 Jan 9

  • Fixed potential data corruption when merging accounts
  • Preferred bank account is no longer unexpectedly changed by opening a transaction that uses a different bank account
  • Fixed search optimiser crash searching for the pseudo-field detail.net
  • Fixed Forms Designer crash when changing visibility settings on Windows 64-bit Gold
  • Previous Custom plugins locations are now dropped when you close a document and open one that does not have custom plugins
  • Fixed a crash in the new Ledger Analysis with a large number of breakdown columns
  • Asset report addition column fixed
  • Diagnostic improvements
  • Journal importing no longer gets details don’t match gross errors seemingly at random. These were due to the importer applying a default contra account to newly imported transactions. This would cause problems when importing journals containing the same account
  • Fixed formatting of timestamp fields in lists with local files
  • Fixed bad error message when deleting validation list items
  • Fixed signatures breaking for analysis reports and forms (due to inadvertently including data that can change in normal operation of the form or analysis report). Note this fix may cause signatures applied by recent versions of MoneyWorks to become invalid. Please re-sign any affected forms and re-upload to your server as necessary
  • File → Open now includes .mwxml files under “All Readable Files” on Windows
  • Fixed SMTP OAUTH2 requiring frequent re-authorisation on Mac
  • Fixed potential crash committing a stocktake count update
  • Stocktake commit now always executes on the server

Server

  • 9.2r2: Fixed a new 9.2 bug that could set PostedBy to the wrong user
  • Fixed lingering threads/sockets when broken network connections are reestablished
  • The Datacentre REST server now adds a Access-Control-Allow-Origin: * header to support externally-hosted javascript clients

Scripting

  • GotoListField function
  • The External function now resolves symbolic links on Windows before executing the external. This is because some external commands do not behave properly when executed via a symbolic link
  • It is now an error to declare a local variable with the same name as a reserved word (such as let or end)
  • Curl_exec and External now invoke cancel event processing immediately after the function call, so that executing these potentially slow/synchronous operations in a loop will not delay window closing animation on Mac quite as much
  • Fix GetClipboardText crash when there is no text on the clipboard
  • Make InsertVars work with source text bigger than 32KB
  • New date format DateFormDateTimeBigEndian YYYY-MM-DD HH:MM:SS
  • File_ReadLine removed limit on line length (was 4K)
  • File_Open mode parameter may now include a "b" or "u" prefix (e.g. "br" or "ur") to request buffered or unbuffered (i.e. buffered within MoneyWorks as opposed to the OS). Default is currently unbuffered although it may still be buffered in the OS. Buffered can be orders of magnitude faster. It should only be used for sequential access
  • Sqlite3 support. See the Sqlite3 developer note
  • When sending output to the log via Syslog, the log file is now held open and buffered and only flushed once per second. This greatly reduces the CPU cost (Windows is particularly slow at opening and closing files). The log file will be closed if it has been idle for 20 seconds, which may cause the next logging to go to a new file if there are multiple instances and the log file has undergone rotation
  • ParseCSV will now convert quoted newlines to \v (the embedded newlines would otherwise break tab/newline parsing of the result)
  • Fixed ReplaceField to work properly for fields that allow newlines
  • String functions (Length, Left, Right, Mid, Position, etc) now have a faster and more reliable implementation for strings containing multibyte unicode characters
  • The numeric parameter of the Sort function is now an enumeration allowing for a third option SortCaseInsensitive
  • Fix script editor cash with very long single-line string constants
  • Fixed incorrect autocomplete prototype for Regex_Replace in script editor
  • Fixed crash assigning to nonexistent array

9.2r1

  • Right function fixed for multibyte unicode characters
  • RemoveLeading function fixed for multibyte unicode characters
  • External function removed symbolic link resolution for batch files because cmd.exe did not like UNC path names
Posted in Change History | Comments Off on Change History for 9.2

Change History for 9.1.9

18 Sep

  • Support for OAUTH2 authentication for Microsoft 365 mail servers
  • Budget and moving average overlay options for the dashboard Ledger chart
  • Sales Explorer Dashboard chart; explore top sales with cross-filtering
  • Columnar departmental P&L reports
  • Ledger analysis omission of zero lines now respects budgets
  • Ledger analysis auto zero omission supports include unposted
  • Fixed saving of new Ledger analysis reports
  • Optimised list searches in custom forms
  • Windows updates now run in silent mode instead of presenting an installer UI. This because Windows insists on putting the installer in the background, which makes the update process a bit confusing
  • Reinstated ability to use Replace on salesperson field for journals
  • Bill-of-materials report now supports BOM depth > 4
  • Custom Forms designer list options editor; fixed inability to change from calculated row count mode once selected
  • Account importer no longer uppercases Category2-4
  • Hot links in custom navigator or report can now more reliably select a view name
  • Custom reports can now access the stickies table
  • Subsummary by group now looks up the group name for the description
  • Check transaction SecurityLevel when drilling down in detail list or account enquiry
  • Report editor now calculates appropriate scaled page width when first opening a report/li>
  • Report editor part and cell editors no longer display out of scope for loop idents/li>
  • Details printout for products now includes location/batch, if present
  • Improved parameter navigation (⌘-→/Alt-→) in the report and form editor expression editing dialog
  • Commission Report
  • Crash with malformed XML import
  • Store Overpayment type preference per-user on Datacentre
  • Form searches now work with selections created with CreateSelection
  • Fixed issues with duplicated identifiers in expression editor dialog in custom forms
  • Import acct-dept with update no longer truncates descriptions at a comma. Note that comma is still used to delimit a department name when importing a new acct-dept
  • Changing report font/size app preferences is now reflected immediately by Show Movements in a report
  • Import tax codes/rates
  • Change tax code (updates all existing records to use the changed code)

Server

  • Changed the Pictures backup mode to put pictures into a separate backup file if you select not to back up pictures every time a file closes. This can greatly reduce the CPU and storage overhead for pictures backups
  • The separate pictures backup is now once every 1-5 days instead of a particular day of the week
  • CLI bulk backup restore now understands the new pictures backup system
  • CLI bulk backup restore no longer incorrectly changes the file type of folder.conf files
  • Server no longer panics if a client makes a corrupted search request
  • Server logs requests that take longer than 2 seconds
  • Optionally skip socket ssl_shutdown

Scripting

  • Script Editor autocomplete now includes parameter lists for builtin functions and standard handlers, and also an extra information variant that also displays the function’s documentation
  • Script Editor now supports ⌘-→/Ctrl-Alt-→ for selecting next parameter in a function template, which is useful now that the autocomplete can provide the full parameter list
  • Script Editor now supports Alt-shift-arrows for extending the selection by a word
  • File_Open function for writing with no supplied file name now offers a choice of textual file types, including one that does not force any file extension
  • Analyse function now supports discount and margin % output
  • Analyse function now sanitises description output to remove any stray control characters that would mess up the formatting
  • Fixed crash evaluating the Alert function in CLI mode. It now maps to syslog
  • Alert function no longer shows help button when a timeout is set
Posted in Change History | Comments Off on Change History for 9.1.9