What’s New in Artisan POS 4.9

Contents

    The latest version of Artisan is here–version 4.9. Read on to discover the latest features, from automatic updates to “Buy Again” repeat sales.

    Contact us at sales@certek.com or (877) 723-7835 to upgrade!

    To see a breakdown of all the maintenance updates and fixes, head over to our Change Log


    Key Features

    Automatic Updates / Check for Updates

    Artisan can now automatically check for updates when a User logs in. You may also check for updates by accessing the “Help” tab and selecting that option. 

    If a new version is available, Artisan will prompt you to install it. You can also have Artisan automatically check for updates after a set number of days.

    You can limit update checking to specific users (or groups of users), with the “Checking for Program Updates” setting in “Security Settings for Other Tasks“.

    User-Based Authorization (Fine-Grained Security Settings)

    In addition to the level-based authorization settings, you can now enter a list of overrides for specific users. For each task and user, you can set “Allow,” “Deny,” or “Just Ask.” Any task and user combinations not listed will use the regular level-based task settings.

    User-Based Authorization requires a “Deluxe” license and must be enabled in “Optional Features“.

    New Record Table Buttons

    Record table screens now feature several new buttons. The “Home” and “End” buttons take you to the beginning or end of any record list (e.g. “Item Records”).

    Where applicable, you may also select the new “Copy” button to copy records (previously available only through Alt-F3). Copy opens a new record screen, like F3, but filled in with values copied from the original record.

    A “Delete” button has been added as well (previously available only through the hidden Alt-D key sequence). Other button names have been shortened to make room.

    Copy” is also now available on individual record screens, along with a new “Merge” button. Merge lets you pick another record (the “target”) to merge the current record into. This will combine the two records into one, using values from both records where possible; conflicting fields (with values in both records) will keep the value from the target. All references to the records (such as sales history) will be combined as well.

    Note: When deleted Item Records are copied, the copy starts with the original Inventory Tracking setting from before the record was deleted.

    Bulk Change Pictures & Menus

    4.9 introduces two new Bulk Change operations: Bulk Change Vendor Consignment Settings and Bulk Change Pictures and Menus, which lets you change Quick Pick, Menu Order, and other related settings, and delete images in bulk. Bulk Change Pictures and Menus is supported for Item and Category Records. For Customers, it’s called Bulk Change Customer Pictures, since Customer Records don’t have menu settings.

    Export Pictures

    A new choice in the F9 Export function, “Image Fields“, lets you export images (pictures) from applicable tables (Item, Category, and Customer Records).

    Search All Reports

    In addition to selecting Standard and Custom reports through the main Reports menu or the Reports pull-down menu, you can now see a searchable list of all reports, including additional built-in reports, with Search All Reports (or a filtered list under each report group). Once you’ve highlighted the report you want, press Enter (or Return, on Mac) to run the report. 

    The “Source” column (for Reports, Forms, and Labels) distinguishes between “Standard” built-in, “Extended” built-in, and “Custom” reports/forms. “Standard” reports also appear in the report menus; the remaining built-in reports are listed as “Extended”.

    Run Any Report at Day-End

    You can now configure additional reports to be run after posting a Day-End or Shift-Closing, along with any (or none) of the standard Day-End reports. Find these new settings in “Day-End and Shift Closing Options.” Fill in the desired Report Names (not the full Report Titles), separated by commas.

    Add Pronouns to Customer & Vendor Records

    Customer and Vendor records (Vendor Contact) now have an optional Pronouns field. For example, “She/Her/Hers” or “They/Them/Theirs.”

    This information is displayed on Sales Screens but not shown on standard receipts and reports. 

    Sum-of-Kit Pricing supports Kit Markdown

    The Sum-of-Kit pricing model for kit items can now specify a Kit Markdown, to set the price to be calculated below the sum of the individual component prices. Kit Markdown can be either a percentage or a specific amount.

    “Fill In Discount” Coupons

    Coupon Items can now be set to “Fill In Discount” in the Item Record. When a Fill-In Coupon is put on a sale, the focus will automatically move to the Discount field, to allow the clerk to enter a discount amount.

    Tare Weight Calculator

    A new Category Special Handling type, “Tare Weight”, prompts for Starting and Ending Weight and sets sale line quantity to the absolute difference between the two weights. Useful for products priced by weight that are weighed inside a vehicle or heavy container.

    Check Cashing Fees

    A new Category Special Handling type, “Check Cashing Fee”, with a corresponding percentage-based or flat fee in the Item Record. When sold, the cashier is prompted for the Check Amount, and the fee is calculated and placed on the sale, with a note line showing the Check Amount. The check itself must still be entered as a Tender on the Payment Screen, which can be configured to prompt for Check # and other details.

    Custom Field Names

    Custom fields for Item Records can now be named globally: Custom field name settings in Item Record Screen Options are used when the names in the corresponding Category Records are blank.

    In general, for Customers, Items, Sales, and Vendors, display custom field names in table headers, instead of “Custom Field 1”, etc. For Item Records, these will be the new default names from Item Record Screen Options, not the Category-specific names (since a list may include Items from multiple categories).

    “Exception Quantity” Column for Inventory Counting

    Add the “Exception Quantity” column to your Inventory Counts screen to see the quantity counted minus the expected quantity. For example, Artisan shows 10 QOH and you count 9, so the Exception Quantity is -1.

    This can also be displayed on the Item Record list screen.

    “Buy Again” in Customer Purchase History

    While pressing Shift-F4 to view a customer’s purchase history while on the Sales Screen,  you may select the new button, “Buy Again” (F11), to add a previously purchased item onto the current sale (usually a new sale).

    The original quantity purchased is copied to the sale. Also allows a checkmark selection of items to buy, in one step.

    PO Smart Start by Item Creation Date

    The “Smart Start” option for creating a Purchase Order now allows you to specify a range of Item creation dates, in addition to the last-sale date range. This allows you to, for example, start the PO with only recently-created items (which probably haven’t been ordered yet).

    Allow Backorders for Online Store

    New “Allow Backorders?” field for Shopify and WooCommerce in the Internet Store Interface which allows the sale of out-of-stock items. WooCommerce explicitly labels these out-of-stock orders as “backorders,” whereas Shopify just allows them to be purchased normally.

    BigCommerce does not support the concept of backorders, so “Allow Backorders?” is not supported for BigCommerce. “In-Store Only?” is now implemented for BigCommerce, which is treated the same as Discontinued/Unavailable/Coming-Soon availability. The product is displayed on the site without an “Add to Cart” button. 

    You may also control whether “Allow Backorders?” varies individually within Product Variants, in each Variant Template’s settings. 

    Label Printing Enhancements

    Simplify Item Label Printer selection (in Label Forms and Label Printing Dialogs) to directly select an item label printer number (from Printer Assignments). Allow for 3 label printers per station instead of 2.

    Temporary Report/Form Changes

    To allow support technicians to deliver temporary “hotfixes” for reports and forms in advance of a program update, any changes made to built-in reports, forms, and labels, are now preserved until the next program version update. Any such changes will be silently and immediately discarded and replaced with the (possibly new) standard versions whenever the program is updated (even if the update does not include new versions of those reports/forms).

    Label Stocks can also be overridden, by placing new or updated label stock XML files in the “…/Documents/Artisan/Labels” folder. Note, though, that these will not be automatically removed when the program is updated. They should be manually removed once they are no longer needed, so future changes to the standard stock won’t be ignored.

    Multiple Payment Processing Profiles Per Station

    As part of the “Advanced Payment Processing Module,” 4.9 lets you choose custom payment types to be linked to Payment Processing Profiles. This can be used for selecting alternate processing methods, providers, or merchant accounts. It can also be used for non-credit-card integrations, using the “Custom” Payment Class.

    The previous “Deposit” and “Non-Deposit” Payment Classes have been combined into a single “Custom” Payment Class, which can be used for Deposits, by selecting a non-zero Deposit Group, or for Non-Deposits, by setting Deposit Group to zero.

    Custom payment processing methods return an Account Number, which is logged in the CC Log and can be used to select a Customer Record. Unlike a Credit Card Number, the Account Number is not obscured or encrypted, except when used as the Bank Account Number for Checks.

    The setting “Select or Create Customer Record (if none selected) from Payment Data” supports selecting a Customer by Customer ID from the Account Number returned by an integrated custom payment type. This setting can also be set in each Payment Type record.

    This feature also controls Alternate Payment Processing Profiles for Cards On File. This also allows a clerk to select which processing profile to use when adding a new card on file, automatically selecting the appropriate processing profile for Tips and Smart Refunds (so they’re applied via the same merchant account and processing method as the originals), separating deposits by Token Scope when exporting to an external accounting program, and applying Batch Settlements to all processing profiles.

    Offline Payments (Store & Forward)

    With supported Payment Processing Methods (see below), you can now enable Offline Payment Processing (in each Payment Processing Profile). This allows you to process credit cards even if your Internet is down. The payment details are stored in the payment processing software or PIN Pad (for DC Direct), not in the Artisan data, and later forwarded to the processor for normal processing once Internet access is available again. (You must invoke the Forward CC operation manually, or as part of a Day-End Closing or Settle CC Batch.)

    The following three new operations (along with the related existing “Settle Credit Card Batch”) are now (1) available in the Payment Processing menu under Tools or Accounting, (2) controlled by new security settings under “Financial Tasks”, and (3) available as toolbar buttons (except Offline Summary):

    • Offline Card Processing Mode (Force Offline, Try Online First, or Online Only)
    • Offline Card Summary
    • Forward Offline Credit Cards (to process online)
    • Settle Credit Card Batch

    Keep in mind that since offline processing cannot communicate with your payment processor, the payments are not authorized until forwarded. You do risk them being declined at that time, after the customers have already left.

    Requires the “Advanced Payment Processing Module.” Supported Processing Methods:

    • DC Direct 1.22 or later on PAX “A” series terminals
    • NETePay
    • TranCloud with Direct Communication (“@” in Device ID setting)

    Database Maintenance

    Replace the unimplemented Database Maintenance operations: Compact Database, Reindex Database, and Rebuild Database, with a single “Optimize Database & Reindex” button, which lets you choose combinations of Quick Compact, Full Compact, Analyze, and Reindex. Full Compact and Reindex require exclusive access; other stations must exit.

    There is also a new “Apply Database Privileges” operation in Database Maintenance, which reapplies the standard privilege settings to the current database, in case some were missed during an upgrade or restore.

    Security settings for the new “Optimize Database” and “Apply Database Privileges” operations is controlled by the existing “Other Database Maintenance Tasks” setting, under “Security Settings for Database Maintenance Tasks”. Other, pre-existing Advanced Database Maintenance operations are now controlled by a new “Advanced Database Maintenance Tasks” setting.

    Similarly, the Advanced Remote Operations menu now has an “Purge Queue” option, which is useful for resuming after “S3” errors in the “Receiving Changes” portion of the Remote Operation task (in Artisan Task Manager). Purge Queue deletes all messages from a node’s incoming queue; these will eventually be retransmitted from the other nodes. (You can accelerate it by doing a “Force Retransmit” option at all other nodes.)

    Cross-Station Configuration Syncing

    Configuration changes (Tools -> Options) made on one station now become visible at other stations, within 30 seconds, without having to restart Artisan on those stations. (In the case of remote stations and sites, there will also be the usual remote sync delay).

    View Local and Public IP Address

    View your device’s local and public IP address by clicking on “Help” and “About.”


    Changelogs

    Last updated 1/28/2026

    4.9.223

    • Fix interactions between Cash Rounding and Cash Discounts, as well as related subtle problems with navigation and payment price labels.
    • Fix Cash Rounding for Layaway/Order Deposits. Remove the special case for Cash Rounding of tiny amounts; let them round down to zero.
    • Fix unrecognized variable-measure barcodes with certain specific prices due to an incorrect price check digit calculation in some rare cases.
    • Make sure to mark orders imported w/missing DBT (Destination Based Tax) details as Incomplete rather than crashing with a Constraint Violation (from “transact_check”) in rare cases with some tax exemptions (as of 4.9.220).
    • Fix PO case rounding to include reserved requests in the total to be rounded, but always include at least the reserved quantity, and apply any extra to unreserved requests (creating a new one if needed).
    • Fix a rare Stack Overflow (infinite loop) logging in with no database connection.
    • Eliminate some “Session/EntityManager is closed” errors.
    • Handle malformed time strings in stock transactions during migration from 3.5.
    • RCV-001, Receiving Report: Add option to include units received with inventory tracking off.
    • CUS-110, Customer Sales Activity Export Report: Add an Export Date Range parameter (separate from the purchase activity criteria for selecting customers).
    • Report Engine fixes & improvements:
      • Fix a Null Pointer Exception in rare cases when deleting a report element that doesn’t belong to any section.
      • Fix cut-off formula language combobox in formula/SQL edit boxes.
      • Add nvl/coalesce to formula/SQL edit boxes.

    4.9.222

    • Fix hang opening sale with cash drops enabled, due to infinite loop of errors calculating cash in drawer, from changes in 4.9.220.

    4.9.221

    • Fix SAL-052, Best Sellers Report, in Real Data. Changes from 4.9.220 worked only in Sample Data when not Sorting by Customer.
    • Fix screen name for Select GC Type.

    4.9.220

    • Fix import of tax-exempt orders with excess tenders (such as delivery fees not included in the line items) to still set the exemption type to Interstate, rather than aborting the import due to a missing exemption type Constraint Violation.
    • Fix transact_check Constraint Violation during migration (from 3.5) w/split transaction lines from certain cases of kit component distributions.
    • Fix Item Custom Field 30, which was not using its custom field name on the Item Record Screen and was not being uploaded to Internet Stores.
    • POS-14706: Fix duplicate Cash Rounding Amount pop-up when clicking directly on the Cash payment type button from the amount text.
    • Fix persistent starting cash across shifts, including the hybrid case of using shifts but also counting “Office Cash” during Day-End, which is now listed as an “Office Cash Count” and consists of just the cash that’s not in any of the shift drawers. Previously, only Day-Ends without Shifts were being calculated correctly.

      Also, fine-tune the order of Cash Activity to show Final Drops & Cash Deposits before the corresponding Ending Counts, since those counts represent the amount retained in the drawer or office. When recording final activity in a Day-End closing with shifts, set their shift numbers to the highest shift number for the station running the Day-End, rather than always 1.

      In general, when a cash count is not performed, make the Final Drop or Cash Deposit the same as the default would be if a cash count were done and the cash count matched the expected cash. Record ending counts with explicit memos (“Ending Cash Count” or “Office Cash Count”), as we do for “Starting Cash Count”.
    • Fix rare Illegal State Exception during receiving in cases with multiple reserved orders for the same item: “Duplicate key” for Stock Unit.
    • Prevent some Illegal State Exceptions splitting stock units (when a linked transaction line is modified).
    • Prevent some rare Null Pointer Exceptions in the Sale Screen.
    • Fix some problems with SAL-052, Best Sellers Report:
      • Fix so Summarize By and Group By choices can be used in any combination.
      • Add Group By Manufacturer.
      • Add the Variant Attribute parameter to report header when applicable.
      • Include higher-level categories when Category Level Rollup > 1.
      • Hide Category Level Rollup header when not used.
    • Fix ITEM-SSL-2X1-DUAL to print correct # of labels. It was printing the square of the number of copies when > 1.
    • Report Designer:
      • Add a Section option to “Alternate Colors” when a Background Color is set on the section. Its background will then alternate between that color and white for a “Green Bar Report” effect.
      • Fix the Section Background Color chooser to default to the current background color.
    • INV-056, Inventory Adjustment Detail Report: Include “Void OOS” in OOS (Out of Stock) Corrections.
    • RCV-001, Receiving Report: Fix number formatting for large numbers and filter out items with IT_OFF.
    • Datacap Payment Processing: Report serial # lookup failures more specifically.
    • Begin adding F1 Help topics for specific sections of Program Options (Configuration Settings).

    4.9.217

    • Don’t recalculate Cash Rounding amounts when preparing sales for shift or day-end posting, in case Cash Rounding settings were changed in the middle of a day. (Fixes some Constraint Violations during shift or day-end closings in those cases.)
    • Fix a StringIndexOutOfBoundsException parsing a Driver’s License barcode with missing or malformed dates.
    • Possible workaround for NonUniqueObjectException after editing customer record from Sale Screen.
    • Make 8080 the default port for DC Direct.

    4.9.216

    • Enhance the Out-Of-Stock Warning Menu in the Sale Screen to have two options for taking inventory from another location: one to take the full quantity from the other location (as before, but now option “A”) and one to take the rest from the other location (option “L”). Also reformat and reword this menu for clarity, and enhance the subsequent location menu to show the available quantity at each location.
    • DC Direct enhancements for PamiTV/PamiPOP credit card terminals with advertising displays:
      • Allow DC Direct serial #s to start with letters.
      • In the payment configuration note for DC Direct, say port 80 for Ingenico devices only; port 8080 for others.
      • Note that PamiPOP does not support manual credit card number entry.
    • Allow periods & percent signs in Keywords (in Customers, Items, etc.).
    • Fix duplicate suggestions to apply credits and payments on hold sales recalled with some credits/payments already applied.
    • Fix various errors changing a site with some purchase requests or stock on-hand to be a non-inventory site.
    • Fix some stack overflows logging errors, in unusual cases. In particular, skip activity monitor task runs if another is already in progress.
    • Significantly speed up preparing new sample data from real data when there are no other users connected to the database.
    • Report Engine: Include report footers in the check for extending lines into the page footer gap.
    • Upgrade to Java 17.0.17.

    4.9.215

    • POS-14701: Allow Sample Data to be created from Real Data at Sites other than 001.
    • Report/Form Export to XLS[X]: Fix incorrect combining of columns in some cases following a partial overlap of earlier columns.

    4.9.214

    • Make SAL-051, Sale Summary Report, work better when exported to XLS[X] format, particularly the Sales by Vendor, Sales by Item, and Sales by Customer sections.
    • Report Engine: Export to XLS[X]: Export numbers as numeric cells, rather than text cells, even when they contain commas (for thousands, etc.)
    • Fix an occasional failure to combine lines on PO forms, PO-101 & PO-102, when the “Notes” fields in the underlying stock units are a mix of blank and null.
    • Fix a rare race condition resulting in a fatal IllegalStateException delivering search results when the data session has already been closed (because the screen was closed).

    4.9.213

    • POS-14694: Add Item Label Forms for Avery 5167 labels (4 across X 20 rows), with and w/o barcode (ITEM-AVS-5167, ITEM-AVS-5167-NB), in addition to the two tags on one label “Halved” version (ITEM-AVS-5167-X2).
    • Give an error message when saving Security Settings with User Selection by Password and No Password Required, rather than silently changing it to Weak Passwords.

    4.9.211

    • Fix Illegal State Exception when saving a recalled Purchase Order after voiding one or more lines. (Since 4.9.209)
    • Treat 14-digit GTINs (encoded as ITF-14) as UPCs for searches and adding new records.

    4.9.210

    • Fix a “DataWorker failed to enter loop” Illegal State Exception caused by a race condition, with the loop exit completing first. This was occasionally causing payment processing failures while allocating Payment IDs.
    • Remote Operation: Handle duplicate station numbers by merging the records rather than trying to rename, which was failing because it’s a fixed 2-character field.
    • Fix a rare fatal Null Pointer Exception in getFieldValue() from changeQuantity(), while changing qty on a non-existent row in an embedded table (somehow).
    • Fix a rare fatal Null Pointer Exception in showSaleStat() after saving a sale failed, in some cases.
    • Fix a rare Null Pointer Exception invoking isLive() on a null getTransactState() from checkOOS(), even though that shouldn’t happen when the transactRecord is not new (which is already being checked).
    • Add Item Custom Fields to available Purchase Order Screen columns.

    4.9.209

    • Datacap: Fix queries to use the full reference number (which was changed in 4.9.205 to include the slip number). This fixes a problem where all queries returned error code 2500 “Transaction Not Found” (incorrectly).
    • Datacap: Don’t treat the Pay API “Transaction Not Found” response code 2500 as a failed query, even though it’s reported as an “Error.” Treat it instead as a lack of response, so the query is tried again; the real result might just not have yet made it to the Pay API server. This will reduce the number of cases where communications failures require a user to determine the payment processing status externally.
    • Fix additional cases of consistency check discrepancies after inventory transfers, caused by a failure to change some stock units to the new site.
    • Refine Item Qty Repair when location-tracking is on, to repair a particular Inventory Transfer inconsistency.
    • Ignore clicking on the “Any Scan with Exactly n Digits” checkbox in the
    • Barcode Scanner settings (in Device Configuration) when the screen is still being initialized or has already been requested to close. This prevents a Null Pointer Exception.
    • Quote fields containing spaces in M1 OTB Export.
    • Report Engine: Fix parsing of “//” field suffixes inside “[[” / “]]” preprocessor conditionals.
    • RCV-001, Receiving Report: Add option to Group By OTB Class.
    • Update to Shopify API 2025-10 (no changes needed).

    4.9.208

    • POS-14692: Add a Day-End Screen Option to Run the Management One OTB Export silently after a Day-End posting. Settings from the previous manual run will be used, and the ending date of the Day-End will be appended to the filename. The Day-End ending date will also be used for the Report Month.
    • POS-14693: Filter PO Smart Start sales calculation by Inventory Site if Full Location-Tracking is enabled and a Request Site is selected (rather than “All Sites”).
    • Datacap: Treat a Pay API query result Status of “Error” as a failure of the query itself, allowing the query to be tried again, rather than incorrectly interpreting it as a failure of the original transaction.
    • Improve performance when adding a batch of lines to a PO, either when starting a new PO, or when expanding kits or variants, by only updating the PO totals once, at the end of the batch. For a PO with hundreds of lines, reduces the start-up time from 10-30 seconds to a few seconds.

    4.9.206

    • Add SSL-409 1.2″ X 0.85″ label and label stock.
    • Datacap: Log missing or malformed “Ref2” data rather than getting a null pointer or array index exception.
    • Fix a null pointer exception in Scan Mode when processing scans with no corresponding target record.
    • Fix a null pointer exception in the remote background task when a record being merged via the merge pending table is missing.
    • Include a stack trace in the error log for remote background task exceptions.

    4.9.205

    • Continue Payment ID Allocation Fixes: Modify Datacap Pay API support by concatenating slip # and Payment ID only when sending transactions; store only the allocated ID in the Payment Log, so number assignment can detect duplicates. (Since 4.9.166)
    • Disable Copy button on Station Record Screen.

    4.9.203

    • Fix remote operation failures in certain unusual record merge cases, by discarding duplicate MERGE_PENDING records silently.
    • Fix the 4.9.168 upgrade step, inventory summary recalculation, to run at only the main site when using Remote Operation.

    4.9.202

    • Fix a potential 10-30-second freeze during Payment ID allocation on systems with a long history of credit card transactions.
    • Speed up Receiving Summary recalculation, in some cases (including in 4.9.198 upgrade).

    4.9.201

    • Base Receiving Summaries (in the Item Record Activity tab) on “True” Receiving only (not corrections, imports, and returns).
    • Fix so a Qty Break that sets a discount and a Customer Type / Price Level that sets an adjusted price (for example, for a Cash Discount) act independently and don’t interfere with each other.
    • Fix Internet Store upload, when configured to use a specific Internet Price Level rather than Retail, to use the Discounted Retail Price as the Sale Price if it’s lower than the Internet Price (unless the corresponding Customer Type is set to Ignore Retail Discounts). This makes it consistent with pricing in the Sale Screen.
    • Fix so Receiving Distribution from a Receiving Rollup screen (upon Ctrl-D Detail or F10 Process) with a partial quantity (less than the Expected Qty) distributes that qty to the individual units (especially those reserved for sales orders & special orders) in the same order as displayed in Ctrl-D Detail. This ensures that Reserved Receiving Notices are presented appropriately.
    • Add Shipping Info (when present) to the Standard Thermal Receipt, SLIP-T, and fine-tune spacing between fields in general.
    • Add “Item Filters” parameter to EMP-163 Employee Performance, to allow filtering by category or vendor and more.
    • Upgrade to Java 17.0.16.

    4.9.197

    • POS-14683: Make Item Custom Fields 1-30 available in Configure Columns for Receiving Screens.
    • POS-14685: Don’t show price-level prices on Customer Display for specific credit card payment types if there’s a Payment Pricing Rule for the generic “Credit Card”, too, and the price is the same.
    • POS-14684: Include the SET RIBBON command with the Initialize sequence for TSP Label Printers. Default is to set ON (Thermal Transfer) or OFF (Direct Thermal), based on the Print Method set in the label form. You can override this with the “TSC_RIBBON” environment variable: “NONE” to use whatever was detected at power-on (the previous behavior), “AUTO” (or not set) to set based on Print Method setting, or explicitly “ON” or “OFF” (or for the TTP-384M Industrial Printer, “INSIDE” or “OUTSIDE”).
    • Add new label stock ULS-5957 for Uline 5957 label sheet.
    • Fix inconsistent “Expected” (STK) qty, in Inventory Consistency Checks, when an Inventory Transfer exceeds a Pending Transfer to which it is applied.
    • Fix an inventory consistency check discrepancy caused by a failure to change some stock units to the new site, in cases that span multiple stock units, but not entirely, so the last stock unit has to be split. This will also fix some similar cases with other inventory adjustments.
    • Don’t share untracked stock units across sites.

    4.9.196

    • Fix duplicate Vendor Product when merging vendors with Multi-Vendor support enabled and some Items have vendor products for both the source and target vendors.
    • Fix interaction between backorders and quantity breaks, and some more cases of partial backorders in general.

    4.9.195

    • SAL-101, Sales By Item (Detail) Report: Fix merging of Vendor P/N & QOH columns in XLS(X) exports.
    • RCV-001, Receiving Report: Add Parameter Option for No Grouping. (Still provides option to “subgroup” by PO.)

    4.9.194

    • Add a Default Sale Type setting to Sales & Order Defaults.
    • Fix the quantity on a Back-Order sale to be correct when a partial B/O quantity is used on a recalled sale/order.
    • Add a description line to the beginning of a Back-Order sales order to reference the original slip #: “Back-Order from Slip #nnn”.
    • Always ask before printing labels for recalled sales that have already asked or printed at least once, even if the setting to Ask Before Printing Item Labels For Sales is turned off.
    • Change the default for the “Print Labels When Sold” optional feature, when Advanced Inventory Module license is added, to be disabled, since it’s such a rarely-used feature.
    • Discard duplicate Pricing Chart Lines during Migration from 3.5.

    4.9.190

    • Fix several Cash Management issues:
      • When canceling or unposting a Day-End or shift closing, only delete shift-close Final Drops associated with that posting, not previous explicit Cash Drops or Cash Adds.
      • Display read-only versions of Cash Drop & Add totals in Day-End Cash Counter, if non-zero, instead of showing an unbalanced calculation.
      • Fix incorrect summing of Cash Adds on Cash Counter screen.
      • Close Standalone Cash Counter screen after printing.
      • Fix the Custom Field 9 column (and other custom fields) in Cash Activity to use the specific custom field name (usually “Memo”).
    • SAL-051, Sales Summary Report (including Day-End): Allow Sales by Location, Voids & No-Sales sections to be hidden, using new parameters controlling their visibility (defaulting to Yes = visible). Improve formatting of Drawer Open Count (No-Sales).

      New parameters:
      Show Sales By Location (Site)?
      Show Voided Transactions List?
      Show “No Sales” Drawer Opens?
    • Fix a Constraint Violation Exception when a negative Sales Tax Adjustment is required during Day-End (because a category changed from taxable to non-sales).
    • Fix conversion of Canadian PST+GST Sales Tax during migration from Artisan 3.5.

    4.9.188

    • Add a Case Rounding Mode to the PO Start Dialog: Nearest, Up, Down, or None. Previously, only Reorder Requests were rounded (up) to Case Size. Now, the rounding is done across the total of all requests added to the PO for each item, of all request types. The resulting rounding amount is applied to unreserved requests only (Reorder or Manual), with any remainder added as a new PO w/o Request line. The last-used Case Rounding Mode is remembered in the relevant Options Profile (along with the Smart Start intervals). The default is Nearest (Half-Even Rounding).
    • Allow Category Surcharge to be specified as either a Total Amount or the existing Per Unit and Percentage options.
    • Add Pricing Scheme option to have Quantity Breaks Apply To Items with the Same Retail Price only.
    • Add Kit Component Import with the following fields: Base Item, Component, Kit Qty, Visibility (If used with TTX format, tag must be “COMPONENT.”) The Kit Main and Component Items must already exist.
    • During sales, update the Customer Display (Pole Display) when any relevant fields are changed (price, discount, description, etc.). In general, change sale status from Blank to Started as soon as there are any lines on the sale, even if the total is zero. (That way, even if the first line is a fill-in-price item, it will show on the Display.)
    • Fix rare Null Pointer Exception in String.equals() from KeyboardDeviceHandler, probably when scanning on top of a text string.
    • Fix label layout on the Label Stock for GLS-2X2.6X16 label sheets to work with more printers.

    4.9.184

    • Paygistix Client: Fix some problems with payment processing error classification, especially when older versions of Paygistix Client return errors in the <TerminalResponse> attribute, not in <Message>. (In particular, since 4.9.180, these cases, and some others, were being incorrectly treated as successful approvals rather than errors.)
    • Add Avery 28878 Label Stock (AVS-28878) for 2″ x 3.5″ labels, 10 per page.
    • Add Local Network Usage Description to the application properties on macOS, so macOS will ask the user to allow Artisan to use the local network to access its database server and POS devices. Previously, it would have been disallowed by default, giving No Route To Host.
    • Improve BOGO Line Ordering: Put non-discounted lines before discounted lines. Combine compatible lines more consistently.
    • Add Item Search & Edit buttons to Purchase Request screen, and Item Edit button to Gift Registry Item screen. Add help text for Ctrl-F2 search. Disable Item Search buttons when Item field is disabled.
    • Fix a null pointer exception in Sale Screen trying to save changes to a recalled Store Credit Slip, in some cases.
    • Fix a rare null pointer exception during Scan Mode, if a refresh happens at the same time the screen is being closed.
    • Fix a null pointer exception in the Print Labels dialog if the Start or Initialize button was pressed too quickly. Now, those buttons are disabled until the dialog is completely initialized.
    • Fix some cases of fatal error, “Can’t load Sale Line Item record 0,” and some related problems operating on unexpectedly empty tables.
    • Fix occasional Unsupported Operation Exception loading combo box model.
    • Fix stuck help line text after switching screens.
    • Treat “%” (with no numbers) as zero percent, not NumberFormatException.
    • When saving a copy of a built-in report or form with “Save As,” set the Report Type to “Custom.” All non-built-in reports/forms must be Custom.

    4.9.182

    • Fix error opening Label Designer due to apparently missing Label Stock “GLS-2X2.6×16.xml”, which should have been spelled “GLS-2X2.6X16.xml”. (Since 4.9.177)

    4.9.181

    • Refine payment processing error classification further for Datacap Payment Processing Methods, especially TranCloud and NETePay, so known failures aren’t treated as unknown status, prompting unnecessarily with the Payment Status Menu (and vice versa).
    • Fix SAL-000 & SAL-000-RCPT Empty Day-End Reports to not prompt for Shift parameters during a full Day-End closing (with no sales). Fix slightly cut-off text in Empty Day-End Reports.
    • Report Designer Parameter Edit Window: Fix incorrect initial loading of the Don’t Prompt and No Listing checkboxes from saved values in some cases (when Don’t Prompt was set and No Listing was not set; a combination which is no longer possible to produce).

    4.9.180

    • Add additional Rounding Modes for Markup Formulas and Pricing Charts:
      • Round to Nearest Multiple
      • Round Up to Next Multiple [NEW]
      • Nearest Value Ending With a Specific Pattern
      • Next Higher Value Ending With a Specific Pattern [NEW]
    • Fix markup formula rounding calculations for ends-with 1.00 or any exact power of 10.
    • Improve payment processing error classification for Paygistix Client, so known failures aren’t treated as unknown status, prompting unnecessarily with the Payment Status Menu.
    • Fix missing Card Source in Payment Log entries in some cases for Paygistix Client and Datacap Payment Processing Methods.
    • Record the raw response in the Payment Log even when payment processing gets an exception trying to parse the response. Remove blank line from the end of Response Details in the Payment Log for manually verified transactions.
    • Include failed value string in log for parse errors during Import.
    • Fix extra diamonds in store info on SLIP-S and SLIP-8X7 invoice forms, between phone, email, and website, when only some are non-blank. Fix SLIP-T to show a tip line when requested (in the Slip Style).
    • Add a “No Signature” checkbox to Sales Slip Styles, which can be used to force Merchant Copies to never show a signature line. (Customer Copies never show a signature line.) This overrides any settings or policies controlled by your merchant account or payment processing software.
    • Add join() & join_non_blank() report formula functions. The first argument is a (possibly empty) delimiter string. Concatenates the remaining arguments, with the delimiter in between each one. Join_non_blank skips any blank or empty arguments, along with associated delimiters.

    4.9.177

    • Add an F1 help topic for the new (in 4.9.168) Payment Status Menu, as part of this new article:
      Resolving Payment Processing Communication Errors
    • When saving Configuration Settings, only try to get a Payment Processing API Token if the Payment Processing Profile was modified (and a new API Token is required). (Since 4.9.168)
    • Fix import of codes (Item Code, Vendor Code, etc) that contain invalid punctuation to check for legacy records (created in older versions of Artisan, before such punctuation was disallowed) that match the exact string, if we don’t find one using the cleaned-up code (with invalid punctuation removed). This only applies to codes used to reference other records indirectly, such as a Sale Line referencing an Item, or an Item referencing a Vendor.
    • Fix a Case Size error while creating new Item Records during Import when the Default Unit of Measure is “Case.”
    • Fix occasional “Illegal pop()” changing sales reps for a sale, due to a race condition with proxy loading while calling getShortName() from makeSalesRepString().
    • Fix ArrayIndexOutOfBoundsException from RecordTableHelper.shouldAutoAppend, in rare cases, while editing tables.
    • Fix fatal errors trying to start a Sale Screen or View Audit Log before a database is open.
    • Handle inventory reservations consistently for Incomplete orders.
    • Add GLS-2X2.6×16 Label Stock, “Generic 2 1/8″ x 2 5/8″ Hang Tag – 16 Labels per Page”.

    4.9.176

    • Fix a constraint violation exception using manual credit card entry when configured to prompt for manual card details (expiration date and cardholder name). (Since 4.9.175.)
    • Fix a null pointer exception invoking split() on validCategories from meetsMerchandiseRestrictions(), when using a payment type that’s restricted to non-taxable items only, but has never had any valid category restrictions set.

    4.9.175

    • Continue work on Payment Status & Communications Error Handling, especially in connection with Queries and with Credit Card Voids.
      • Fix some cases where Datacap Pay API queries were not attempted but should have been.
      • Reclassify some undocumented Datacap errors for correct handling:
        • 3329 Invalid CmdStatus From NETePay
        • 3405 Unable to Retrieve Parameters
      • Include void confirmations in the new task authorization for manually verifying payment processing status, and log them as “Verified Externally” rather than “Forced VOID.”
      • Allow voids to be retried.
      • Fix null pointer exception when payment transaction response is missing.
    • Add a Sale Screen Option to allow the Item Search button on the Sale Screen to be hidden: “Show Item Search Button on Sale Screen?”, which defaults to Yes. Either way, the F2 key still triggers the search.
    • BigCommerce:
      • Exclude fully and partially refunded orders from download, like we do for Shopify.
      • Fix a null pointer exception in the download task when an order payment method is of type “offline” or “custom” but doesn’t have a specific name set. (Just use “offline” or “custom.”)
      • Give a clean error message when an item upload fails because no (online) categories where given.
    • Fix PO forms, PO-101 & PO-102, to handle per-site account numbers, and to keep units with the same item code, but different special-order notes, separate. Update PO-102 to incorporate prior changes from PO-101.

    4.9.171

    • Datacap Payment Processing: Count “IP Pads Must Be Encrypted” as a Configuration Error rather than a Miscellaneous Error.
    • Add protections for a number of possible, not easy to reproduce, Null Pointer and Concurrent Modification Exceptions.

    4.9.170

    • Report Fixes & Improvements:
      • Fix a number of reports that show total discount amounts but failed to multiply them by sale line quantities: CUS-104, EMP-163, INV-124, MCH-149, MCH-196, MCH-197, SAL-101, SAL-412.
      • SAL-101, Sales By Item (Detail) Report: Fix error using Sort By Description (POS-14064). Sort variants in variant order within Base Product Description, Item Code, or Vendor P/N.
      • MCH-196, MCH-197, Vendor Performance Reports (by Category and by Style):
        • Fix the names of MCH-196 & MCH-197 in menus to be more consistent with the actual report names (“Vendor Performance” vs “Sell-Through”).
        • Fix to work in Sample Data.
        • Fix “% of Total” and Percent Margin computations in some cases.
        • Improve handling of items w/o Vendor P/N.
        • Fix minor formatting glitches.
        • Show “% of Total” as whole numbers for better readability.
    • Fine-tune payment processing error handling: identify more cases where the transaction processing is known to have not started, especially timeouts waiting for the user/customer (and, conversely, consider the state unknown for Engine Errors and Miscellaneous Errors).
    • Fine-tune the user interaction and wording for the Payment Status Menu and related dialogs introduced in 4.9.168. Add a task authorization setting (in Financial Task Settings) for manually verifying payment processing status using the Payment Status Menu.
    • Fix a Null Pointer Exception selecting a Terminal Device in the Payment Processing settings for Datacap processing methods (since 4.9.168).
    • Clip (very) long raw requests/responses to fit in the corresponding fields in the Payment Processing Log.
    • Fix an error creating new data (since 4.9.168).

    4.9.168

    • Make Payment Processing more resilient in the face of communication failures (such as lost responses due to momentary Internet outages):
      1. For Datacap solutions using Hosted mode (including all DC Direct), use their new Pay API to do queries after comm errors. TranCloud Classic with Cloud Service connections (the default) will still use “Lookup” to do queries. (Hosted mode setups are identified by having alphanumeric Merchant IDs, based on the Datacap Deployment ID.)
      2. In cases where queries are not available or didn’t go through, ask the user to check their merchant account portal for transaction status, prompting with a new Payment Status Menu listing different possible statuses, and prompt for the Approval Code if status is Approved.
      3. If status is still unknown, explain the implications better: tell the user to void the transaction externally if it actually went through.
    • To allow payments with Datacap processing methods to be uniquely identified via Pay API, we now append a unique number to the slip number and use it as the Payment ID and as the Datacap Invoice Number.
    • Enforce non-blank Merchant ID & Terminal ID when required. Hide Terminal ID when not used, including for Datacap Hosted mode.
    • Treat errors during Payment Voids as success when the specific error indicates that the payment has already been voided.
    • Improve error handling when Payment HTTP requests return unsuccessful HTTP Status Codes or HTML error messages.
    • Fix a Null Pointer Exception adding a credit card on file when configured for No Credit Cards.
    • Fix a Null Pointer Exception saving a modified Item Record after clearing the Item Code to trigger auto-assignment of a new code, when the Barcode Numbering Scheme is “Use Item Code” and the “Confirm Duplicate Codes” Item Screen Option is turned on.
    • Fix a Duplicate Key Constraint Violation saving a PO with an Item whose Vendor Product record (for the PO’s Vendor) was missing and whose qty was increased from a non-zero requested qty (thus splitting the line into two Stock Units, making it try to add the Vendor Product twice).
    • POS-14666: Fix an unsaved transient error in CategoryPriceLevel during init while updating permanent records, in rare cases of attempting to recreate missing CategoryPriceLevel records. This was preventing Artisan from starting up.
    • Enhance SAL-051, Sales Summary Report, Sales by Item section to honor Fill-In Description items by grouping different descriptions separately.
    • Add instructions for moving store credits between customers to the message that says, “All payments on invoices/orders and credit slip redemptions must be for the same customer.”

    4.9.165

    • Fix handling of receiving with Pending Stock Units (sold before rcvd) when an item’s case size has changed in between the original OOS sale and the receiving.
    • Artisan Task Manager: Fix a Null Pointer Exception after canceling a Remote Operation task before it starts receiving new messages.

    4.9.164

    • POS-10107: Add “Starting Label #” to Label Printing Dialog to print on partially used label sheets. (Starts with 1.)
    • POS-14646: Fix Sales & Tenders By Station in SAL-051, Sales Summary Report, to honor filter parameters like Include Unposted Transactions.
    • Fix SAL-101 to again work with Letter paper. It was accidentally changed to Legal size when a Discounts column was added in 4.9.151.
    • POS-14663: Disallow changing Sale Type after a Sale or Order has been Delivered.
    • Fix the 4.8.09 upgrade step to handle the case of a Shipping Item whose Category has a default (null) Tax Type, to use the inherited Tax Type instead of getting a Null Pointer Exception.

    4.9.163

    • Add a new parameter to SAL-412, Transaction Detail Report: “Kind of Sales to Include”, which can be one of:
      • ALL
      • Sales with any Discounted Items
      • Sales with any Returned Items
      • Sales with Negative Totals (Credits & Refunds)
    • POS-14662: Fix error deleting or turning inventory tracking off for an item with on-hand inventory that was originally requested for a different site (and other related scenarios), in cases involving stock-splitting.
    • Add Label Stock & Item Labels for SSL-404 1 1/8″ x 13/16″ and SSL-405 1 1/2″ x 1″ label rolls.
    • Speed up SAL-412, Transaction Detail, further, by adding an index on TRANLINE.TRANSACT.

    4.9.161

    • SAL-412 Transaction Detail Report: Major speed-up.
    • Add ULS-10433 1″ x 1″ 80-Label Sheets & Stock.
    • Add ULS-5959 1.5″ x 1″ 50-Label Sheets & Stock.

    4.9.160

    • Skip 4.9.151 upgrade step (which can be very slow) if it’s not needed. If it is done, show a message that it may take a long time.
    • PPL-402, Batch Reconciliation Report: Add a parameter to only show discrepancies.
    • SAL-412, Transaction Detail: Add Include Voids parameter (Include, Not Include, or Only).
    • Add ImportMode help topic (which jumps to a mid-page anchor).

    4.9.159

    • Add option to sort PO & Sale Lines by Available Qty.
    • Add new label stock and form for SSL-308 2 1/4″ X 1/2″ barbell label w/black marks and adhesive-free shank.
    • POS-14661 Fix UOM constraint violation during migration from 3.5. (Since 4.9.150)

    4.9.158

    • POS-14361: When a string typed into an Item field in a Sale or PO Screen doesn’t exactly match any of the code fields (Item Code, UPC, Mfr P/N, Vendor P/N, etc.), try a match on Description Contains.
    • (POS-14361, part 2): Add a Miscellaneous Program Options setting for Partial Match Results Mode, which controls what happens if there are no exact matches in an Item Lookup field but there are partial matches, either on the prefix of a code field or the new Description Contains. The default is to Show As Menu Buttons (unless there are more than 35 matches). It can also be set to Show As Searchable Record List (as in the previous behavior).
    • Fix problems merging Category Records in some cases, that could have caused loops in the category hierarchy or out-of-date Category Lists.
    • Fix Stack Overflow saving a Category Record with a pre-existing loop in its category hierarchy (from a bad merge).
    • Fix a Constraint Violation on SITEPROD with QTYRESERVE > QTYONHAND using “On-Hand” Location-Tracking Mode in some cases after changing from Full Location Tracking.

    4.9.156

    • POS-14659 Honor category restrictions for customer-based tax exemption types. Even though the customer’s Tax Type must be set to NT, when the exemption type has categories specified, the NT will only be used for those categories. (Otherwise, the default tax type will be used.)
    • Fix for loyalty clubs that require membership items to join: Since 4.9.144, membership item purchases were not adding customers to the club. To fix those customers, go to the Loyalty Club tab in their Customer Records and click Recalculate Points (or recalculate ALL customer points by disabling the club then re-enabling it, at a time when there won’t be any sales in progress).
    • Add “Exclude from Loyalty Clubs?” to Category Records. This overrides any Category exclusions in the Loyalty Club settings.
    • Fix error when a Last Name Sounds-Like search contains a comma (used to include a match on First Name), by using a Starts-With match for the First Name part and keeping the Last Name part a Sounds-Like match.

    4.9.154

    • Fix 4.9.150 upgrade step failure when IVAR table contains nulls.
    • Fix NonUniqueObjectException after using Edit List from the Tare Weight Unit of Measure (UOM) selection (in Category Record Screen), by removing the Edit List option that wasn’t supposed to be there.

    4.9.152

    • Fix incorrect recording of Out-Of-Stock (OOS) Corrections as a Correct Reserve and a pair of Auto-Corrects (since 4.9.141). These are repaired by the upgrade, but as Permanent OOS Corrections not Pending Stock Corrections, regardless of the current OOS Correction Type setting.
    • Fix Null Pointer Exception prompting for PO Discount via Numeric Keypad (when Touch Screen Mode is enabled w/o the full On-Screen Keyboard).
    • Fix Retail Price column in Receiving Log; it was always zero.
    • Add UPC (GTIN) to the Common Fields for the Variant Grid screen, for convenience. (It was already available through All Fields.)
    • Add Discount to SAL-101, Sales by Item (Detail) Report. Fine-tune formatting.
    • Accept “Yes” & “No” as aliases for “On” & “Off” when importing Inventory Tracking Mode in Item Records.
    • Add UPC (GTIN) to the Common Fields for the Variant Grid screen, for convenience. (It was already available through All Fields.)
    • Add ability to automatically convert units when inputting weights from integrated scales or the (category-based) Tare Weight dialog, by extending the Unit of Measure (UOM) table to include “Kind”, Conversion Factor, and Base Unit. “Kind” can be Count, Length, Weight, Time, Area, Volume, or Other. The input UOM is now specified in the Weight Scale Device Settings and Category Record Special Handling (for Tare Weight), and defaults to use UOM from Item (no conversion), as before.

      All Kinds except Count are now considered “Variable-Measure” units and may specify a Conversion Factor (multiplier) and Base Unit. For example, one Pound = 16 Ounces.


      During Receiving, don’t print (or ask to print) labels for items with Variable-Measure units.


      Increase maximum values for Item weights & lengths to 99,999.999.


    4.9.149

    • Fix report export to XLS & XLSX of numbers ending in “D” or “F” to be treated as text, so the “D” or “F” is not discarded.
    • Fix a race condition in the Report Viewer that could occasionally cause a fatal Null Pointer Exception.
    • ETC-063, Employee Time Clock Report: Add a new parameter to allow you to only show modified time clock records.
    • INV-053, Inventory Summary Report: Fix numeric overflow with large amounts.
    • INV-123, Inventory Item Listing: Fix cut off group & total counts.
    • Internet Store Interface: When using a non-Retail Internet Price Level, allow all Price-Level Pricing Models, not just Set Price Manually.
    • Enforce punctuation restrictions in Variant Attribute names.
    • Check Variant Template Attribute Name & Punctuation lengths before save, to prevent Constraint Violation Exception and, if in a new record, a subsequent fatal Illegal State Exception trying to delete a transient instance.
    • Increase Variant Preset list length from 200 to 2000 characters.
    • Make Mfr (Manufacturer), Mfr P/N, and Vendor P/N columns available on Sale Lines.
    • POS-14655: Fix so changes made in Edit List Dialogs such as reordering & renaming are correctly saved rather than discarded. Fix incomplete removal when current selection is removed via Edit List.
    • Fix Null Pointer when Site Product load fails.

    4.9.145

    • Fix Stack Overflow issuing Loyalty Reward Credits in some cases.
    • Fix IllegalStateException closing Day-End while it’s still preparing data.
    • POS-14654: Fix WooCommerce product uploads to preserve metadata from other plugins besides those we explicitly upload for SEO tags.
    • Update to Shopify API 2025-01 (no changes needed).

    4.9.144

    • Add Customer Contact Details to available columns for Store Credit List, including Home/Work/Mobile Phone, Address. Also now available on lists of sales and sales activity. Add a Customer Edit button to the Store Credit F4 detail screen; this and similar buttons on other screens can also now be triggered by a Ctrl-F4 shortcut key sequence.
    • Show customer’s Birth Month (by abbreviated name) on Sale Screen even when no Birth Day is set. (With both month & day, the numeric form is used, like: “2/13”.)
    • Earn Loyalty Points on the same sale a Customer becomes eligible due to purchasing an item that adds a required Customer Keyword or Customer Type (via Category Special Handling).
    • Fix interaction between the new auto-prompt-for-qty feature and the Sticky Quick-Pick category feature, by waiting for the Qty prompt to finish before returning to the Sticky Quick-Pick menu.
    • Fix some cases where Column Configuration changes were not saved, from screens with no previously saved (non-default) Column Configuration. (Since 4.9.142.)

    4.9.143

    • Add a touch-screen numeric keypad to numeric pop-up dialog prompts, such as sale line quantity, when in Touch-Screen Mode with On-Screen Keyboard disabled.
    • Fix TransientObjectException while opening newly-migrated data (upgrading from 3.5). (Since 4.9.113; previously fixed in 4.9.132, but broken again by 4.9.136 fix for sample data creation. New fix covers *both* cases.)
    • Fix ConcurrentModificationException while Receiving, in rare cases.
    • Fix a “tranline_check” constraint violation voiding a pre-existing Rental Reservation from 3.5.
    • Recognize some additional “Issuing State” IIN codes for Drivers Licenses from some CA provinces & US territories that were missing.
    • Fix Eltron Label Printer Initialization for Black-Mark Labels.

    4.9.142

    • Fix Lazy Initialization Exception on Site Product.
    • Fix null pointer from invalid license keys.
    • Fix unsortable Item Code column in Inventory Transfer screen. (Since 4.9.128.)
    • Make column order changes override width changes when multiple stations are changing the same column layout at (about) the same time.
    • Fix Stack Overflow using a kit item w/a loop in it.
    • Fix “Close session in progress” on error closing Day-End.
    • Fix a “Can’t load Sale Line Item record 1” fatal error in Sale Screen on mouse click when line item table is completely empty (probably from clicking too quickly while starting a new sale).
    • Recognize additional Shopify Access Token prefixes.
    • WooCommerce: Support In-Store Only by blanking Price.
    • Improve error messaging for Paygistix Client.
    • Fix INV-143, Inventory Change Report, to fully hide current inventory numbers when the “Display Current Inventory Columns?” parameter is No, instead of only hiding the column headers and totals.
    • In XLS(X) Report Export, treat long or zero-padded digit strings as text rather than numbers, to preserve them in Excel.

    4.9.141

    • Add a Sales Screen Option (under Cashier Prompting Options) to Auto-Prompt for Quantity for Variable-Measure Items (ounces, feet, etc., based on having a Unit Of Measure with Case Size = 1 that’s not Each). When set, manual quantity changes via Ctrl-Q or Keypad-* also present a pop-up dialog for the quantity instead of just moving to the Qty field. Don’t prompt for qty if qty was already entered from a connected scale. In general, move to next line after a connected scale qty is entered. In general, don’t combine lines for variable-measure items.
    • Report Engine: Add XLSX export option (in addition to XLS).
    • Improve ETC-063, Employee Time Clock Report: Sort by Full Name, rather than Short Name; add Total Hours for All Employees.
    • Fix a Lazy Initialization Exception during PO Import w/Full Location Tracking enabled.
    • Fix StringIndexOutOfBoundsException when a power-search pattern field has a pattern with two commas in a row.
    • Fix Data Session Already Closed when resetting search scheme while a record list screen is being closed.
    • Fix Steal Reserve calculation for sales w/multiple stock units for same item. Record any excess Steal Reserve as a new “Correct Reserve” rather than as OOS (Out Of Stock).
    • Fix query exception on “visibility” when importing PO w/non-existent ship-to site with full location-tracking enabled. Instead of a confusing exception, specifically fail (and skip) the offending PO Lines, with a message that the site was not found.
    • Don’t report host lookup errors during non-essential operations like silent auto-update checks & loading the menu of recent files. (This makes operation w/o an Internet connection smoother.)
    • Upgrade to Java 17.0.14.

    4.9.139

    • Support for Drivers License/ID scanning on Datalogic scanners.
    • Handle DL/ID scans more reliably on slow/busy computers.

    4.9.138

    • Add Item Screen Option, “Confirm Duplicate Codes (UPC, Vendor P/N, Mfr. P/N, Barcode)”, which warns of possible duplicate records when saving an Item Record.
    • FIN-208, Consignment Statement Ledger: Fix so Statement Posting Date is visible.
    • Fix a Null Pointer Exception (during save) when a customer was added to a sale with an outstanding balance (during Sample Data creation, for instance).
    • Fix failure to save report parameter defaults due to a (silent) Hibernate Exception, “illegally attempted to associate proxy… with two open Sessions”.
    • Fix error when changing reorder mode to “Per-Site (Same Levels)” with the choice to average the existing levels. (Since 4.0)

    4.9.136

    • Fix a number of Transient Object Exceptions, variously when creating new data, adding or removing a Site Record, and during Bulk Change Preferred Vendor.
    • Serial numbers are not fully implemented in Artisan 4.X, but there could be some serial numbers left over from migrated 3.5 data. Fix some basic errors using (existing) serial numbers:
      1) Error opening Item screen when some serial #s are blank.
      2) Error viewing Inventory Activity from a serial number record.
      3) Disallow adding new serial #s if serial number feature not enabled.
      4) Disallow adding/deleting/changing serial #s on limited edition items.
      5) Disallow changing limited edition size if serial numbers not enabled.
      6) Fix so new serial #s added are marked “Unused”, not “Not Tracked”.
      7) Hide non-serialized stock units from Serial #s list.
      8) Sort numeric serial #s numerically.
    • POS-14645: Multi-Site External Accounting: Add option to export each site’s data separately, or (as currently) all sites together in one export. Either way, cross-site sales or inventory use the accounts & class names from the profile configured for each site, and are included as split lines in exported transactions. The transactions as a whole are based on the sites where they were entered. Add a column to the “Station-less Sites” table in External Accounting Settings to select which main site its exports should be exported with (if not doing All Sites).
    • Clarify Inventory Counting dialogs for Accept Counts & Zero Uncounted. Always ignore the Counts Filter (counted, uncounted, exceptions only) for these actions, even if the user chooses Matching Items Only.

    4.9.134

    • Fix Stack Overflow in Bulk Change Internet Fields setting Online to No when multiple other fields were set to be updated.
    • Fix “join fetching” Semantic Exception in Day-End Reprint by Station caused by Lazy Initialization fixes in 4.9.128.

    4.9.133

    • Protect against a null pointer exception while appending records in scan mode, in very rare cases.
    • More fixes for null dates in date_between() report formula.
    • Fix TransientObjectException while opening newly-migrated data (upgrading from 3.5). (Since 4.9.113)

    4.9.131

    • Fix StaleObjectException processing scans (from F8 Scan Mode) for the same item during Physical Inventory Counting with Scan Mode open at the same time. Add the incremental counts together, instead.
    • Protect against possible IndexOutOfBoundsException during table navigation.

    4.9.130

    • Second attempt to fix occasional “Illegally Nested DataWorker” error putting bundle kit items on a sale, to fix an Array Index Out of Bounds caused by the first attempt. (Since 4.9.128)

    4.9.129

    • Fix failure to exit after running a new installer during auto-update. (Since 4.9.127)
    • Fix error making same change on 2 stations/screens.
    • Report Engine:
      • Make Report Date work in subreports (like MCH-054, Merchandise Performance Report).
      • Fix so Report Footer that spans the end of a page is moved to the next page instead of being cut off.

    4.9.128

    • Fix TransientObjectException saving a copied sale with a changed customer selected. (Since 4.9.91.)
    • Fix occasional “Illegally Nested DataWorker” error putting bundle kit items on a sale.
    • Prevent a ConcurrentModificationException fatal error in Screen Manager while processing deferred results in some unusual cases.
    • Protect against some rare Lazy Initialization Exceptions (proxy errors).
    • Fix problems using the Exception Qty column on an Inventory Counting screen when Tracking Inventory by Location.
    • Add Item Code & Item Shelf Loc to Per-Site Inventory Counting individual Count Screen when Tracking Inventory by Location.

    4.9.127

    • Fix an error in the ETC-063 Employee Time Clock Report, when an employee has multiple entries on the same day, with notes, that add up to more than 40 characters (including the commas and space added between the entries). (Single notes were handled correctly, no matter how long.)
    • Add “Run Time Clock Report” button to Time Clock Record screens (In/Out Board and View/Edit Time Clock Records).
    • Fix extra Employee Time Clock In/Out Board entries in rare cases. Specifically, when two employees’ entries have the exact same clock-in time (which generally can only happen if both were manually edited) and one of them is the latest entry for one of the employees (even if that employee is no longer active, and their entry is hidden).
    • POS-14636: Fix Null Pointer exception in Export Detailed Sales Transactions. (Since 4.8.20.)
    • POS-14637: Sale Screen: Keep Customer Type selected by membership items, or others with Category Special Handling that set Customer Type, even when a Customer is selected afterward.
    • Protect against unexpected Null Pointer Exception stopping table cell editing.
    • Fix missing Cash Drop button in sidebar, which is supposed to appear after the last cash drop reminder, when the cash in drawer limit has been exceeded. (Since 4.9.84)
    • Fix anomalies using indirect table columns like Referenced Slip Number (used on a Sale Line for a Deposit or Payment), which were incorrectly being named the same as other similar columns and combined with them. This also fixes a related “Illegal pop()” exception.
    • Fix another (rare) potential “Illegal pop()” putting an item on a sale that has a category-based pricing scheme and no quantity breaks set.

    4.9.126

    • Remote Operation:
      • Fix a proxy exception preparing a station remote.
      • Fix “Missing Data Scope” after turning Remote Operation off.
      • Reduce size of prepared remote data files to be about the size of a regular backup.
    • Fix so the Ctrl-Alt-C key sequence works on Mac computers on screens with both “Choose Customer” and “Cancel” buttons.
    • Explicitly resolve proxies for Variant Template & Base Product when opening an Item Record Screen, to fix a fatal error with Variant Items: “Illegal pop() with non-matching JdbcValuesSourceProcessingState” while Hibernate was trying to resolve the proxy for a call to baseProduct.isInternetStoreEnabled() from lockVariantFields().

    4.9.125

    • Don’t allow Refund to Credit Card while voiding a sale where any processed credit card tenders are negative, even when there are newly processed tenders. This restriction was previously enforced generally, but was missed in the case where any newly processed tenders were present and thus the Detached New Payments choice was presented.

    4.9.124

    • Fix a Constraint Violation from duplicate Vendor Products while saving a Purchase Order with Multi-Vendor support enabled, when a new Vendor Product is added manually for the same Vendor used in a PO after the same item was added to the PO and confirmed to be for a new alternate supplier of that item. The PO Save now reloads the latest Vendor Product records before seeing if it needs to add a new one.
    • Fix some anomalies when making changes to Vendor Products (per-vendor pricing and part numbers in the Other Vendors table in an Item Record), including failure to make another Vendor Product the Preferred one after the current one is deleted. Fix existing records to match the current Preferred Vendor for each Item Record.
    • Fix more Lazy Initialization Exceptions in PO screen.
    • Fix some race conditions between closing screens & table actions, which could result in an Illegal State Exception, “Session/EntityManager is closed”.
    • Report Engine: Treat nulls in date_between() as “no date”, rather than making the whole result null: Nulls in the range parameters indicate an “open-ended” range; returns false if 1st arg is null.

    4.9.122

    • POS-14478: Improve SAL-101, Sales by Item (Detail) Report:
      • Exclude Non-Sales transactions, like Return To Vendor & Internal Use.
      • Fix so main group headers & footers are shown w/Show Subtotals Only.
      • Make listing of Product Variants more concise by eliminating redundant header fields for base product group, and by treating single-variant groups as flat products (hiding the base product group header & footer).
      • Add a Parameter Values header to show all the non-default parameters.
      • Fix group by “Vendor + Category”.
    • POS-14634: Inventory Counting: Make “Run Count Report” more obvious, by (a) changing its button color on the Inventory Counting Screen to yellow, and (b) adding it to the Print menu from that screen.
    • Add missing “Print Inventory Tally Sheet” button to Print Menu for Inventory Counting when using Location Tracking.
    • Make progress pop-ups less aggressive. (Wait 1 second instead of 0.5. Don’t show progress for loading column layouts, saving column layout changes, or automatic program update checks.)

    4.9.121

    • Fix upgrade step 4.9.117 for Postgres versions < 13.
    • Prevent some Lazy Initialization Exceptions on PO, Vendor Invoice, and Sale Screens.
    • Fix empty Vendor Account Number table (not even column headers) due to a silent Transient Object Exception when opening the Account Numbers tab in a Vendor Record. This was happening when Vendor Account records have not yet been created for some sites, with Full Inventory Location Tracking mode enabled.

    4.9.120

    • POS-14614: Fix race condition between closing screens (especially PO & Sales) and data operations using private sessions (such as refreshing item pictures), that would sometimes cause a JDBC Exception, “You can’t operate on a closed Statement”. (Since 4.9.88)
    • Fix race condition between scanning and closing a record list screen that could sometimes cause a fatal error, “Data Session already closed when starting DataWorker for Loading Search Scheme…”
    • Fix an IllegalStateException, Session/EntityManager is closed, after final table actions (like Process or Accept), in some cases, such as Inventory Transfers & Inventory Counts. (Since 4.9.116)
    • Fix an Unsupported Operation Exception from attachStockUnitsToTranLine processing inventory changes for new stock units, in some cases (such as Receive w/o PO). (Since 4.9.110)
    • Protect against various other race conditions when closing screens.

    4.9.119

    • POS-14629: Fix a “stuck” Sale Screen (or other editable table screen), where the normal blank line at the bottom of the table (the “scratch record”) is missing after typing a value into the scratch record, then clicking on another table cell w/o pressing Enter (or another navigation key).

    4.9.118

    • Further refinements & fixes for ETC-063, Employee Time Clock Report.
    • POS-14542: In general, format the Parameter Values header sections consistently, for those reports that use it (now including the Report Templates), currently: ETC-063, INV-053, MCH-149, PUR-201, TEMPLATE-L & TEMPLATE-P.
    • Report Engine: Add unique_agg() database aggregate: if all non-null values are the same string, returns that string, else blank (or null if no non-null values).
    • Fix the header for the “Note” column in View/Edit Time Clock Records to say “Note” again, rather than “Custom 1” (since 4.9.104).

    4.9.116_01

    • POS-14627 Fix for delayed actions in record tables (since 4.9.115). For example, when editing a record (F4), then switching back to the table and trying to do another F4 edit (or any other action), the subsequent action(s) were being deferred until the edit screen was closed.
    • POS-14628 Fix an error running the Repair Quantities tool when a Pending Stock Correction refers to an already-permanent OOS Correction. (Repair these in general, during the 4.9.116 upgrade, and as they are resolved.)
    • Fix another null pointer exception adding customer types (since 4.9.113).
    • Fix a “transact_check” error in some cases when starting a Day-End, when preparing transactions for posting (finalizing costs, etc.), if an item used a quantity-break pricing scheme (or chart) and that scheme changed between saving the sale and running Day-End.
    • Fix interactions between Cash Discounts (Payment-Type Pricing) and Entire-Sale Discounts.
    • Don’t prompt to confirm leaving discount zero when a percentage-based entire-sale discount is put on the sale before any merchandise.
    • Expand A/R Repair to include pending orders/layaways.
    • Include lines with missing Stock Units in Inventory Activity Detail, so the quantities add up correctly.
    • Add indexes to speed up Audit Log searches and Employee Time Clock reports.
    • Replace the ETC-061 & ETC-062 Employee Time Clock Detail & Summary Report with a combined and sped up ETC-063 Employee Time Clock Report, including a new option to show Daily Totals (per employee) only.
    • Report Engine: Support “compound joins”, which are joins to a same target (“to”) table that relate *multiple* fields to each other (currently, only combined by “and”, not “or”). This is indicated in the Join Table by having multiple entries with columns from the same table on the “to” side. Entries with the same “to” table are now combined into single joins with multiple conditions in the “on” clause.
    • Add a new Item Lookup Mode (in Miscellaneous Program Options) for “Repeat Last Choice (when same code scanned/typed)”, which replaces the current Full Lookup mode for existing Options Profiles. The new Full Lookup mode, now the default for new data and new profiles, does not have the Repeat Last Choice behavior; instead, it always prompts when there are multiple matches. Pressing the spacebar now clears the remembered selection for Repeat Last Choice mode.

    4.9.115

    • Add a “Recalculate Points” button to the Customer Record Screen “Loyalty Clubs” tab, to backdate membership to a given date, and recompute the total points for each of the customer’s clubs accordingly.
      In general, when backdating or resetting points, default date to the beginning of the year, rather than the current date. Don’t set a customer’s membership date earlier than it’s Customer Since date (or the earliest actual sale date).
    • Fix so other stations exit when one station is waiting for exclusive access in order to perform an upgrade, like they do for other exclusive operations.
    • Fix a “Can’t save record that’s not in session” error with quick, repeated use of the “+”/”-” buttons in Inventory Counting, Transfer, and similar screens.
    • Fix Transient Object Exception in CategoryPriceLevel.baseCategory, when creating new data. (Since 4.9.113)
    • Fix an intermittent hang with a grey screen on macOS when switching to, or starting the program in, full-screen mode.
    • Fix size of full-screen window on macOS to leave room for menu bar.
    • Let the ARTISAN_POS_LOG_LEVEL environment variable override the logging level (default: INFO) set in the log4j2 properties file. Move the GUI init logging to TRACE level so it must be explicitly enabled if needed.

    4.9.114

    • Finish fix (from 4.9.110) for a “value too long for type character varying(15)” when settling a credit card batch with Paygistix Client in some cases.
    • Fix to use the Batch ID rather than the Auth Code in the batch summary when settling a credit card batch with Paygistix Client & First Data.
    • Reduce frequency of proxy loads somewhat, to help improve performance in some cases.
    • Include Java Vendor Name in Help => About.

    4.9.113

    • Improve recovery from database server communication errors, such as might happen if the server computer goes to sleep (not recommended) or a station loses its network access. In particular, respond to UI events (user interaction) while logging errors.
    • Fix Transient Object Exception adding a new Customer Type.
    • Show More Prices in Category Record Screen for new categories.
    • Fix a “Value Too Long” error in rare cases when a Column Layout Spec exceeds 32,600 characters; remove older column sets to make it fit.

    4.9.112

    • Implement basic 3rd-party billing (when licensed and enabled): The customer for a sale must have a Bill-To Customer selected in their own customer record. That customer will then be set as the Bill-To Customer for the sale. Any tender amount put on account will be charged to the Bill-To Customer’s account instead of the sale customer. Full 3rd-party billing (including billing statements) to come in a later release.
    • Add a Sale Screen Option, “Offer to Apply Available Store Credit when Finalizing Sale”, under “Cashier Prompting Options”. This allows that prompt added in 4.9 to be disabled. Default is Yes.
    • Video Pole Display Fixes:
      • Fix so sale quantity changes are reflected in pole display output.
      • Fix overlapped layout when both a logo & banner message are present.
    • Label Designer: Allow new label stocks to be added in the field by adding their file names to an additional “index” file in the “Labels” subfolder of the user’s application-specific Documents folder (“Documents/Artisan/Labels”).
    • Fix a rare null pointer exception when saving column specs when no database is open.
    • Fix Stale Object Exception, “secondary record for save not in session”, and other errors that would in some cases occur after choosing which set of values to keep when saving a record that was modified by another user or screen, most often when choosing “Merged Values”.

    4.9.111

    • Fix “refreshRecord cannot be used with new unsaved records” when refreshing a new record after an indirect table edit. (Since 4.9.110.)
    • Fix to validate fields in embedded configuration tables and other secondary records (those not directly attached to screen form fields) before proceeding with Save. (Broken in 4.8.69.)
    • (Additional fix for WooCommerce 502 Bad Gateway in some cases.)

    4.9.110

    • External Accounting Export: Fix a problem with unbalanced exports when some transactions initially had credit card processing errors (which result in multiple CC Log entries for a single tender). This was a side effect of the change to group deposits by Card-On-File “token scope”. (Since 4.9.47, with some related cases fixed in 4.9.51.)
    • Fix ConstraintViolation on size of “batchID” in PaymentLog (0 to 15), when settling batches with PaygistiX Client since Sep 1, 2024, by increasing the max size to 36, and, in general, clipping string values from payment results to their max sizes in the Payment Log fields.
    • Fix an “object references an unsaved transient instance” error receiving w/o PO with stock corrections pending for those item(s).
    • Refresh unattached secondary records during save, rather than failing with an exception (“Secondary record for save is not in session”).
    • Lock Item Records when saving Vendor Invoice.
    • Expand bundle kits added to PO from variants.
    • WooCommerce:
      • Fix a WooCommerce 502 Bad Gateway error (from Cloudflare) when downloading orders from more than 300 customers at once. In general, increase # of results per page from default of 10 to the max of 100.
      • Don’t download customer ID 0 (from guest orders).

    4.9.109

    • WooCommerce fixes:
      • Fix duplicate product error (“The SKU (xxx) you are trying to insert is already under processing”) uploading an item with the same SKU as a Woo product in the trash, by deleting the trash copy.
      • Delete new images if a category or product upload fails (for any reason), so duplicates don’t build up in the media library.
    • Fix macOS installer to NOT restore all minimized windows.
    • Sort Exclusive Access Waiting List by Station Number.

    4.9.108

    • POS-14591: Allow a Standalone (External) Payment Processing Profile to be attached to a Custom Payment Type that can be manually picked as a payment type for a sale instead of the regular configured payment processing method.
    • Make Ctrl-I Tender Info work even for tenders that don’t have any detail info fields to show.
    • Update to Shopify API 2024-10 (no changes needed).
    • Fix to not recompute sale prices when posting consignment statements.
    • Fix inconsistencies in how sales and units are counted for Customer Sales Activity Summaries when using Manage Sales => Reset YTD Sales or Advanced Database Maintenance => Recalculate Activity Summaries. (The incremental calculation from new sales was correct.)
    • Don’t check for Smart Refunds on Voided Sales.
    • When enabling the Internet Store Interface, in addition to offering to create an Internet Sales Site, offer to create an Internet Store Station to use when processing order downloads. This station defaults to its own “Internet Store” profiles, for Device, Options, and Payment Processing Settings.
    • Fix to sync changes in Catalog Order from Base Products to its Variant Items.
    • Fix number format error “Decimal point not allowed” that was incorrectly saying “Minus not allowed”.
    • Fix a Null Pointer Exception apply credits or making payments, in some cases.
    • Fix a rare null pointer exception deleting an Advanced Filter in a Power Search, under some conditions.
    • Fix “Restore Configuration” w/Loyalty Credit Rewards.

    4.9.106

    • POS-14611: Add Notification of Loyalty Credit Rewards.

    4.9.105

    • POS-14615: Fix the SAL-101, Sales by Item (Detail), report to handle sales of kits and kit components correctly, based on the “Use Kits Instead of Components” parameter.
    • Internet Store Interface: Allow punctuation in web order “numbers”, such as dashes in eBay order numbers. Don’t put the “WEB” prefix on customer IDs or order numbers that include non-digits.
    • Fix an “Unknown wrap conversion requested: java.lang.Integer to java.lang.String” saving a modified recalled sale after changing the customer on the sale. (Since 4.9.91)
    • Fix Avery customer mailing labels (CUST-MAIL-516n) to honor sort order instead of always sorting by Last Name, First Name, Business Name. Fix 2″ X 1″ mailing labels (CUST-MAIL-2X1) to honor sort order instead of being unsorted.

    4.9.104

    • Fix a Null Pointer Exception copying a Variant Item (Since 4.8.20).
    • Fix a Null Pointer Exception after selecting an invalid Payment Type in the Sale Screen (such as a Credit Card for more than the total due).
    • Fix a Null Pointer Exception processing a “Smart” Credit Card Refund w/a Payment Processing Method that is *not* configured for Surcharges, when the sale contains at least one “Restricted” line (such as an entire-sale discount or a GC). (Since 4.8.77)
    • Fix a problem where changes to mark Payment Log entries as “Replaced” weren’t being saved.
    • Add a “Retry?” field to Payment Log records, indicating that the user requested a retry of a failed transaction.
    • Log (in CC Log), and report, exceptions during Payment Processing, even if they occur in the very last stages of result processing.
    • Fix to set the Source of a copied report or form to be “Custom”, even if copied from a Standard or Extended one.
    • Allow Variants to be (Bundle or Assembly) Kits.
    • Implement center & right alignment for barcodes on label printers.
    • Implement Line Drawing on Label Printers.
    • Add a Report Formula Function to get the names of Custom Fields:
      custom_field_name(recordTypeName, fieldNumber [, categoryID])
      where recordTypeName is “Item”, “Customer”, “Vendor”, or “Transact”. The optional categoryID (a record ID string from ITEM.CATEGORY) can be used to get a more specific name for an Item custom field, based on its Category.
    • Improvements for ITEM-SSL-900 (and ITEM-SSL-900-BM) clothing tag labels:
      • Show values & actual names for Attributes 1 & 2 (rather than assuming “Size” & “Color”), or custom field names & values for items that don’t use variants.
      • Use a centered barcode, with room for a long alphanumeric code (when using Item Code).
      • Add lines above and below price, and before attributes if there are any.
      • Allow long store names to wrap to a second line.
      • Other formatting refinements.
    • Fix ITEM-SSL-900-BM to use the SSL-900BM stock, not the normal SSL-900.
    • Add SSL-2X0.5 label stock for 2″ X 0.5″ label.

    4.9.100

    • Fix a “stkunit_check” constraint violation, with inventory location-tracking enabled, voiding sales that contained Out-Of-Stock items, in some cases. (Since 4.9.95)

    4.9.99

    • Don’t allow PO Smart Start range > 365 days. Prevents Constraint Violation.
    • Fix a possible case of “Can’t operate on a closed statement” when closing a Sale Screen, due to a race with the reference table refresh, by deferring the close of the reference session until after the screen is fully closed (using the new finalCallback mechanism).

    4.9.98

    • Clear pending exclusive access request if requesting station no longer running.
    • Offer to renumber/rename existing Vendors and/or Categories when changing corresponding Inventory Numbering Scheme details.
    • Fix dashes in Internet order downloads. (Since 4.9.89)
    • Fix Missing “rtr” in A/R Repair Tool when “All Customers” selected. (Since 4.9.92)
    • Add Menu Order & “Active” to the default columns for User Record lists.
    • Report Engine: Always list multiple-choice parameters in the Parameter Values header (if used).

    4.9.96

    • Fix a “transact_check” constraint violation during a Day-End or Shift Closing when a Category change from Sales to Non-Sales requires a Sales Tax Adjustment.
    • POS-14607: Also void immediate or permanent Out-of-Stock Corrections when the original Out Of Stock sale or sale line is voided.

    4.9.95

    • POS-14606: Fix to once again delete Pending Stock Corrections when the original Out Of Stock sale or sale line is voided. (Since 4.9.31)
    • Accounts Receivable (A/R): Don’t charge “catch-up” finance charges for prior periods, even if no F/C transactions were recorded. Use the previous statement’s closing date (if any) as the starting point for new F/C computations. In general, change the displayed Statement Starting Date to be the day after the last Closing Date, rather than overlapping the Closing. Apply F/C in Sale Date order within the same F/C Due Date.
    • POS-14605: A/R Statement Options: Allow all 3 types of detail itemization to be configured: Charges (already available), Payments, and Finance Charges (F/C).
    • More improvements for AR-101, A/R Statement Form: Show summary amounts as all positive, but marked with plus & minus signs to show how they affect the balance. Various clarifications for Credits Redeemed (formerly, “Credits Used”). Fine-tune fonts and spacing; make sure there’s enough room for long customer names.
    • Fix FIN-215, A/R Statement Ledger, to sort by Closing Date (descending), then Customer Name, rather than by Start Date.
    • POS-14604: Skip deleted records w/Update Mode import; only undelete records in Full Mode imports.

    4.9.92

    • Add FIN-215, A/R Statement Ledger. Reorganize A/R & Consignment menus for consistency.
    • Add FIN-321, Customer Purchases & Payments Audit Report. This is an “Extended” report (not on the main menus), which you can find in Search All Reports (or All Accounting Reports).
    • Refine FIN-168, Store Credit History: Group by Customer when no slip # or customer specified. Add help text to parameters. Fix wrapping issue in “Running Balance” label.
    • SAL-074 report: Sort layaway/order history payments by date.
    • Fix AR-101 Statement Form for long customer names in cross-customer transactions. (Other A/R Statement fine-tuning was included in 4.9.88.)
    • Fix excess Finance Charges in some cases. (Other F/C fixes were included in 4.9.88.)
    • POS-14602: Don’t allow saving a sale with payments on a different customer’s sales or orders, or store credit redemptions for multiple customers’ credits, since these cases are not (yet) handled correctly by A/R statements.
    • Add “[SSL]” to the end of the database name in Open Recent items for SSL connections.

    4.9.90

    • POS-14600: Fix Stack Overflow changing customer type on a sale in some cases.
    • POS-14598: Fix excess on-order qty transfer w/partial cross-site receiving. (Since 4.9.79.)
    • Fix Sales Summary Reports, SAL-051 & SAL-057, in the Receipts Summary section, to fix missing subtotal amounts, like NET A/R, when a small posting or date range includes sale lines but no tenders, or vice versa.
    • Fix a problem where attaching a Detached Payment from the Payment Log Screen incorrectly attempted to delete (and thus void) the payment after attaching it to a sale. When attaching to an existing sale, open for modification first.
    • POS-14599: Fix a problem where changes to Total QOH from the Item Record Screen were discarded if the Save button was selected w/o moving off the field, with Location-Tracking and the Item Screen Option to Show Per-Site QOH on the Basic Info tab OFF (so that Qty On Hand field was *Total* QOH).
    • Internet Store Interface: Fix order downloads of fee items (price with no SKU) to use “-” for description if one is not provided. The blank description was causing a “tranline_check” constraint violation. Get fee item descriptions from web order for BigCommerce and WooCommerce, like we do for Shopify.
    • Inventory Tracking is not supported for Consignment Fill-In-Price Items. Fix cases where older data could violate that (by turning off tracking).
    • Fix StaleStateException changing Label Properties from PrintLabelsDialog when someone else has changed them as well.
    • Remote Operation: Fix failure to transmit remote SALEQTY updates.
    • Improve performance in a number of areas:
      • Line numbering (for sales lines and other lists).
      • Repair Quantity Tool.
      • 3.5 Data Migration, especially with the Purge option.
      • Speed up loading of the list of posting dates for Reprint/Unpost Day-End or Shift Closing.
    • Update root CA certificate for Cloud 1.0 SSL connections.

    4.9.88

    • POS-14575: Fix a hang while a backup is running on another station. This would happen either on exit or after at most 3 minutes (when a certain background task happened to run). Artisan would then lock up until the backup completed, but most people gave up before then. We now skip that task if the lock cannot be obtained immediately (deferring it until the next time it runs and the lock can be obtained). (Since 4.9)
    • POS-14596 Fix a hang when applying a Variant Template to an Item and taking over existing items as Variants (due to a deadlock between the corresponding confirmation dialog and some synchronous Pricing Scheme loading introduced by an earlier attempt to fix Lazy Initialization Exceptions). Back out the earlier changes, now that 4.9.88 has a more general fix for Lazy Initialization Exceptions.
    • POS-14595: Protect against various Lazy Initialization Exceptions, especially when exporting POs and using the Merge button from an Item Record Screen.
    • General fix for Non-Unique Object Exception in refreshRecord.
    • Fix a Class Cast Exception (Timestamp vs ImmutableDate) running A/R statements for a closing date less than or equal to a customer’s last statement date. (Since 4.8.136)
    • POS-14590: Fix to recognize Customer Discount as a special case of Fill-In Discount Coupon, and not prompt for confirmation.
    • Remove an incorrect message that “Integrated Payment Processing is not enabled” during Shift-Close or Day-End when *not* configured to settle credit card batches.
    • When using multiple payment processing profiles on a station, allow Card on File operations if *any* profile supports it.
    • On upgrade (and 3.5 migration), preserve but deselect Payment Processing Profiles for no-longer-support methods (such as non-EMV gateways), switching corresponding stations to a new profile (starting with “X”) with Credit Card Processing disabled. During upgrade, notify user only once for each processing method, even if used on multiple stations.
    • Fix so migration from 3.5 sets a sale’s Base Customer Type equal to its migrated Customer Type, so it doesn’t look like the sale used a Payment-Type Discount (which feature was added in 4.8). Don’t check for new Payment-Type Discounts when recalling a sale; only when the Customer Type or a related field is modified. (Fix sales from earlier migrations.)
    • Fix upgrade from versions older than 4.7.13.

    4.9.86

    • Fix hang on Force Deliver (marking an order Delivered when it’s in the Waiting state).

    4.9.85

    • POS-13623: Add support for offline credit card processing (“Store & Forward”) on Datacap payment processing solutions that support it: DC Direct 1.22 or later on PAX “A” series terminals, NETePayTranCloud with Direct Communication (“@” in Device ID).

      The following credit card processing operations (three new, plus the existing Settle Credit Card Batch), each with their own new security settings under “Financial Tasks”, have been moved under the Payment Processing menu in Tools or Accounting:

      • Offline Card Processing Mode (Force Offline, Try Online First, or Online Only)
      • Offline Card Summary
      • Forward Offline Credit Cards (to process online)
      • Settle Credit Card Batch
    • Fix so that when prompting for Vendor Invoice during Receiving, the received stock units are correctly associated with the vendor invoice.

    4.9.83

    • POS-14560: Fix a loop in Payment Processing when adding a Card On File and the Payment Processing Setting to “Use Zero Dollar Auth” is set to No, which resulted in a return to an empty prompting screen, or returning to the first device prompt, after the Add-Card (Get Token) transaction actually succeeded. (Caused by a change in 4.9.51.) That has now been fixed, but it’s generally recommended to turn on “Use Zero Dollar Auth” anyway, if your processor supports it (as most do these days); it’s less complicated, and doesn’t show as a (temporary) 1.00 hold on your customers’ accounts.
    • Fix a NumberFormatException renumbering barcodes after a change in the Barcode Numbering Format, when an existing barcode is all digits but greater than 2147483647 (after removing leading zeros).
    • Fix a NullPointerException receiving w/o PO when using a Vendor Invoice (when configured to prompt for Vendor Invoice during Receiving).
    • Fix a NullPointerException changing Default Item Custom Field Names when a New Item Record Screen is open with no Category selected. (Since 4.9.51)

    4.9.79

    • Add View/Edit PO (Alt-F4) to Inventory Activity Detail.
    • POS-14588: Prevent a possible NonUniqueObjectException on VendorProduct while saving a PO with changed Vendor Product details (in rare cases).
    • Fix a problem with Per-Site Reorder Levels when used with Full Location-Tracking cross-site orders (Request Site != Ship-To Site), by maintaining the on-order quantity at the request site rather than the ship-to site, only transferring it to the ship-to site during Receiving. That way, reorder level availability computations account for the quantity expected to eventually reach the request site. (Since 4.2.02)

    4.9.78

    • POS-14586: Add a new Category Special Handling type: “Tare Weight”, to prompt for Starting and Ending Weight and set the sale line quantity to the absolute difference between the two weights. Useful for products priced by weight that are weighed inside a vehicle or other heavy container.
    • POS-14569: Add a Category Special Handling type for Check Cashing Fee, with a corresponding percentage-based or flat fee in the Item Record. When sold, the cashier is prompted for the Check Amount, and the fee is calculated and placed on the sale, with a note line showing the Check Amount. The check itself must still be entered as a Tender on the Payment Screen, which can be configured to prompt for Check Number and other details.
    • POS-14584: Automatically apply an Out-Of-Stock (OOS) Correction before a Force Deliver (marking a sale Delivered when some merchandise has not been ordered and marked as Received) if there is insufficient unreserved on-hand inventory to account for it.
    • Fix some navigation issues using store coupons and some unintended editable fields in the “COUPON” Item Record, caused by the Fill-in Discount changes in 4.9.07.
    • Fix mnemonics & default button focus in input dialogs.
    • Fix quantities on category-based surcharge lines (like bottle deposits) when generated from kit component lines (or quantity variants like 6-packs) or when used with smart returns.
    • Artisan Task Manager:
      • Increase length of Artisan Task Manager task names from 16 to 40.
      • When starting tasks from the command line (shortcut), fail cleanly if required fields are missing, as is done for manually-run tasks.

    4.9.74

    • BigCommerce:
      • Detect identical images during upload to reduce duplicates.
      • Fix upload errors with images > 1MB that sometimes resulted in duplicate images. Large images are now skipped w/o affecting the rest of the upload.
      • You must now configure “WebDAV Username” & “WebDAV Password” for BigCommerce Upload tasks, which you can find in the BigCommerce control panel under Settings => Advanced => File access (WebDAV).
    • (4.9) Fix import matching on Vendor P/N when no SKU.
    • Improve handling of Shift Closings when the maximum number of shifts has been reached (at a particular station), including preventing new sales, and increase the maximum to 15. Change the default columns for Shift Closings lists (for reprint and unpost) to use the full Date/Time format for Start & End. (Day-End Closings still default to Date-only.)
    • POS-14571: Add an option for Loyalty Clubs to issue Store Credit as rewards, rather than Coupons. One advantage of Store Credits is that they’re listed at the top of the Sale Screen when a customer is selected, and is automatically prompted to apply when finalized.
    • Fix FIN-168, Store Credit History, to treat “Customer ID” parameter as a Customer ID, not as a Customer *Record* ID.

    4.9.71

    • Don’t generate late fees on A/R statements if none are configured.
    • POS-14576: Reject imports of negative numbers into non-negative fields such as QOH and decimal fractions in integer fields.
    • Allow (Menu) Color fields to be imported (by name).
    • SSL-305 Barbell Label Stock: Fix vertical spacing (page height).

    4.9.70

    • BigCommerce: Allow Related Product lists w/spaces.
    • You can now use Alt-click on a record table column header to remove that column from the current sort order.
    • Fix so imported references to other records (such as a Vendor Code during an Item import, or a Shipping Method name during an online store order import) are formatted to match punctuation, case, and length restrictions *before* looking for existing records, so subsequent imports match any previously created records rather than attempting to insert a new one with a duplicate name.
    • FIN-214, A/R Aging Report:
      • Add Sort By options including Business Name, Last & First Name, Customer ID, and Balance Due.
      • Fix so balances are listed under appropriate aging buckets instead of all under “Current”. (Since 4.9.42)

    4.9.69

    • POS-14566: Fix cases where specific interactions between multiple items in an inventory transfer between sites that include stock units from the same Purchase Order, with specific combinations of whole and partial quantities (resulting in stock unit splitting), could result in some units’ location changes not being saved, requiring an Item QOH Repair. The exact circumstances where this could occur were very hard to predict or describe.
    • Enhance “File -> Open Recent”: Show server name & port if not default;
      increase # of remembered entries to 30; remove (new) duplicates.
    • Fix loading a station remote on a new machine.

    4.9.66

    • Fix upgrade step 4.9.64 to work in Sample Data.
    • Speed up 4.9.24 upgrade step w/many A/R statements.
    • Fix Illegally Nested Data Worker in rare cases.

    4.9.65

    • Fix silent NonUniqueObjectException after returning from an indirect edit screen, such as Alt-F4 Edit PO from a Receiving screen.
    • Fix upgrades from versions before 4.8.03.
    • POS-14572: Fix so sales of Registry items correctly update the corresponding Qty Received in the Item list for the corresponding Registry.
    • POS-14574: Extend the “Print Labels When Sold” feature, which prints item labels when certain items are sold, to print for not-yet-delivered layaway and orders, not just Normal Sales (but not for voids or holds).

    4.9.62

    • POS-14573: Fix the Image 5 import button on the Item Record Screen imports into Image 4 instead. (Export as well.)
    • Fix Inventory Transfer Manifest in Sample Data.
    • POS-14556: Change to preserve the Customer Type (Price Level) for a sale when a customer is selected by Payment Processing, under some conditions:
      • Silently change to the new type if the original Customer Type was the Default Customer Type & the Total Amount wouldn’t change.
      • Silently preserve the original type if the new type is the Default Customer Type.
      • Otherwise, ask the clerk whether to make the change (default = No).
    • POS-14524: INV-053: Fixed the Totals Only option and added parameter values header for the Inventory Summary Report.

    4.9.60

    • Fix Closed ResultSet upgrading remotes w/applied changes.
    • Use port 9100 for NETePay EBT & Gift Card.

    4.9.59

    • Require Discount Type for percentage coupons.
    • POS-14545: Add a Barcode Settings option to accept any existing Customer ID as a Customer ID scan (as opposed to an Item scan). This can be used in any combination with the other Customer ID scan options.
    • Reduce # of idle database connections kept open.
    • Fix upgrades from versions before 4.9.19.

    4.9.57

    • Protect against possible null pointer scanning/swiping during user selection.
    • Protect against a closed database session when looking for detatched payments while starting a Sale Screen. (Might happen if a new Sale Screen is closed very quickly).
    • Support A/R Balance Repair for One Customer
    • Fix so a database password error during a restore from backup automatically runs Server Setup, like it does when creating or connecting to existing data. (Artisan used to do this, before 4.5.21).
    • Allow image import to use “file://” URL.

    4.9.55

    • Fix LazyInitializationException loading mapped collections, such as Item Price Levels, in some rare cases, possibly including changing loyalty club points manually.
    • Fix A/R statement printing in Sample Data.
    • Fix a Null Pointer Exception generating an A/R statement for a customer with no previous A/R statements.
    • POS-14561: Fix a ConcurrentModificationException closing (discarding remaining items for) a PO. (Since 4.9.53)

    4.9.54

    • PPL-402: Payment Processing Reconciliation:
      • Identify Tender Adjustments as “<ADJUSTMENT>”.
      • Fix to mark matches “OK” even if PPID is null.
    • Paygistix Client: Fix null pointer if Add Card On File returns w/o a token (w/o indicating an error). This was seen to happen when the user did not provide a Zip Code in the Paygistix Client dialog.
    • POS-14558: Fix so a payment applied on a recalled, but not modified, order itself opens a new sale screen to apply the payment (as it used to, before 4.9.35), but still gives an error message if the recalled sale was modified.
    • Fix so Tender Info for a tender previously processed with integrated payment processing is not displayed as “External Credit Card Info” when the *current* processing method is External (Standalone).
    • Fix to exclude voided sales from the Day-End calculation of total cash (when not using the Cash Counter) for the “Cash Deposit” activity entry and the External Accounting export of “Cash On Hand”.
    • POS-14559: Fix excess “Deposits Applied” in the following reports and exports for orders that are overpaid, which resulted in out-of-balance accounting transactions (Total Receipts != Total Tenders):
      • SAL-051 – Sales Summary
      • SAL-057 – Sales Summary for Receipt Printer
      • External Accounting Export
    • Fix SAL-051, Sales Summary Report, to hide the “OWNED SALES” breakdown line unless there are also consignment sales (like SAL-057 already does).
    • Fix 4.4.04, 4.9.21 upgrade steps in Sample Data.

    4.9.53

    • Possible fix for a failure to save loyalty club points changed manually in a Customer Record.
    • POS-14553: Fix LazyInitializationException when using Buy Again from the Customer Purchase History (Shift-F4) in Sale Screen, if the item is Out Of Stock and you choose Return from the OOS menu.
    • Don’t show the Auto-Billing Details box on the F4 Detail screen for Purchase Activity by Line Item. For Purchase Activity by Transaction, we already hide it unless the transaction is an Auto-Billing Template. (Since 4.6.13.)
    • POS-14555: Fix “Is One Of” searches on Custom Fields and other long text fields.
    • Fix for Customer Record searches by Last Name “Is One Of” to interpret commas as a list of values rather than Last Name, First Name.
    • POS-14552: Fix STKUNIT_CHECK Constraint Violation from failure to reset SITE to REQSITE when a cross-site PO is closed and the non-received stock units are “discarded” (set to zero), or when inventory tracking is turned off (and location-tracking is enabled).

    4.9.52

    • Fix upgrades from versions before 4.8.10.

    4.9.51

    • Enhancements to built-in Search Schemes for Reports and Forms: Make Title Contains the default. Remove Title Starts With. Add search by Description Contains.
    • Confirm before settling credit card batch from menu.
    • POS-12936: Fine-tune Smart Returns: when a slip number is entered, use lines from that sale in order by the lowest to highest net amount (unit price after discounts). Fix so multiple returns from the same slip number on the same new sale use different lines from the original sale (or fails if no more are available).
    • POS-14535: Add F7, “Run Count Report”, to the Inventory Count Screen.
    • POS-14546: Fix to update Item Record Screen labels for custom fields when changed in Item Screen Options. (Category-specific names were already updated.)
    • In general, use Custom Field Names (for Customers, Sales, Vendors, and Item field names set in Misc Program Options) instead of just “Custom Field nn” in Search & Filter Field pull-downs. (They were already used in column headers.)
    • POS-14533: Fix so Virtual Columns with no custom queries defined are (again) excluded from Search Field choices. (Since 4.9)
    • POS-14551: Disallow “Other Addresses” from the Customer Record screen for new, unsaved customer records, since it requires a saved customer record.
    • External Accounting Export: Fix a problem with unbalanced exports when some transactions have tips (which resulted in multiple CC Log entries for a single tender) or non-credit-card deposits. This was a side effect of the change to group deposits by Card-On-File “token scope”.
    • POS-14541: When exporting to QuickBooks from a Day-End closing and using the option to include a date in the filename, use the (ending) date of the closing, rather than the current date. (Export by date range, not as part of a Day-End was already using the export end date.)
    • Restrict Balance Check operation in Sale Screen to Processing Methods that support it (TRX, Datacap).
    • Make Station in Payment Processing Profiles editable.
    • Only default to Open Drawer for Cash & Check.
    • POS-14543: Fix some cases of missing Card Source in CC Log (since 4.0), and some cases of incorrect Card Source in Tender Info and CC LOG for follow-on transactions (like Voids).
    • Fix a null pointer exception doing smart returns with Teest and Gateway processing methods.
    • Fix failure to complete an Add Card on File action when not using Zero-Dollar Authorization (after the Void Release following a One-Dollar Auth).
    • SAL-120: Major rework to fit columns for all Deposit Gropus, listing the included Payment Types in each column header, rather than the hard-coded payment type combinations that were there before. Fine-tune formatting and Non-Deposit Tenders section column names.
    • Change default Deposit Groups for built-in payment types to more closely reflect current typical merchant accounts: all credit & debit card types in one deposit group (#2) with the two EBT types in another (#8).
    • Fix null pointer swiping CC info prompt for refund w/ standalone or test processing.
    • Change default for Fake/Test Payment Processing to use Smart Refunds.

    4.9.47

    • Don’t use commas in Tender Info subtitle slip #.
    • Sale Screen: Change Tender Info button to Teal.
    • External Accounting Export: Fine-tune an earlier 4.9 change that separated deposits by Card-On-File “token scope” to now deduce the token scope for regular CC tenders (not on file) from their Payment Processing Methods, so regular & on-file credit card payments are combined in the same deposit lines for each processor scope.
    • POS-14526: Fix error exporting to QuickBooks when some tenders have no Card On File “token scope”. 
    • POS-14538: Fix error creating new XAcctConf.
    • POS-14534: Fix failure to start a record screen (Item Record, for example) with F3 Add, when a non-empty search value on an auto-numbered field (Item Code, for example) is used.
    • Fix searches with filter strings when there are indirect references to other tables, such as filtering by Item Code from a Customer Purchase Activity list. (Since 4.9.39).
    • Report Engine: Add date_add and date_diff database functions (for use in User Tables and User Columns) to mimic the corresponding Report Formula functions. Fix a small calculation error in the date_diff formula function. Update FIN-214 & CUS-111 reports to use the new functions instead of the JDBC escape functions timestampadd/timestampdiff.
    • POS-14519: For Purchase Orders when Full Location-Tracking is enabled: Extend Shift-Ctrl-T “Change Target Site for New Lines” operation to also ask if you want to change all current lines. Add Shift-Alt-T to change all current lines and *silently* change the setting for New Lines. Add Ctrl-Alt-T “Change One Site”. Also add all these to the PO Operations Menu.
    • Fix a race condition that leaves Inventory Transfer (and Inventory Count) screen open, with function buttons disabled, after Process (Accept). (Caused by changes for “Buy Again” feature in 4.9.12.)
    • Fix issues with A/R payments & prepayments (due to 4.9 enhancements):
      • 1) Payments & Prepayments weren’t completed when account already open.
      • 2) Clarify wording on account opening dialog to indicate that you can open an account, continue w/o opening it (new in 4.9), or cancel.
      • 3) Always prompt to confirm exceeding credit limit, even when account is or was closed.
      • 4) Add Security Setting for Putting New Charges on Closed A/R Accounts.
    • POS-14517: Fix fatal error in Export PO.
    • Fix SLIP-S, Full-Sheet Invoice, to center logo more precisely, so it lines up with the centered Message 1 text below it.
    • POS-14518: When adjusting column layouts to add/remove feature columns when a feature is enabled/disabled, do it for ALL windows sizes and stations, not just the current station’s current size. This also fixes a Null Pointer Exception running Artisan from a command line, since it was checking for the window size when there was no window.
    • Fix Purchase Order Options Dialog to not change selection to “Smart Start” when the mouse moves over the “Sales” or “Items created” checkboxes. It should only do that if they’re clicked.
    • Add a number of Case-Based versions (divided by case size) of various quantity-based columns on a number of screens and tables, including:
      • Item Records
      • Purchase Order line items
      • Receiving
      • Receiving Log
      • Sales Screen line items
    • Change the default columns for Purchase Order lines to replace the pain Available Qty with Available Qty in Cases, and add Case Size.
    • Allow TRX Pin Pad to be identified by MAC Address.
    • When comparing purchase amounts or quantities for customer power searches using “exactly” or “at most”, round the amount/qty DOWN to a whole number, since the criteria amount can only be a whole number. In other words ignore pennies (and other fractions) in searches like “exactly 10 dollars”.
    • Don’t count coupons in quantities for purchase criteria in Customer Power Searches.
    • SAL-051/057: Fix SAL-051 Sales Summary Report (and SAL-057 for Receipt Printers) to exclude even zero-discount coupons from Avg Units. (Previously they only excluded coupons with discount amounts.)
    • POS-14500: Major speed-up of Customer power searches that specify purchase criteria (both in Customer Record lists and in report parameters).
    • Refinements for Tender Info Screens (in Sale Screen): (1) Add customer name to subtitle box, when there is one. (2) Add Credit Customer when a redeemed Store Credit is from a different customer than the one for this sale.
    • Allow add-on fees in the Additional Fees & Taxes table (under Business & Financial Settings => Sales Tax Settings) to specify a Site, so they can apply only to a specific Sales Location. The default is to apply to all sites
    • Payment Processing with Datacap: Improve PIN Pad and TranCloud IP Address discovery (in cases where Artisan is using a Device Serial Number or MAC Address lookup to find the IP Address) in two ways: (1) Try Serial Number Discovery 30 X 1/2 second instead of 3 X 10 sec. (2) Force a new lookup after a connection error or timeout, if it’s at least 10 minutes since the last lookup attempt, rather than just doing it every 8 hours (with or w/o errors).
    • POS-14494: A/R: Allow prepayments on account to be made with or without opening an account. Saying No to the confirmation dialog now lets the prepayment go through w/o opening the account. Escape or close the dialog to cancel.
    • A/R: Check new charges against the credit limit, even while opening (or reopening) an account, but in that case just get authorization if over the limit; skip the separate confirmation, since the user has already confirmed opening an account for this charge.
    • Offer to automatically apply available credits when finalizing sale.
    • Enhance Payment On Account (Ctrl-A) dialog: Add choices to also apply payments to Orders and Layaways (after Invoices), and to make a Prepayment even if there are invoices due. Refine the algorithm for applying payments to multiple transactions. Fix so default amounts for all choices except Selected Invoice are not negative (clipped to zero).
    • Improve handling of Alt-key sequences on macOS.
    • Fix, when merging records, to merge dependent fields (such as State/Province) based on the merge result of the fields they depend on (such as Country), as originally intended, rather than always leaving the target value as is.
    • POS-13572: “Edit List” Dialog (reached from the bottom of pop-up lists of configuration profiles and record references, such as Categories and Vendors on the Item Record Screen:
      • New “Duplicate” button (Alt-D) lets you copy an existing profile or record directly from the Edit List Dialog.
      • Changes made in Edit List Dialog are now reflected immediately in the original screen’s pop-up lists.
      • Changes made to profile settings *before* Edit List are preserved (and merged with any renaming done in the Edit List dialog).
    • Performance improvement for inventory adjustments (including sales), especially for items with lots of past sales from the same receiving batch.
    • Speed up inventory adjustments, including when saving sales.
    • POS-14477: Improvements for Smart Returns: Fix to split sale lines with returns from multiple original sales. Confirm before leaving a return *without* an original sale selected. Streamline Smart Return dialog so only one Enter key press is needed.
    • Fix WEB-171, Internet Store Checklist, to honor Online Store parameter, which allows you to specify “Online Items Only” (now the default), “Items NOT Online”, or “All Items”.
    • Fix Audit Log to show Record Merges with a “Merge” action (rather than “Change”). 
    • Honor Form Preview settings even if printer and copies are zero.
    • Automatically add (or remove) common feature-specific columns from all Column Layouts (and Default Columns) when the corresponding features are enabled (disabled). Any feature columns missing when upgrading to 4.9 (or migrating from 3.5) are added during the upgrade. This currently applies to the following features:
      • Internet Store Interface
      • Shift Closing
      • Inventory Location Tracking
    • When the Internet Store Interface is enabled, offer to add an Internet sales site (site #999).
    • Remove “Shift” column, by default, from Day-End Reprint lists.
    • Item Import: Fix some cases where items with discounts were occasionally misinterpreted as coupons (depending on field processing order), incorrectly turning off inventory tracking and clearing discount dates.
    • Disallow changing reorder levels to have reorder max (target qty) less than reorder min (threshold qty), since that would be effectively the same as setting them both to the lower value (except for some previous inconsistencies handling this case).
    • Use original CC # in CC Log for Follow-ons (Voids, Refunds) if not provided by processor. 
    • Fix some race conditions and editing glitches when applying a credit card refund to an overpaid sale via the Save button (and related cases). Keep from getting stuck in a negative refund tender or getting an invalid value error trying to move off of that value cell.
    • Disallow Refunds of credits/refunds (from Void All).
    • POS-14262: Purchase Order Screen: Offer choice to update an Item’s Standard Cost when Unit Cost is changed, as is done when Case Cost is changed.
    • POS-14434: Display “(Forced)” for all forced Internet Store uploads (Categories, etc.), not just Items.
    • POS-13122: Internet Store Interface: Display “In-Store Reserve” and “Available Online” as blank in record tables when not applicable. Force “In-Store Reserve” to zero when not applicable.
    • POS-14451: Fix a Stack Overflow using Main Category in the Vendor Power Search. Extend it to “Main Category(ies)”, allowing comma lists and wildcards.
    • SAL-057: “TOTAL TENDER” => “TOTAL TENDERS”
    • Fix a number of problems with the Copy Sale function, especially when no changes are made after the copy. In particular, make sure that the Print function always confirms putting the sale on hold after a copy. Add a status label of “COPY of #nnn” at the top of the Sale Screen.
    • POS-13900: For Loyalty Clubs set to require Customer ID: Add an indicator to the Sale Screen (to the left of the customer address) when customer was selected by Customer ID (w/a negative indicator when a required ID was *not* used). Give a reminder dialog when a required ID was not used, giving the clerk the opportunity to swipe or scan a Customer ID or Loyalty card, when customer selected or sale finalized.
    • POS-14153: Add Redeemed Slip # to Coupons.

    Updated on February 6, 2026