What’s New in Artisan POS 4.6

Welcome to the next generation of Artisan: 4.6.

Discover all of the major updates from version 4.5. 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.

Note: Upgrades to 4.6 require Remote Operation to be turned off.

Key Features

1. Detect Artisan Updates

Artisan will detect if your station(s) need to upgrade to a new version of the program. Once you press “OK,” it will ask if you want to update or not.

2. Quick-Discount Buttons

Easily add discounts to your sales by adding Quick-Discount Buttons (found under “Program Options -> “Miscellaneous Program Options” -> “Sales Screen Options” -> “Quick-Discount Buttons.”)

Add up to six discount buttons. The buttons can discount a single item or the entire sale.

In this example, we discounted one line item for 20% by selecting that item and clicking the 20% button, then we discounted the next line item for 15% by selecting that item and clicking on the 15% button.

Discount entire sale (Additional):

Discount entire sale (Take Best):

Note that single-item discount buttons are yellow; entire-sale discount buttons are green.

3. Percentages Include Decimal Fractions

All percentages can include decimal fractions, such as discounts, markdowns, sale percent, cost percent, consignment splits, etc.

4. Discount Entire Sale by Specific Monetary Amounts or Percentages

You can now discount an entire sale (Sales Screen – > “Operations” – > “Discount” – > “Discount Entire Sale“) by specific monetary amounts or percentages.

Input a decimal to switch from percentage to monetary amount. Input a percentage sign to switch to a percentage.


Monetary Amount:


5. Add Retail Price Note from Customer Type

If you sell to dealers or other resellers, you may want to let them know the retail price to sell your product(s) at. With this feature, you can easily display this price on the sale’s screen and invoices, as a note line below the regular sale line with the reseller’s price on it. This can be configured based on each Customer Type. To edit this setting, head to the “Customer Types” section and edit an existing customer type (or add a new one). 

From the “Show Markdown As” dropdown, select “Price plus Retail Price“. This means the markdown amount will be applied as a reduced price (rather than as a discount), plus a separate line with the Retail Price. 

The sale screen should now show the retail price as a note line. This line will be included on invoices but not on packing slips.


6. Automatic Billing

Artisan 4.6 supports Automatic Billing as part of the Advanced Billing Module (separate purchase required). This feature allows you to have recurring transactions that you process on a regular, consistent basis. It supports monthly, semi-annual, annual, or any monthly intervals (ex. every other month or every third month). This can be used for installment payments, with a specific number of payments, or for ongoing charges that are repeated until cancelled.

The charges for automatic billing can be put on account (A/R) or charged to credit cards on file. (Cards On File requires the Advanced Payment Processing Module.)

To use automatic billing, you create a special type of sale called an Automatic Billing Template (ABT), which has all of the normal sale details but is saved in a “Scheduled” state, and doesn’t affect inventory or accounting until the ABT is processed as part of an automatic billing run. At that time, the template is automatically copied (or reused, if it’s the last installment) to make a normal sale.

In order to use a credit card with automatic billing, you must first put the card on file (using “F7 Cards On File” from either the Customer Record or the Sale Screen), then select that card as payment. The card will not be charged until billing is processed.

Note that ABTs (Automatic Billing Templates) that use a credit card that was put on file through a different Payment Processing Provider than is later used to processing automatic billing (as indicated by the “Token Scope” in the Card-On-File record), will be skipped.

When you finalize an ABT, the “Billing Schedule” section of the Payments screen lets you set the number of installments and the number of months between installments.

The normal Sale Date field, in the upper right-hand corner, is replaced by First/Next Billing Date, allowing you to enter ABTs ahead of time.

To enable Automatic Billing, go to the “Optional Features” section of Configuration Settings, and make sure “Automatic Billing” and (if desired) “Credit Cards On File” are set to “Yes“.

From the “Main Menu,” head to the “Accounting” section and click on “Automatic Billing.”

From this screen, you can process automatic billing, edit billing templates, and run automatic billing reports and expiring credit card reports.

By default, the Automatic Billing Templates list will show all ABTs, but you can now use the new built-in search type called “Slip # (Pending Only)” to exclude future dates and see just the ABTs that are “pending” (that is, they have at least one installment currently still due).

If you process ABTs that have multiple installments due, they will generate the appropriate number of copies to “catch up” and cover all of the installments due.

The Automatic Billing Report gives you a list of transactions in a previous batch of automatic billing, including the status of each transaction and notes on any problems (such as credit card declined).

The Expiring Credit Card Report lets you see which on-file credit cards (in general, or limited to those used by pending ABTs) have expired or will expire soon, so you can get new card info from those customers.

7. Internet Store Interface Enhancements

7a. New “In-Store Reserve” Quantity

There is a new field in the Item Record called “In-Store Reserve,” located in the “Internet Store” tab. This helps the Internet Store Interface determine the Available Quantity to upload to your Internet Store. Enter the amount you want to keep on reserve and not available on your Internet Store. (Ex. We have 14 available of this product and want to save 5 on reserve, so only 9 will be available online). 

You can change In-Store Reserve for multiple items at once by using Bulk Change Internet Store Fields (From Item Records screen, “Bulk Changes” and “Bulk Change Internet Store Fields“).

7b. Optimize High-Volume Internet Store Uploads

To prevent high-volume quantity changes from overwhelming your Internet Store server or your upload bandwidth, the Internet Store Interface was enhanced in 4.5 to recognize quantity-only changes (such as sales and receiving, the two most frequent operations on Item Records) and avoid uploading all of the other details from the Item Record. In 4.6, we go a step further, and detect Items that typically have high quantities and skips uploads for smaller changes (unless the available quantity is very low, or 8 hours have passed since that Item was last uploaded).

7c. Internet Store “Guest” Order Improvements

When customers place orders on your store without logging in, the Internet Store Interface will use this information to find or create a corresponding customer record in Artisan. If the billing information for the order includes at least a Last Name, Company, Email, or Phone Number, Artisan will find that matching information.

If none of those billing fields are available, Artisan will find or create a generic customer record, using the Sale Source Name from the download task (which defaults to “Internet”) as the Customer ID, and appends “Customer” (e.g., “Internet Customer“) as the Last Name.

Note: If customers do log in to the online store, Artisan will instead find or create a specific customer record, using a Customer ID constructed from the online store’s ID for this customer, prefixed by the Customer & Order ID Prefix from the download task (zero-padding the online store ID if it’s numeric and less than 8 digits).

7d. Allow Internet Store Uploads to Exclude Categories

If you only want to upload some of your online store enabled items, you can provide a filter string to include or exclude certain categories. (Previously, you could only include categories.) You might want to do this to force certain items to upload immediately (by also using the “Upload ALL Records (Once)” setting), or to split items between multiple online stores, one per task.

In the Internet Store Interface, navigate to the “Categories to Include (‘!’ = Exclude)” field. Type an exclamation mark before whatever field(s) you want to exclude (with multiple categories separated by a comma). To exclude all fields, use a single exclamation mark at the beginning.

7e. Download Older Internet Store Orders

If you missed some older orders from your Internet Store, you can download them by changing the “Download Orders Since” date. This date defaults to start after the last successful download.

7f. Implement Internet Store Layout Template and Layout Options

Where supported by particular online store types, the Internet Store Layout Template and Additional Layout Options fields can now be used to fine-tune the way Product and Category pages are presented. These fields can be found on the Internet Store tab of Item and Category Records in Artisan.

Layout Template: Category or Product page template name suffix.
                 Use “Default” to reset to the default template.
                 Full product name is “product.suffix.liquid”.
                 Full category name is “collection.suffix.liquid”.
Layout Options (Item only): DRAFT, ACTIVE, or ARCHIVED.

Layout Options (Item): DRAFT, PENDING, PRIVATE, or ARCHIVED.
                       For search & catalog visibility:
                       HIDDEN, CATALOG, SEARCH, VISIBLE (both).
Layout Options (Category): Type of elements to show on Category page:
                       DEFAULT, PRODUCTS, SUBCATEGORIES, or BOTH.
                       (Default is set by the Theme.)

In general, blank means leave the Internet Store value unchanged.

8. Product Variant Enhancements

8a. Preserve Variant Details with New Attributes

As in 3.5, prompt to choose which Value of each new Attribute added to a Product Variant Template will be applied to existing Variant Item Records, so QOH, Barcode, and other details are preserved. Only prompt if there are any items that would be affected.

8b. Partial Sharing for Variant Pictures

With multi-attribute variants, you often want to set individual pictures for some attributes but not for others. For example, Color but not Size. Add an Individual Pictures setting to each Attribute, which can be set or cleared independently, when the Template as a whole is set to allow Individual Pictures. This allows you to apply pictures to just the first variant of each of the values for the attribute(s) that do vary, and let those pictures be automatically synced to the rest of the variant items.

9. Confirm ID Requirement for Loyalty Clubs

When requiring IDs for a loyalty club, a pop-up will re-confirm this decision. With this set, customers will only get points if their Customer Record is explicitly selected by scanning or swiping a Customer ID or Loyalty Card.

10. View/Edit Purchase Orders from Vendor Record Screen 

View a list of purchase orders for vendors from their vendor record screen, using the new F4 Activity button. 

Open the vendor record and click on “Activity Tab,” then “F4 Activity Reports.”

This screen will show any POs this vendor has. 

11. Support for “Other Addresses” for Customers & Purchase Orders

You can now keep track of additional shipping addresses for customers and for purchase orders, pulling them up again later for repeat shipping.

Edit a customer record and head to the “Shipping Tab.” Click on “Other Addresses.”

Add a new record.

Fill out the information.

The new address will be located here.

To add a new address for a Purchase Order, click on “Shipping,” then “Other Addresses.” Repeat the above steps to create and save the new address.

12. Per-Site Vendor Account Numbers & PO Terms

You can specify account numbers and PO terms per-site. “Multi-Site Inventory Tracking” must be turned on in your “Optional Features.” You can have your sites use the main account numbers and PO terms or set their own from this screen.


13. Add Memo & Vendor Order # to PO

Add two new fields to Purchase Orders, under a new Alt-4 Misc Info tab on the PO Screen: Memo (multi-line) and Vendor Order Number (so you can record the Vendor’s number for your order, if it differs from your PO number). Add a new built-in search scheme for the PO by Vendor Order Number.

14. Add Sales & Receiving Summaries to Category & Vendor Activity Tabs

Category and Vendor record screens F4 Activity tabs now show sales and receiving summary fields (for both Year To Date, “YTD”, and grand totals). For categories, this includes items directly in each category; it does not include subcategories. For vendors, this includes items with the vendor as the manufacturer/artist or preferred vendor.

Category Record:

Vendor Record:

15. Back Orders

When processing a Sales Order or Special Order, you may find that you have some of the items in stock while still waiting on others to be received, and you may choose to split the order and ship the items in separate shipments. You can manually create a new order and remove the back-ordered items from the original order, but now there’s a tool to do it for you.

When the sale or order you want to split is on the Sale Screen, use Ctrl-Z (or pick Back Order from the Operations Menu). This will then show a “B/O Qty” column (with the full quantity set initially for the line on which you did the Ctrl-Z). Adjust any of the back-order quantities and then finalize the sale as normal. A new order will be automatically created for the back-order items, and those items on the original sale/order will be replaced with notes that those quantities were back ordered. If the amount of money collected exceeds the total remaining on the original transaction, the money will be split between the two orders appropriately (either by having a single Deposit transaction apply its deposit amount to the two orders, or by applying the excess from the original transaction as a credit toward the new order).

16. Packing Slips & Order Fulfillment Worksheets

Packing Slips & Order Fulfillment Worksheet forms are now available. These are special Sales Slip forms for use with shipped orders. Packing Slips list the items purchased, but without any prices or payment information. All sale lines with the same Item Code and Description are combined into a single line. Blank lines, note lines, coupons, and payment lines are hidden. For Items with Extended Descriptions, you can separately control whether they appear on packing slips, by using the “Packing Slips?” checkbox under the Extended Description in the “Notes & Descriptions” tab of the Item Record Screen:

You can also control whether kit components are visible on packing slips. When any component of a kit is shown, the main kit line is not shown on the packing slip.

The Order Fulfillment Worksheet form is a special version of the packing slip form intended for in-house use in putting the order together. It contains additional (blank) columns that you can use to (manually) keep track of the state of each item as it goes through the stages of ordering, picking, and packing:

Put “Stock” (or “STK” if you prefer) in the “PO #” column when filling from stock on hand; otherwise fill in the PO # and Date Ordered once you’ve ordered the item.

Once the item has been received (or taken from stock), packed, and shipped to the customer, note the shipping date in the Date Shipped column. You can also keep track of which box the item is in, if you wish.

If an item is back-ordered to be shipped later, you can fill in Qty B/O to keep track of it, and then later when the back order is shipped, fill in B/O Shipped (and Box #).

Note that the standard packing slip form also has some blank columns where you can (manually) make notes about back orders (for the customer to see):

17. Recalculate all (Item & Customer) Activity Summaries

Recalculate all (Item and Customer) Activity summaries by checking the button in the “Reset YTD” sales screen (Click on “Accounting, “Manage Sales, “Reset YTD Sales“).

You can also do this by heading to “Tools,” “Database Maintenance,” and “Advanced Database Maintenance.” Click on “Recalculate Activity Summaries” and you’ll see the “Reset YTD” screen with Recalculate Summary Totals” automatically selected.

18. Support PartnerTech Direct Cash Drawer

Artisan 4.6 supports direct-connected cash drawers (cash drawers that do not require a receipt printer) for PartnerTech all-in-one units, including the A5-A and A5-K. This is for 64-bit Windows only. To add this cash drawer to Artisan, open up “Cash Drawer” in your “Device Configuration” section and enter the appropriate port name, as indicated in the note below the “Cash Drawer Port” field.

19. Support MAC Address for PIN Pads with NETePay

Allow the PIN Pad (Terminal Device) address for the NETePay payment processing method to be specified as a MAC Address (as well as an IP Address or COM Port), so you don’t need to configure the device or router to use a static IP address.

20. Enhanced Card on File Security

Now, you have more control over card on file security. The Card On File security task was split into two: “Manage Cards On File” and “Use Cards On File on a Sale.” When using cards on file, the regular authorization check for the (Credit Card) Payment Type is bypassed and the “Use Cards On File on a Sale” setting is used instead.

If you want to force clerks to use F7 Cards On File (so all credit cards can be reused), you can set the individual CC payment types to Not Allowed (or a high level, if you want to allow a supervisor/manager/owner to override), with the appropriate clerk level for “Use Cards On File.”

Changes to Cards on File are also now included in the Audit Log, and can be viewed via F4 Activity.

Add, for cards on file only, an Alternate Payment Processing Profile, to specify a chain of processing profiles to select by Token Scope when processing existing cards on file.

21. Customer Type Authorization Levels

To control which users can select each Customer Type in Customer Records and as an override in the Sale Screen, change the “Required Authorization Level” setting in the “Customer Type” record, by selecting an option from the dropdown.

22. Easier Multi-Site Order Entry

If you have Inventory Location-Tracking turned on and you’re entering a Sales Order, it may be convenient to know when an item is available to be taken from another location (if it’s out of stock at the current location). Now, if you have enabled the Early Out of Stock Warning (in Inventory Handling Options), the warning will appear if (and only if) an item is out of stock at this location, but available at another location.

23. Improved Identification of Open Screens

It’s now easier to determine which open screen is which. The full screen title (displayed at the top of each screen) is often more detailed than the short name displayed in the “Open Screens” list. You can now see the full title simply by hovering over the screen’s name in the list; if the title is different than the short name, it will be displayed in a tooltip.

24. Pole Display Enhancements

After each sale, the display screen will return to the idle screen or display a welcome message, even when Artisan is set to log out after each sale. It will keep the display content for each sale screen separate, and switch display content when switching screens.

25. Report Engine Enhancements

  • New or improved functions for use in report formulas from the Report Designer:
    • New “~” (tilde) “Matches” operator, for regular-expression matches: “string ~ pattern”. This is by default a case-insensitive unanchored (“contains”) match.
    • All date functions now accept the most common date & date/time formats, and return null instead of an error when passed an invalid date string.
    • The “date_diff()” function now returns negative values when date1 is earlier than date2.
    • The “date_part()” function, when returning months, now uses 1=January (rather than 0), for Sample Data as well as for Real Data. (Note, though, that when returning seconds or milliseconds, Real Data will include fractions of a second, whereas Sample Data will not; for consistency in the report output, format the field to round to whole numbers.)
    • New function, “date_between()”, to compare a date against a date range:
      • boolean date_between(Date date1, Date date2, Date date3)
        • Returns true if date1 is between date2 and date3 (inclusive).
    • New function, “now()”, returns the current date/time.
  • Two new Special Fields for identifying the database server type: “Database System Name” and “Database System Version.” One use for Database System Name (in conjunction with the new “~” operator) is to put conditional SQL into reports when Derby syntax is different than PostgreSQL.
  • New database functions (for use in SQL expressions), “safe_cast_decimal()” and “safe_cast_date()”, which cast strings to the named data types, but return null instead of error on parse exceptions.

Note: Some custom forms and reports written in 4.5 or prior, especially sales slips and sales reports, may not be compatible with 4.6 and will need to be adjusted. Please let us know if you have any such reports or forms that stop working, so we can adjust or replace them for you.

Change Log

Last updated: 10/24/2022


  • POS-14163: Fix to authorize a void sale operation when a new sale is discarded and the Sale Screen Option to record voids is set.
  • Expand field sizes to accommodate larger numbers for Retail Planning Report: MCH-223.


  • POS-14125: Fix for some cases where completed Vendor Invoices are NOT included in Day-End closings, and thus not exported to QuickBooks, because Artisan neglected to change the status of the associated hidden transactions to Delivered after the Invoice status was changed to Complete from Receiving or Receiving Log rather than the Vendor Invoice screen.
  • The upgrade makes any previously missed transactions Delivered.
  • Fix Ctrl-A in Vendor Invoice to include all lines not already associated with other invoices.


  • Add COPY button to Raw tab in CC Log.
  • Log Paygistix Client Raw Request to CC Log (for debugging/diagnosis).


  • POS-14084: When using the Advanced Maintenance tool, “Check All Reorder Levels”, apply the new Reorder Purchase Request combining even if the reorder quantity isn’t changing.


  • POS-14084: Fix to combine multiple Reorder Purchase Requests for the same Item (and Site) into one, whenever the number needed to reorder changes. (Normally, there should only ever be at most one.)


  • POS-14097: Fix to allow commas in Keywords match fields in power searches for record lists and reports (like Sales By Customer Report). (This was broken in 4.5 when regular expression matching was added.)
  • POS-14108: Fix a null site error when receiving more than expected (of an item already on the PO), with Inventory Location Tracking OFF.
  • POS-14099: Fix Lazy Initialization exception during Bulk Change Vendor Type with more than one record.
  • Remote Operation: Handle more high-memory Send cases.
  • POS-14102: Fix to not prompt for the “By Register” parameter on SAL-410, Standard Tender Detail Report, when run automatically from a Day-End Closing (because one or more Payment Types are configured to “Include Detail in Day-End Report”).


  • Add more details to log during order loading/import.
  • Silently perform default action if a button menu is invoked non-interactively (from a command-line), but log it to log.txt. (This avoids a Null Pointer Exception trying to display the menu, but probably indicates a logic error in the calling code.)
  • Fix creation of Variant Templates in new Sample Data for Jewelry or Apparel, so Individual Images is set in Attributes for Variant Templates that have Individual Images set.


  • Fix 3.5 migration for commas, item codes, and template names.
  • Fix 3.5 migration with missing sale lines.


  • Fix imports of fields that reference other records by code (such as shipping method names in downloaded Internet Store orders, and many others), where the imported code is *both* longer than the field size (and is thus truncated to match) and is in a different text case.


  • POS-14051: Reduce possible vulnerabilities to race conditions while creating Site Product records (per-site QOH, etc) for new Item Records that may have been causing intermittent. ArrayIndexOutOfBoundsException errors upon F3/Alt-F3.
  • Log error to file before displaying error dialog, in case the dialog itself gets an error.
  • POS-14072: Fix a Null Pointer Exception in rare cases when using Quantity Breaks.


  • Fix “character varying >= integer” error while using the Repair Quantities tool in Advanced Database Maintenance.
  • Additional fixes for importing exported sales.


  • POS-14068: Redo fix for POS-14058 (Fix proxy error changing in-use Pricing Scheme), which was causing a foreign key constraint violation when saving a *new* Pricing Scheme.
  • Fix error editing Customer Types
  • Fix intermittent failures mapping field names when importing sales using “natural” names for fields, rather than SQL column names (such as “Slip #” vs “ORDERID”), as found in the detailed sales export.
  • (Internet Store Downloads were OK because they use column names.)


  • POS-14062 ISI upload: Fix this error while detecting database changes on some systems: “failed to find conversion function from unknown text”.
  • Fix a Null Pointer Exception during Internet Downloads when a guest order (no user logged in) has no Billing Name or Address at all.


  • Include Java JRE in installer; always install
  • Require minimum java version 1.8.0_332 (was 1.8.0_201)


  • POS-14058: Fix proxy error renaming, merging (or possibly making other changes to) a Pricing Scheme that has existing references from Item, Category, or Vendor records.
  • POS-14059: Fix Item imports with a Pricing Scheme column to match on exact case, rather than failing to find Schemes with mixed or lowercase names and then failing with a duplicate key constraint violation trying to add a new uppercase copy. Also fix import to set Pricing Model to “Use Pricing Scheme” when a Pricing Scheme is imported.
  • Fix 4.6.64 upgrade step, missing ‘PPC_VISA’
  • POS-14026: Finish loyalty club migration resets
  • When SAL-051, Sales Summary Report, is run for a Shift Closing, make the title, “Shift Closing Report”, rather than “Day End Summary.”


  • POS-14036: Keyboard Navigation refinements (part 1): Add PageUp and PageDown to Record Screens and Options Screens. PageUp goes to first (upper left) field (in current tab, if tabbed). PageDown goes to first button on button row (or the last focusable component, if no enabled buttons).
  • POS-14026: Fix migration from 3.5 to derive loyalty club reset date (which was not stored explicitly in 3.5) from last purchase date. This was causing incorrect coupon issuance (or lack thereof) on new sales for customers with past purchase history when the club’s reset mode was Calendar Year, Anniversary, or Each Sale.
  • POS-14055: Enhance “Bulk Change Pricing Model” to be able to set Pricing Model, Price (if Manual), and Qty Break Scheme for a specified price Level (Customer Type).
  • POS-13982: Disable all action buttons on the main Receiving screen as soon as F10 Process is clicked, to prevent a double click from causing duplicate receiving.
  • ISI: Fix missing “vc2” when Single Upload used.
  • ISI: Fix exception after 1st run w/ custom fields.
  • POS-14045: Show the Vendor Order Number (from the PO) on the Vendor Invoice Screen and the Vendor Invoice Record Screen. (New field in 4.6)
  • POS-14050: Fix “you can’t use the Inventory Asset account as an adjustment…” when creating a new External Accounting Template (due to a failure to skip that check when no Inventory Asset account has been set).
  • INV-026: The Inventory Transfer report was broken when we added Transfer Export. The problem has been fixed.
  • POS-14044: Restructure the database query for identifying items to upload to an online store to fix certain interactions between complex factors, which were causing variants, in particular, to sometimes not upload yet continue to result in other variants of the same product being uploaded repeatedly.


  • Fix a rare lazy collection initialization exception during the 4.6.33 pre-remote upgrade step, when using category price levels.
  • Fix to not use customer address defaults for Tender addresses, including the Zip/Postal Code, so AVS (Address Verification System) during manual (card-not-present) credit card processing doesn’t use the wrong zip code with PIN Pad-only processing methods (though most of those ignore what we send them, anyway, and get the customer to key it in on the PIN Pad).
  • ISI: Catch unexpected exceptions as well as certain known exceptions, and continue looping through remaining items, categories, etc., so only the failing items “loop” (retry during subsequent task runs) and non-failing times aren’t skipped.
  • Fix the installer so the Start Menu shortcut for “Artisan POS 4” is the regular program not the command-line version (now named “Artisan Command”).
  • POS-14040: Fix recalculation of Receiving Summaries (on F4 tab): unlike the Sales Summaries (fixed in 4.6.60), the Receiving Summaries were not being reset at the beginning of the recalculation, so would double, triple, etc., each time the recalculation was run.
  • POST-14039: Replace current “Partner-Tech Receipt Printer” printer model with RP-630 and add a new RP-700 model with appropriate printer margins. Make the RP-700 the default Partner-Tech model.


  • Fix Datacap payment transactions to only output AVS Streed and AVS Zip if non-blank. This fixes a parse error when using Manual CC with a customer that has a Postal Code but no Street Address.
  • Fix NumberFormatException while generating A/R Statements if any included transactions have redeemed credits (positive amounts) with missing credit slip numbers (possibly due to an old 3.5 bug). Those transactions are still likely incorrect, but will at least now not cause a crash.
  • POS-13931: Fix so the Close Out One Day At A Time setting doesn’t prevent Day-End closing when all unposted transactions are hidden transactions (such as inventory adjustments, vendor invoices, and time clock entries).


  • Fix some uses of Cards On File that were logged (in CC Log and/or Tender Info) as Unknown Card Source rather than Card On File.
  • POS-14025: Fix yet another case of Index Out Of Bounds during Shopify Uploads of Variant Images.
  • Avoid database locking problems and improve recovery from any kind of crash in the middle of an Auto Billing run by doing each ABT as a separate database transaction.
  • When importing Vendor Records, match on Vendor Name if Vendor Code is not provided; also make Vendor Name unique if duplicates imported with different Vendor Codes.


  • POS-14022: When selecting the option to compute totals too in the Reset YTD Dialog, fix it to actually set the (all-time) totals different from the YTD numbers. Run this computation during the 4.6.60 upgrade step to bring all the numbers up to date.
  • POS-14002: Fix more cases where making payments and delivering sales causes an error attaching a Station Record proxy to two sessions, as well as various proxy-session-related vulnerabilities.


  • Fix Constraint Violations trying to process downloaded Internet Store “guest” orders with no customer (last or business) name. If possible, use Ship-To Name if Billing Name is blank. Ignore invalid email addresses when looking for guest Customer Records.
  • Finish implementation: Distributed Shipping Costs
  • POS-14017: Improve spacing to allow more room for longer addresses, descriptions, and other tweaks.
  • Fix so selecting a report from the Report Menu when no database (company file) is open correctly does nothing instead of failing with a Null Pointer Exception.


  • POS-13966: Fix “Can’t find base product for changed item” during ISI upload in cases where “Hide OOS” is enabled in the task settings and a variant has Inventory Tracking OFF in both the base product and some variants.
  • POS-14016: Fix stkunit_check when receiving from a PO w/o Request or a Purchase Request that was somehow timestamped in the future, by using the later date/time as the receiving date.
  • Fix so using File->Export from Record Table Screens that don’t support export (such as Receiving) doesn’t take you to a Day-End Closing.


  • Fix Constraint Violation on Internet Order Import with missing Tax Exemption Type when merchandise is non-taxable, shipping is (normally) taxable, but there is no tax on the order.
  • POS-14012: Fix Constraint Violation changing to Destination-Based Tax on a recalled sale.
  • POS-14010: Fix failure to update receiving totals on PO when whole line items received (w/o partial quantities). Recalculate existing PO totals during upgrade.
  • SAL-051: The Sales by Hour part of the Sales Summary Report wasn’t filtering on delivered sales. Fixed.


  • POS-14013: Fix certain cases of scanning (or typing) the same item multiple times on a sale that failed to combine into a single multi-qty line because of particular combinations of discounts, particularly with an entire-sale discount set.
  • For PAX Direct payment processing, send Clerk, Shift, PurchaseOrder, CustomerCode, and TaxID in all upper case (and digits), just in case. Log PAX Direct Raw Request to CC Log.
  • POS-14002: Fix two issues with applying payments from a recalled sale screen: 1) Single payments were being applied to the first invoice, not the one selected in the table.
  • POS-13969: Fix null pointer exception changing vendors on a PO with full inventory location-tracking enabled.


  • POS-13994: 4.6: Fix migration to set all variant attributes to use individual images when the corresponding variant template was set to use individual images.
  • POS-14003: Don’t allow loops in Alternate Payment Processing setting.
  • POS-13975: Allow multiple ROA prepayments on account, by changing Ctrl-A payment dialog to allow a prepayment even when the total amount due is already negative.
  • POS: 14004: Ask first, but allow expired cards on file to be used on sales. The credit card processor may have updated card info, or the issuing bank may allow a grace period for stored cards.
  • POS-13690: Fix doubling of tip amount in payment processing for tips added to a sale before the credit card is processed.
  • POS-11267: Fix null pointer exception while saving changes from concurrently open Configuration Settings screens.
  • POS-13991: Replace now-unused Menu Order in Other Addresses with “Default for PO?”, which applies only to addresses for Purchase Orders. Fix to use this to determine whether an Other Address is used to set the default Shipping Address for a new PO. Add missing Search Schemes and refine default Column Layouts.


  • Added the new field: Vendor Order Number to the header on the PO. It is conditional and nothing shows if it is blank. Existing users won’t see a difference.
  • POS-13962: When logged out, all functions except login and exit are supposed to be locked out, but functions requiring authorization were let through anyway. Fix to lock these out, too.
  • POS-13973: Fix cut-off expiration date in Card on File record screen (on Windows only).
  • Add function to Operations Menu in Sale Screen to process an individual Automatic Billing Template. (Must be scheduled, due, recalled, and unmodified.)
  • Loop over the whole list of payment token scopes, include all Alternate Payment Processing Profiles, when running Automatic Billing.
  • POS-13981:Fix some cases where the 4.6.09 upgrade step fails due to a null CREATEDATE in the CARDFILE table.
  • POS-13989: Fix rare exception loading tax summaries in the Sale Screen (probably after another error) by loading them in a Data Worker thread if needed.
  • POS-13988: Fix so the outstanding transaction Reference Table at the top of the Sale Screen shows the transaction’s first line’s Description (when available) instead of Sale Type.
  • Add, for cards on file only, an Alternate Payment Processing Profile, to specify a chain of processing profiles by Token Scope when processing existing cards on file.


  • Adding a card on file may require a menu prompt to choose between normal CC and manual CC. Ignore the menu order from those Payment Types, so those two choices are always present, even when set to Menu Order 0 (which might be done to force sales to always use Cards on File.)
  • When logging exceptions during ISI uploads, include the table name and the record ID.
  • Add non-default context and machine name to title bar.
  • Fixes for saving new and updated cards on file.
  • Fix so an updated card-on-file without a BIN number doesn’t cause a Null Pointer Exception trying to construct a masked card number from the BIN number and the SPAN. Specific to OpenEdge payment processing.
  • POS-13978: Fix a “numeric value out of bounds (<9 digits>.<3 digits> expected)” on “points” and “maxPoints” when saving a sale with a loyalty club based on # of items sold. (Fix is to round the 4-decimal-place quantity to 3 decimal places.)
  • Log raw request for Open Edge payment processing


  • Fix null pointer exception assigning a Customer ID to an imported record with no last name or company name when the Customer ID Numbering Format is “3 Letters + 7 Digits” (the default).
  • Automatically repair common typos in email addresses (such as extra periods or spaces), both interactively and during import. During import, move invalid email addresses for Customer & Vendor records to the Memo field (prepending, only if not already present).


  • Fix for 4.6.43 change that caused a divide by zero error when upgrading Remote with Operation Enabled, which caused the program to get stuck in a loop trying to upgrade (saying 4.6.43 was too old for 4.6.43 data).


  • POS-13967: Fix so changes to consignment item prices that result in cost changes don’t change Average Cost, since it should always be zero for split-based consignment items. In general, make sure Average Cost doesn’t go negative.
  • Fix the clip Customer ID name, and other fields in Internet Order Downloads for guest customers, to avoid Constraint Violations on field lengths.
  • Fine-tune the Day-End check for the case where a category has changed from Non-Sales to a not Non-Sales inventory class and needs a Tax Exemption Type (because it didn’t already have any exemptions):
    • a) Change it automatically (silently) if amount is zero.
    • b) Make the message clearer.
  • Cleaned up inconsistencies in the margin percent for RCV-101 Receiving Report.
  • Fix crash upgrading Sample Data to 4.6.41/4.6.42


  • Add filter to allow non-sales, filter payments.
  • CUS-104 Sales by Customer w/Costs
  • Fix rare non-null constraint violation in the 4.6.07 upgrade step.
  • 4.6.40 Fix failure to sync Product Tags to variants.
  • Fix error upgrading when remote logging is turned on even though remote operation is not enabled (leftover from an earlier crash, perhaps). Fine-tune checks for remote upgrades, automatic updates, and related messages.
  • SEO Meta Title and Meta Description must be single-line plan text strings. Shopify, in particular, recently changed to give an error if the Meta Description (which comes from Artisan’s Brief Description or Detailed Description) contains multiple lines. So, the upload will now collapse multiple lines and spaces into a single space for these fields.


  • (4.6) Fix null pointer in Shopify uploads of flat or base products when only qty is changing.
  • Fix for lazy initilization errors in Item Price Levels during 4.6.33 pre-remote upgrade step.


  • Add date_between report formula function.
  • Add a new function for use in report formulas:

boolean date_between(Date date1, Date date2, Date date3)

Returns true if date1 is between date2 and date3 (inclusive).


  • INV-025 & INV-026 Inventory Transfer Reports now includes Inventory Exports.
  • SAL-101: Sales by Item – Add a group total per Base Product.
  • Allow flat products to merge into base products as long as they have the same inventory tracking mode.
  • Fix Illegally Nested DataWorker error while merging records. (Broken by 4.6 Average Cost changes.)
  • Fix so that a Product Variant’s Product Name field, if the template is not set for Internet Store Descriptions to vary individually, is constructed by appending that variant’s description suffix to the Base Product’s Product Name, even initially. (Subsequent changes to the base product record were already handled correctly).
  • When appending Product Variant description suffixes (in general) and the result is too long for the field, clip the end of the base description rather than losing any of the suffix.


  • SAL-412: Add a sales site filter to the Transaction Detail Report.
  • POS-13949: Add database functions safe_cast_decimal, save_cast_date, which return null instead of error on parse exceptions.
  • PPL-402 Batch Reconciliation Report – Added support for externally processed transactions.
  • POS-13946: Further refinements of image uploads for Shopify to handle cases where some variants are not uploaded, but don’t delete their images if shared with other variants or the base product.
  • POS-13952: Fix a Stack Overflow exception that occurs in some cases when changing costs, from a PO, for example. Include additional refinements to the related 4.6 enhancement to Average Cost computation.


  • Increase length of Internet Store Layout Template and Layout Options (to 50 & 200), and enforce case and punctuation. Currently these are only used as follows:
  • Shopify:
    • Layout Template: Category or Product page template name suffix. Use “Default” to reset to the default template. Full product name is “product.suffix.liquid”. Full category name is “collection.suffix.liquid”.
    • Layout Options (Item only): DRAFT, ACTIVE, OR ARCHIVED.
  • WooCommerce:
    • Layout Options (Item): DRAFT, PENDING, PRIVATE, or ARCHIVED. For search & catalog visibility: HIDDEN, CATALOG, SEARCH, VISIBLE (both).
    • Layout Options (Category): Type of elements to show on Category page: DEFAULT, PRODUCTS, SUBCATEGORIES, or BOTH. (Default is set by the Theme.)
  • In general, blank means leave the Internet Store value unchanged.
  • Also, update to Shopify API version 2022-01.
  • Change date_add() and other date functions to return null instead of an error when a date string is invalid.
  • ISI upload improvements, including changing the order of uploads to do variants of each base product after their base product (in variant order, with base products in order by Catalog Order then Item Code), rather than doing all the base products before all the variants.
  • POS-13933: Duplicate category names were causing categories to get “stuck” and re-upload every time the task was run. Fix this by renaming them to “Foo (2)” etc. Also, rework category inheritance handling to fix a number of corner cases.
  • Update to Shopify API version 2022-01.
  • Improve Internet Store upload of images, especially for variants on Shopify. Avoid excessive image duplication. Don’t try to byte-compare images from Shopify, since they’re always modified from the original uploaded images (in the header, at least).
  • Other Internet Store upload improvements, including:
    • Change the order of uploads to do variants of each base product after their base product (in variant order, with base products in order by Catalog Order then Item Code), rather than doing all the base products before all the variants.
    • Duplicate category names were causing categories to get “stuck” and re-upload every time the task was run. Fix this by renaming them to “Foo (2)” etc.
    • Rework category inheritance handling to fix a number of corner cases.
  • Increase maximum length of Internet Store Layout Template and Layout Options (to 50 & 200), and enforce case and punctuation.
  • Update Java runtime to openjdk8/jdk8u322-b06.


  • Increase maximum length of all template, scheme, and profile names from 25 to 50 characters.
  • Add an “Active” flag to Product Variant Templates; inactive templates don’t appear in pull-down menus.


  • POS-13937: As in 3.5, prompt to choose which Value of each new Attribute added to a Product Variant Template will be applied to existing Variant Item Records, so QOH, Barcode, and other details are preserved. Only prompt if there are any items that would be affected.
  • POS-13938: With multi-attribute variants, you often want to set individual pictures for some attributes but not others. For example, Color but not Size. Add an Individual Pictures setting to each Attribute, which can be set or cleared independently, when the Template as a whole is set to allow Individual Pictures. This allows you to apply pictures to just the first variant of each of the values for the attribute(s) that do vary, and let those pictures be automatically synced to the rest of the variant items.
  • POS-13936: Fix State/Province searches to allow you to type in a string to match. Change the built-in Customer State/Province search to “Is One Of” instead of “Equals”.
  • POS-13935: Fix problems with an earlier 4.6 attempt to make it so standard State/Province abbreviations are forced to upper case, even when imported. In addition, make import full State/Province names.
  • SQL Formula fields like “anyImages” are read-only and cannot be imported. Fix so these fields are ignored during import and during record merges.


  • POS-13929: Fix two Pole Display issues:
    • 1) Return to Idle/Welcome Message after each sale, even when set to log out after each sale.
    • 2) Keep display content for each sale screen separate, and switch display content when switching screens.
  • When importing orders for Internet Sales (or exports from other Artisan systems), use the price and discount as imported, even if blank/zero. Previously, items w/o explicit discounts would still be subject to default discounts and quantity breaks (including BOGO formulas), which would (incorrectly) change the net sale price from how it was charged on the website.
  • Add two new fields to Purchase Orders, under a new Alt-4 Misc Info tab on the PO Screen: Memo (multi-line) and Vendor Order Number (so you can record the Vendor’s number for your order, if it differs from your PO number). Add a new built-in search scheme for PO by Vendor Order Number.


  • POS-13675: After upgrading one station (at each remote node), the upgrade installer is automatically made available to other stations of the same type (Windows vs MacOS, 64-bit vs 32-bit, etc.). When Artisan starts up on the other stations, it now asks if you want to install the upgrade. (This applies to Real Data only, not Sample Data).


  • 1. Add new formula function “now()” for the current date/time.
  • 2. Allow date functions to accept most common date & date/time formats.
  • 3. Fix date_diff to return negative values when date1 is earlier than date2.
  • POS-13919: Show the Out-Of-Stock (OOS) Warning menu (if configured), even for Sales Orders and Special Orders, when item is available at another site.
  • Fix the field picker for inserting database fields to not show the Sale/Order field, “Order?”, as just “)”. This happened because it had a parenthetical note that ended with a period, and the period was being incorrectly interpreted as the separator between a table name and a column name.
  • POS-13916: Fix so common cases of changing past costs via Receiving Log update the Average Cost in the Item Record. (Changes to units that have already been removed from inventory are not included).
  • The first time you use Artisan with a particular database server, you must go through the Server Setup dialog. You can manually select the Server Setup button, but Artisan is supposed to do it automatically if it detects that it hasn’t been done, or something is misconfigured. Fix this process to detect additional cases.


  • POS-13912: When prompting for users by password (rather than by menu, followed by a password prompt), a number of the security checks done in menu mode were unintentionally skipped. Fix to do the same checks in both modes. Also fix the check for number of inactive days (for strong users only) to operate correctly in both modes, setting the user as inactive in addition to giving a message. (So an administrator can change the User Record back to “active”, resetting the 90-day clock.) Clarify the password prompt when you select Tools -> Change My Password to say “Enter Current Password”. (This is then followed by a screen to enter the new password.)
  • POS-13909: Fix overlapping elements in SAL-121, Daily Sales Summary Report, which were causing the XLS export to fail.
  • POS-13917: Fix null pointer deleting a Card on File.
  • Fix performance of processing scans in Scan Mode from the Inventory Counting screen with Inventory Location-Tracking and large data.
  • POS-13829: Allow the PIN Pad (Terminal Device) address for NETePay to be specified as a MAC Address (as well as an IP Address or COM Port), so you don’t need to configure the device or router to use a static IP address.
  • Fix so a Batch Report is printed (if so configured) after every Automatic Billing run or Internet Store Order Download, even if no receipts were printed, as long as there was at least one transaction in the batch.
  • In Record Table Searches, fix the match type, “In The Last” (number of days/weeks/etc.), to match only up until the time of the search, and not include future dates. Date ranges in Power Searches for Customer Records and Purchase Activity (including Automatic Billing Templates and Recalled Sales) now default to “Since ‘Forever'” (where ‘Forever’ is used when the date is blank) instead of “In the Last 999 Years,” so that future dates are still included by default.
  • Improve the distribution of discounts to kit components when a bundle kit includes coupon items. Fix a corresponding fatal error in migration (upgrades from 3.5) when such an item has zero discount (due to the entire kit being discounted below the price w/o the coupon).
  • Fix migration to handle duplicate Customer IDs Handle duplicate additional Customer IDs when migrating (upgrading from 3.5).
  • Fix rare case where the 4.5.65 upgrade step could fail due to duplicate Shipping Method names after it strips disallowed punctuation. It now leaves the original name unmodified (including disallowed punctuation) if it would be a duplicate.
  • Fix crash (DataWorker required) recalling a sale with no tenders.
  • Fix recording of the Payment Log (“CC Log”) for follow-on transactions (like voids and returns) that time out or have errors and thus do not provide an Approval Code (“Auth Code”) or AVS/CVV Responses to leave those blank instead of using the original values from the base transaction (from the Tender record).


  • POS-12695: Fix finance charge sale line description to use “currency” format. Fix kit component multiplier prefix to allow up to 4 fractional digits instead of just one.
  • POS-13892: Use a heuristic based on amount of change, time since last change, and other factors, to reduce the frequency of Internet Store uploads for high-volume items.
  • POS-13911: Fix some cases where Store Credit and possibly A/R account lines were incorrectly placed into a Deposit transaction instead of the main Daily Sales transaction, causing both of them to be out of balance, when exporting sales data to External Accounting (i.e. QuickBooks), if set to *not* generate Individual A/R Transactions.
  • POS-13879 Add Order Fulfillment Worksheet (SLIP-OFW)
  • POS-11924 Implement Packing Slips (SLIP-PACK)
  • Improve formatting and width of quantity fields on sheet printer sales-slip forms SLIP-S, SLIP-8X7 & SLIP-RTV-S, to be able to show all 4 digits of fractional quantities. (Receipt printer forms, SLIP-T & SLIP-GIFT-T, only have enough room for a single fractional digit, but change them to use the full format for consistency.)
  • POS-12925: Improve formatting and width of quantity fields on PO forms and Vendor Invoices. Hide all columns except Description on note lines. Fix PO-102 to show note lines.
  • POS-13903: External Accounting: Disallow using the same account for Inventory Adjustment Expense and Inventory Asset. Clarify that “you can’t use the Inventory Asset account as an Inventory Adjustment account. Inventory Adjustments (Shrinkage, Breakage, etc.) must be expense accounts (either as part of Cost Of Goods Sold, or as separate accounts, depending on whether you want them to be reflected in Gross Profit). They represent the cost of inventory that was previously paid for, but is *not* going to be sold, and are used to balance out any change to Inventory Asset that is not due to either Receiving or Sales.
  • (POS-13858) Refine parameters of keyboard emulation scan detection to reduce instances of false positives (actual typing interpreted as scans), including echoing up to 10 characters rather than 5, and, especially, only doing the progress pop-up if at least 25 characters have been accumulated, so the pop-up doesn’t interfere with typing. Fix so scans done at the end of text fields don’t remove newlines or other trailing white space.  When using a scanned or swiped driver’s license to fill in a Customer Record, clear the Title and Company, which aren’t provided by the DL.
  • POS-13854: Fix Sales Slip Forms (SLIP-S, SLIP-T, SLIP-8X7) to show the Display Amount field (DISPAMT) instead of Line Amount (AMOUNT) in the “Amount” column. This ensures the right amount is shown in light of special cases like entire-sale additional discounts.
  • POS-13636: When looking for PostgreSQL utility programs for backup/restore, use the same (or closest higher) version number as the version of the actual database server being used, in case later versions are installed as well. This avoids the problem of producing backup files that can’t be restored onto the same database server version.
  • Fix inconsistencies in reporting Remaining Balance on sales slips when redeeming Store Credit. (In particular, now report both Credit Issued and Remaining Balance as positive numbers, not negative.)
  • Fix so standard State/Province abbreviations forced to upper case, even when imported.
  • Update to Shopify API version 2021-10 (no changes). Include email address in Shopify & WooCommerce downloads of customer records.
  • POS-12965: Include Cards on File in Audit Log. Add an F4 Activity tab, with Audit Summary fields, to the Card On File Record screen. Improve performance of Card On File (by adding an index on Customer). Fix Payment Log entries for Get Token (put card on file) and Delete Token to not record Tender ID, since the Tender Records for these are temporary structures not saved to the database.
  • Tighten up screen switching behavior for login and authorization screens.
  • Don’t use Driver’s License Expiration Date (from Customer Record) as default for *Credit Card* Expiration Date when prompting for credit cards using non-EMV gateway-based processing methods. (Instead, default to blank.)
  • POS-10963: Add an editable Notes field to the Card-on-File record, and a R/O record of the “Token Scope” so we can (eventually) be more specific and proactive about reusability of on-file tokens when switching Processing Methods (some of which have the same Token Scope).
  • POS-12742: Improve performance of this operation. Also recalculate all summaries during migrations from 3.X and during the upgrade to 4.6. Round out the set of YTD Summary fields for Customer Records to match the Total fields. Category and Vendor Record Screen Activity Tabs now check for “Inventory Activity” task authorization, like the Item Record Screen does. Improve audit logging of “bulk updates” by substituting parameter values.
  • Remote Operation: Fix 4.6 upgrade step, which under rare circumstances failed to upgrade some change packets.
  • Internet Store: Trim whitespace around uploaded values. In particular, this fixes an upload failure in “metafield” when a Brief Description (or Detailed Description, if Brief is empty) has only newlines and/or blanks but isn’t completely empty.

Updated on June 27, 2023

Related Articles