Purchasing Technical Details
This page describes advanced technical information about the Purchasing subsystem. It does not explain how to use the system.
Price Books Information about loading and using supplier price lists
When a user enters a supplier return, the default operation is to leave the return in a pending state, so that goods can be receipted back into stock if the
supplier returns them (perhaps repaired). If your operation prefers that supplier returns are complete, then this setting will complete the return from the user
screen and if the supplier repairs and returns items, they will need to be entered as inwards goods again.
(P169) Purchasing allows users to select the store they are in, even in distributed stores. If this settings is set,
the store selectors on most screens will auto select the default location and lock the selector so that it cannot be changed.
If set true, the option "Receive Unexpected Delivery" is disabled, which might be required if all deliveries require a purchase order.
Transit Inventory Data Capture
Transit inventory product lists are made by creating a normal sale on the POS and then completing this sale with the POS-Command
sale(transit()) rather than paying the sale off. This command will typically invoke the transit inventory create screen.
P1659. If you wish to make the process of entering transit items clearer to the user, you can place the sale in "transit mode" which has
visible differences on the screen, and automatically progresses to transit selection when payment is made. To use this feature follow these steps:
- Create a sale as normal, and then enter the command sale(setmode,8) to flag the sale as a transit sale.
- The screen will change to a red/white checker pattern as a visual indicator that this is not a normal sale.
- You can enter items onto the screen. When scanning or selecting a product, the system will prompt for quantity automatically (you can
disable this prompting by defining SaleTransitPromptQty=0)
- You can create a second sale in parallel to the transfer sale, and this will process normally. This allows you to continue to sell while
entering a transit order.
- If the system restarts while a transit is being entered, the system will recover and continue, much like entering a normal sale. You cannot
park transit sales and several other POSCommands are also disabled.
- Transits are completed by attempting to add any payment to the transit sale. If does not need to be for the correct amount.
Transit Inventory Create Screen
This screen is used during the creation of a transit request and selects details about where and how
the stock will be transported.
- Implemented in CCpurchasing.dll DlgScreenTransitSelector. Accepts barcode scans.
- This screen makes no direct changes to the database, it builds and returns a POS Command for processing with the
details selected by the user
- P165. The store selector will only load stores that are capable of receiving stock.
- The tables transit_inventory and transit_inventory_lines are required in the database in order to create transit orders
By Staff Member Tab
- P165. If setting PurchTransitAllowStaff=0 then this tab is disabled, but not hidden.
- All active staff members are available to be selected
By Customer Tab
- P165. If setting PurchTransitAllowCustomer=0 then this tab is disabled, but not hidden.
- All customers are available to be selected
By Supplier Tab
- P165. If setting PurchTransitAllowSupplier=0 then this tab is disabled, but not hidden.
- All suppliers are available to be selected
By Courier Tab
- P165. If setting PurchTransitAllowCourier=0 then this tab is disabled, but not hidden.
- Couriers are primarily loaded from the database table carriers.
Transit Receive Prompt Screen
This screen is used when the user indicates a transit
inventory parcel is being accepted. It is typically displayed automatically when a SSCC barcode is scanned, but
can also be manually called up for sites that are not using SSCC barcodes using the POS-Command plugin(screen.transitreceive,)
- Implemented in CCpurchasing.dll DlgReceiveStoreTransfer.
- In manual mode, if the user presses OK without entering any details, the screen closes and no action is
- If the user enters or scans a transit number that is already processed, a warning is displayed and they cannot
receive the transfer a second time.
- This screen does not allow users to search or find transits that are pending. If they do not have the paperwork and associated transit number,
they should not be performing the receipt. Primarily search is disabled to reduce the potential for errors and fraud. Web Reports exist if you wish
to allow users to see open transits.
- Data about the transit is requested from the server using the transaction
stockmove request="transit-inventory" id="??" mode="receive"
- When an order is accepted, it is confirmed to the server with the transaction
stockmove type="transit-inventory-accept" id="??"
Distributed Environments Setup
Transits are centrally stored in the Head Office database, a receiving store will need to connect to the
central server to accept transits. The following is required to be setup for this to function correctly.
- Do not add the field ssccserial to the transit_inventory table in distributed lanes. This field is an internal trigger. If this field is required/defined in the database
but you wish to search the central database, define TransitReceiveLocal=0. This setting causes the receive component of transit to always request from the central
- The setting BISTransitServer must be defined to point to the central head office system.
This screen provides a list of products and allows
investigation and processing. It is primarily designed to allow high speed bulk interaction with large numbers
of products. This screen has several appearances, depending on what mode the user is wanting and also their security
rights. The modes are: investigate, review, order, picking.
(Not fully documented. Very complex screen)
- Implemented in CCpurchasing.dll DlgInvestigate
- The screen loads using the setting PurchDefaultLocation as the default location. If this setting is not defined, the
screen uses current POS location and time of purchasing load.
- (Investigate mode) Unsupported. If purchasing has been launched as "modeless" (setting PurchDetachScreens=1), then
multiple investigate screens can be launched. This mode is used by power users who wish to be active in multiple
purchasing screens at the same time.
- The print button label can be changed with the setting PurchInvestigateOnlyPrint (advanced, not obvious how used)
- The screen layout is loaded from previously saved settings. These are currently held in ccpurchasing layout. Layout
is machine specific, not user specific, reflecting the fact that this screen may be used on different PCs by the same
person with different job functions.
- If the user does not have security rights to alter stock levels, this option is disabled.
- When the product list is initially displayed, if the setting PurchInvFirstSortCol is set to a column number (0 is the leftmost
column), then a sort is automatically applied. This setting is only used once, and must be set manually in CTL files.
This screen allows manual entry/acceptance of stock from
(Not fully documented. Very complex screen with numerous sub-screens being invoked)
- Implemented in CCpurchasing.dll DlgRecv
- This screen records UserFlow, recording all entered information an options taken.
- (Unsupported) If the setting PurchRecvQtyOnly=1 then the receive screen is placed in a mode which allows entry of quantities only
and not cost/line-cost information.
- If Advanced shipping notifications are in use, the user may be prompted to select an ASN, and the screen will
preload from the ASN.
- If the expected amount is loaded. The setting PurchRecvAmountVariation is used to set an acceptable amount
of variation in cents, or minor currency units (default is 11). If the total keyed is not within this variation, the user
cannot complete the receive operation. Some variation should normally be allowed as the system totals individual
lines and rounding is present in some cases.
- This screen is capable of recording zero as a default, and an explicitly entered "0", which indicates the
user has made a deliberate effort and has actually counted zero items.
- This screen saves a completed order using the transaction
stockmove type="receive-purchase-order" poid="??" document="??" location="??" ...
- If the entered item is variant enabled and no variant information was present in the barcode scan, the system will
prompt for variant information using standard screen variant entry. If the users cancels variant entry, the item
will not be updated, however they may enter variant zero.
- If variant details are enabled, or the setting PurchRecvPromptVariant=1 the system will prompt for extended data
using the VariantEntry screen
- As a line is added, if subscriptions and customer holds are present and enabled (PurchSubsRun=1, default disabled), the following
actions are performed:
- The user is informed of the number of subscription and hold requests. A second warning is displayed if
more demand is present than the amount of stock received.
- A label is printed for each subscription/hold request. This is the label type required according to the
initial customer request (postal, email, txt, phone). Quantity labels may also be printed after the
- (subscriptions) If required, a sale is automatically created and processed for this item.
- (holds) If DebugPurchSubEmail=1 (default 0) is defined, the system will automatically queue
email and txt to the user. These are placed in "hold" status and await a second action of sending them.
- (holds) If any comments exist for each hold request, these are displayed (unless setting PurchPopupHoldComments=0 is used to disable
- The count request is reduced on the hold request. If the hold request has been completed it is marked done.
- Freight and packaging are automatically proportionally assigned (by value) over the received items. If the
user alters any of these assigned values, this is set as "the value" to use for this line and reduces the overall amount to
be spread over the other lines.
- If the "insert" key is presed when the cursor is in the "PLU" entry field, the system displays a product finder
screen to locate the product to be inserted. If the "ctrl" key is key down while insert is displayed, the system
displays a screen to search by supplier plu.
- Tax amounts are calculated using the rates at the date of the invoice or document, not current tax rates