Abstract:
A stock auditing system includes a three-tiered, independent-component architecture to provide extensibility and compatibility with mainstream personal computer operating systems. The system provides a robust and stable operating environment with quick and flexible data manipulation through relational database technology. Reporting capability can be user defined. Object oriented business rules are provided for easier extensions to software functionality. Inherent design standards allow natural language variations. Full on-line contextual user help screens are also provided.

Description:
CROSS REFERENCES TO RELATED APPLICATIONS  
       [0001]    This application claims the benefit of Provisional Application No. 60/283,374, filed Apr. 13, 2001, entitled “Stock Audit System and Method,” the entire content of which is hereby incorporated by reference into this application. 
     
    
     
       STATEMENT REGARDING FEDERALLY SPONSORED RESEARCH OR DEVELOPMENT  
         [0002]    Not Applicable.  
         FIELD OF THE INVENTION  
         [0003]    This invention relates to retail and other stock auditing systems, and more particularly to a new retail stock audit software architecture that is extensible and adaptable to mainstream operating systems.  
         BACKGROUND AND SUMMARY OF THE INVENTION  
         [0004]    Retailers and others often have difficulty managing their stock and inventory. Store owners have trouble knowing precisely how much stock is on their shelves or in their back room or warehouse. Having too much stock increases costs and reduces efficiency. Not enough stock causes lost sales opportunities. It is useful for retailers and other entities concerned with stock management to know precisely how many units of each particular product is on store shelves, how many units are in the back room or warehouse, and how many units are on order.  
           [0005]    Stock management and auditing used to be done manually. However, with the availability of automation tools and inexpensive computer systems, retail stock management and auditing functions have increasingly become more automated. Many retailers now have sophisticated automated stock auditing capabilities, but some of these systems have problems. For example, many such systems run on an older computer (e.g., a mini computer or mainframe) that is costly to maintain. Additionally, many such systems are labor-intensive to operate and unable to cope with large auditing tasks—causing system crashes and requiring substantially technology support. Even more importantly, such older systems may not provide sufficient integrity in the stock auditing process. Oftentimes, a large retailer or warehouse will schedule a periodic stock auditing period to audit the stock levels of their entire inventory. However, it is undesirable for the retailer or warehouse to shut down its operations during this time—which means that stock is arriving and leaving during the stock auditing period as customers place new orders and purchases. It is difficult and yet important to accurately audit stock in such a “moving target” scenario.  
           [0006]    Stock data capture efficiency is one of the more important aspects of accurate and efficient stock auditing. In 1994, Peak Technologies (UK) Ltd. began offering a retail stock audit software solution that has been successful in generating profitable income and market demand. Called the Nucleus Stock Audit system, this arrangement is more than just software: it&#39;s a complete retail solution built around bar code-based data capture technologies. Generally, the system operates by downloading a retailer&#39;s current or expected inventory information from the host or in-store computer into a Nucleus Stock Audit software application. Once this data is downloaded, Nucleus Stock Audit automatically generates an extract file. This file, containing all of the prices, UPC codes and descriptions, is downloaded onto a portable data capture terminal. The portable terminal is then ready to scan, capture and verify store line merchandise data. While the data is being captured and verified, the user is able to periodically download the information into the Nucleus Stock Audit application for analysis. At this point, reconciliation of the scanned data with the expected stock instantly takes place on-site to identify discrepancies that need further investigation.  
           [0007]    Advantages of this type of system include:  
           [0008]    Increased accuracy  
           [0009]    Verifies the product instantly at the point of data capture  
           [0010]    Eliminates rejected unknown SKU&#39;s at the host computer  
           [0011]    Furnishes on-demand analysis of scanned vs. host-expected stock  
           [0012]    Generates an instant result available for immediate investigation  
           [0013]    Incorporates double-check and re-count options  
           [0014]    Ensures confidence in data accuracy  
           [0015]    Includes tracking and accounting of in-transit merchandise  
           [0016]    Provides an accurate cut-off prior to comparison  
           [0017]    Features audit trail reporting throughout the inventory process  
           [0018]    Records changes initiated by the auditor with user definable reason codes  
           [0019]    Provides comprehensive Home Office Summary Reporting  
           [0020]    Generates a separate audit report for managerial analysis  
           [0021]    Versatility  
           [0022]    Offers implementation flexibility to meet your requirements and budget  
           [0023]    Spans from basic data capture to detailed inventory analysis  
           [0024]    Evolves to address new requirements  
           [0025]    Allows you to meet and exceed changing market demands  
           [0026]    Features drill down reporting functionality to multiple levels of inquiry  
           [0027]    Delivers SKU, product group, department and summary analysis reports  
           [0028]    Reports gains, losses and SKU accuracies down to line/detail item level  
           [0029]    Gives detailed visibility of the powerful information hidden in net summaries  
           [0030]    Provides total audit accountability of the physical count process  
           [0031]    Eliminates opportunities for misuse through secure structured procedures  
           [0032]    Configures multiple selections in different languages, currencies and data formats  
           [0033]    Enables a company to compete on an international level  
           [0034]    Ready-to-Use  
           [0035]    Simple-to-learn design reduces time spent training your employees  
           [0036]    Involves your store staff in the ownership of the result  
           [0037]    Incorporates portable plug-and-play functionality  
           [0038]    Allows the system to be in constant use throughout the year  
           [0039]    Runs on industry standard Windows® PC  
           [0040]    Utilizes intuitive point-and-click functionality  
           [0041]    Runs on easily configured standard application  
           [0042]    Ensures performance and future compatibility  
           [0043]    While the Nucleus Stock Audit system marketed by Peak Technologies has been highly successful, further improvements are possible and desirable.  
           [0044]    A long term process such as stock auditing presents a significant challenge in terms of adapting to changing conditions. A business commits a significant amount of resources and trust when it chooses a vendor for software controlling or keeping track a core business function such as stock auditing and other such needs. For example, once a stock auditing database is created and populated, it is generally very difficult to change to a different system. Therefore, the developer of such software must be able to flexibly adapt to changing conditions requiring corresponding changes in the behavior and operation of the software. Such changing conditions may be due to a number of different factors, including but not limited to:  
           [0045]    computing hardware changes,  
           [0046]    business rule changes,  
           [0047]    availability of new or enhanced functionality input devices such as portable wireless terminals,  
           [0048]    particular customization requirements of specific customers,  
           [0049]    need for additional or enhanced functionality in response to competition, other compatible applications, etc.,  
           [0050]    other factors.  
           [0051]    For example, as personal computer operating systems and hardware have become increasingly capable and less expensive, it has become desirable to adapt the stock audit application technology platform so that it supports various mainstream personal computer operating systems. In addition, it would be desirable to provide a technology platform architecture that allows efficient extensions and updates. Such an extensible, undatable architecture would be useful, for example, to create different language (localized) versions of the software in order to develop new markets. Additionally, the ability of the system to accept “plug in” type modules from different vendors as well as updated modules would offer additional flexibility, versatility and maintainability.  
           [0052]    Exemplary non-limiting embodiments of the present invention solve these and other problems by providing an enhanced, extensible stock audit technology platform including the following non-limiting features and advantages:  
           [0053]    improved three-tier architecture,  
           [0054]    more robust and stable operating environment,  
           [0055]    quicker and more flexible data manipulation through relational database technology,  
           [0056]    user-defined reporting capability,  
           [0057]    object oriented (OO) business rules for more easily extending software functionality,  
           [0058]    inherent design standards to allow national language variations,  
           [0059]    full on-line contextual user help screens,  
           [0060]    other features.  
           [0061]    Briefly, in accordance with one aspect provided by an exemplary embodiment of the invention, an application providing a hardware and software solution to meet the stock auditing and other requirements of a number of different needs and markets (e.g., perpetual inventory) provides a unique three-tiered architecture. The architecture provided by an illustrative embodiment of the present invention embraces a three-tier, separate-component approach, and is built on standard personal computer or other operating system technologies. In one exemplary embodiment, the three tiers comprise:  
           [0062]    services layer,  
           [0063]    business layer, and  
           [0064]    applications layer.  
           [0065]    The services tier or layer in the exemplary illustrative embodiment includes a relational database containing all of the information that is received from a customer&#39;s host computer or is otherwise developed (e.g., through use of wireless portable terminals). This relational database may be based, for example, on a SQL Server database model. Information that is received from outside of the application may also be persisted within this database.  
           [0066]    In the exemplary embodiment, sitting “on top of” the services layer are a plurality of objects that provide user interface-less services for the application programmer. This layer may be known as the Business Objects layer. In the exemplary embodiment, the Business Objects layer can communicate with hand-held terminal(s) and host computer(s), and provides “sanitized” access to the underlying database for the user interface.  
           [0067]    The exemplary non-limiting architecture also provides a user interface application which uses the Business Objects to provide a user interface allowing users to interact with the application. For example, Microsoft&#39;s Interface Definition Language may be used to provide a complete interface between the user interface application and the Business Objects. A number of screens may be displayed giving different views on the stock related data. A standard report generator may be used to generate a series of reports on demand. A conventional communications package may be used to allow fast communication between the hand-held terminal&#39;s and the personal or other computer.  
           [0068]    By dividing the functionality of the overall system into three layers comprising modules and minimizing the dependency between the modules, the resulting system provides excellent extensibility and updatability. For example, it becomes possible to easily install additional or replacement modules to provide enhanced, different or customized functionality.  
           [0069]    The three-layer architecture of the exemplary embodiment also facilitates localization. In particular, in the exemplary embodiment the user interface is supplied by only one of the layers. Further, the software is designed so that user interface texts are supplied via files rather than being interspersed throughout the code. This means that translating the software for use by different native language speakers can be accomplished easily and efficiently by simply translating the text files using any standard translation or localization process. 
       
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0070]    These and other features and advantages may be better and more completely understood by referring to the following detailed description of presently preferred example embodiments in conjunction with the drawings, of which:  
         [0071]    [0071]FIG. 1 schematically illustrates an example preferred embodiment automated retail and other stock audit system;  
         [0072]    [0072]FIG. 2 shows an example stock audit system software architecture;  
         [0073]    [0073]FIG. 3 shows an example stock audit module architecture;  
         [0074]    [0074]FIG. 4 shows an example diagram detailing exemplary components within an example stock audit manager;  
         [0075]    [0075]FIG. 5 shows example communication couplings between the various components within the exemplary architecture;  
         [0076]    [0076]FIG. 6 illustrates the software involved with batch communications and the protocols used between the various pieces of software in the illustrative embodiment;  
         [0077]    [0077]FIG. 7 illustrates the software involved with the RF communications and the protocols used between the various parts of the software in the illustrative embodiment;  
         [0078]    [0078]FIG. 8 shows an example process for initializing and logging in to the exemplary stock audit module;  
         [0079]    [0079]FIG. 9 shows an example process for terminating a session with the exemplary stock audit module;  
         [0080]    [0080]FIG. 10 shows an example process for loading expected data for a stock audit; and  
         [0081]    [0081]FIG. 11 shows an example reconciliation process. 
     
    
     DETAILED DESCRIPTION OF THE INVENTION  
       [0082]    [0082]FIG. 1 shows an example stock auditing system  50  provided by a preferred exemplary non-limiting embodiment of the present invention. In this example stock auditing system  50 , hand-held terminals  52  are used to gather information about stock on retail store shelves, warehouse shelves, etc. For example, each hand-held terminal  52  may include a barcode scanner  54  that an operator uses to read an encoded universal product code (SKU) printed on the packaging of stocked products.  
         [0083]    The hand-held terminals  52  communicate either continually (e.g., via an RF link  56 ) or intermittently (e.g., via a cradle  58 ) with a stock auditing computer system  60 . Computer system  60  may include a conventional personal computer with display monitor  62  and keyboard  64  as well as a variety of other conventional peripherals (not shown). In one example embodiment, personal computer  60  communicates with a retail host computer  66  that includes, for example, stock database information.  
         [0084]    In the exemplary embodiment, the stock audit computer system  60  runs software that interacts with the hand-held terminals  52 . For example, computer system  60  may download information into the hand-held terminals  52 , and it may receive information from the hand-held terminals. The stock audit computer system  60  provides an integrated, enterprise-wide stock audit management function to assist a retailer in auditing the stock of his or her retail operation.  
         [0085]    In the exemplary embodiment, stock audit computer system  60  may be a conventional personal computer including a Microsoft Windows-based operating system. Additionally, computer  60  includes specialized stock audit software having an architecture as shown in FIG. 2. The stock auditing architecture  100  of FIG. 2 in conjunction with the computer  60 &#39;s hardware and conventional operating system provides an integrated stock auditing system that maintains a database of current stock, receives updates on stock and orders from host computer  66  and/or hand-held terminals  52 , and provides views and reports on demand.  
         [0086]    [0086]FIG. 2 is a block diagram showing an example stock auditing system software architecture  100 . The system shown in FIG. 2 is designed with the overall goals of being able to handle change efficiently and to be extensible. All of the illustrated components are generic in the illustrative embodiment, and are not limited to (e.g., as designed to be generic of) the distinct data capture solutions that are built upon the base system (this allows a variety of different data capture solutions to be used). In the example embodiment, the architecture  100  may be embodied within software and/or hardware running on personal computer  60  shown in FIG. 1.  
         [0087]    As can be seen from FIG. 2, the preferred embodiment architecture  100  includes three basic layers:  
         [0088]    a services layer  102 ,  
         [0089]    a business layer  104 ,  
         [0090]    an applications layer  106 .  
         [0091]    The services layer  102  consists of a set of modules that provide functionality to the business layer  104  (and potentially other services) to perform required tasks. In the exemplary embodiment, the functionality provided by the services layer  102  includes a relational database such as an SQL or other database server or application that keeps track of stock and other persistent information.  
         [0092]    The business layer  104  consists of a series of executable components that deliver the data capture functionality to the applications layer  106  components. All business logic and security checks are enforced by these components within the business layer  104  in the illustrative embodiment. In the illustrative embodiment, the exposed interfaces and methods are all automation-friendly. There are no user interface components within the business layer  104  in the example embodiment—the user interface being provided by the application layer  106  instead. The underlying tools (e.g., databases) are preferably completely hidden by objects within the business layer  104 . This has the advantage that all client programmers (e.g., the user interface writer) can program in business terms (e.g., expected counts, count summaries, etc.) without having to be concerned with underlying database structures and details. Although every database structure is not exposed above the business layer  104 , some results are passed back (e.g., using ADO) to allow user manipulation of the data.  
         [0093]    The application layer  106  in the illustrative embodiment consists of a series of user interfaces that are tailored for particular customer requirements. By design, the application layer  106  contains mainly code needed to drive the behavior and look and feel of the user interface. These applications also contain code and functionality that use components provided by the business layer  104  to perform data capture operations and to view the results. In the illustrative embodiment, the user interfaces are written in a variety of programming languages and tools. One example programming language that may be used conveniently is Visual Basic.  
         [0094]    The applications layer  106  components are built on top of a published set of components and their interfaces and methods (i.e., the business layer  104 ). In the longer term, the separation of the applications layer  106  from the business layer  104  allows the FIG. 2 architecture  100  to be used by any number of reference applications (e.g., including those written by third party vendors or an Internet based solution) without requiring changes to the main code. By splitting the overall architecture  100  into three layers, changes can be performed far more easily and the architecture  100  is much more extensible.  
         [0095]    The overall architectural design of a software system significantly impacts how easily it can be updated or changed. There are various approaches to designing software applications. For example, single tier architectures generally consist of a single executable written in one language where the user interface contains both the business code and the underlying database code. An advantage of single-tier architectures is that they are potentially the quickest to implement (i.e., assuming the implementation language is able to handle different types of code). However, they tend to react poorly to change because the user interface code and the supporting rules are typically coupled tightly together. Peak Technologies&#39; prior Nucleus Stock Audit offering is an example of a single-tiered application.  
         [0096]    A two-tier architecture generally may split the database code away from the code implementing the user interface and business rules. Such two-tier architectures are popular with small-scale applications and are easy to create. On the Windows platform, for example, they are almost always implemented with Visual Basic “front ends” wrapping SQL Server or Access. An advantage of the two-tiered applications is that are easy to write. Two-tier architectures react to change within the database schema far better than the single-tier architecture, but there is still valuable code that could be reused over the long term embedded within the user interface.  
         [0097]    A three-tier architecture with no distinct separation of modules is certainly possible. In such an arrangement, a distinct set of modules would provide all of the functionality that is required irrespective of whether a particular customer licenses a particular module or not. The advantage to such an architecture is that it involves supporting less code, but may end up loading the executables that are delivered to each customer—potentially affecting performance and maintenance issues.  
         [0098]    The exemplary non-limiting FIG. 2 architecture  100  provides a three-tiered modular approach as explained above. The FIG. 2 architecture including distinct separation of modules is perhaps initially more complicated to set up than certain other architectures, but is able to handle change far more easily and does not carry around unnecessary executables/source code. Separating the user interface modules  110 ,  112 ,  114  within applications layer  106  from the various modules within business layer  104  and deliberately keeping the user interfaces focussed on addressing user interface issues can allow easier substitution or addition of new user interface functionality. This is especially important for a long-term concept or an application aimed at something other than stock auditing, for example, would not necessarily need the same look and feel as the stock audit user interface  110 —which provides a visible design of the user interface based on user interface guidelines in order to make the software easy to use and consistent with the current operating system guidelines. It is also important for offering user interface customization as a value-added service or for other reasons. The architecture of FIG. 2 is designed to readily handle change in design, tools and technologies. In the medium term, it is perceived that non-trivial changes to the underlying database schema within services layer  102  may be needed. All external pieces of technology are deliberately kept to the outside parts of the architecture  100  in the illustrative embodiment.  
       GENERAL DESIGN FEATURES OF ARCHITECTURE  100   
       [0099]    Various system wide concepts are adopted throughout the design and implementation of architecture  100  to provide such features as error handling, the format of files and databases, and implementation languages. For example, architecture  100  is able to receive a number of input files from host computers. In the illustrative embodiment, files that satisfy a single data requirement are always placed within a single distinct input directory. For added insurance, a file can contain a fixed header that details the function the file was aimed at. The specific implementations provide for a the general directory structure used throughout architecture  100 , formerly for files that form the persisted information on the personal computer about customer installation and configuration, formerly for files that are sent to and from the hand-held terminals, and formats of files used to interface with all customer host systems.  
         [0100]    Architecture  100  in the exemplary embodiment is also able to send a series of files detailing the results of a data capture function. As a number of functions may be supported by a single installation, the files that satisfy a single data requirement are, in the illustrative embodiment, placed within a single distinct output directory. For added insurance, a file can contain a fixed header that details what type of result file is being sent back.  
         [0101]    During batch processing, files of a fixed format are sent between the hand-held terminals via the communications software in order to “prime” the hand-held terminals for use and download information from the hand-held terminal after an operator has physically counted a series of locations.  
         [0102]    In the exemplary embodiment, the relational database  142  is abstracted from the user interface code within architecture  100  in order to, among other reasons, allow extensions and changes within the database schema that do not effect the user interface directly. The database schema initially used by the exemplary embodiment to support the stock auditing module  132  may be, for example, a non-normalized database. Additional normalization may be used to reduce space wastage and enhancement to handle the different data capture functions. A particular data capture function may require a different or additional database schema to be introduced.  
         [0103]    In the exemplary embodiment, architecture  100  is designed to support multiple languages. For example, the software is expected to work in other locations with the minimum of change. All user interface objects and strings to be displayed are not stored within the code in the example embodiment, but are stored within resource files instead in order to make the localization process more efficient. For installation, in the exemplary embodiment, there are two sets of resource files—one containing resources that support the user interfaces and one containing resources that support the business layers  104 . Each pair of resource files contains all the strings and forms required to support one language. If a customer requires another language, then a translation can be performed on the resource files and these files are then linked back into the source to provide a new set of files. It is the responsibility of the installation program in the example embodiment to install the correct language version of the software.  
         [0104]    In the illustrative embodiment, a variety of types of non-database storage techniques are used to persist information that supports the installation of architecture  100 . For example, the registry contains three types of entries:  
         [0105]    COM (executable) entries,  
         [0106]    configuration related entries,  
         [0107]    user related entries.  
         [0108]    In the illustrative embodiment, each registered COM component and interface makes entries within the registry. These follow a define form in the illustrative embodiment and are present for clients of a particular component to instantiate the component for use. Although non-trivial, the format and location of these registry entries are well documented and handled automatically by conventional tools It is the responsibility of the installation program  114  to support registration of COM components and interfaces during install and cleaning of these entries during uninstall.  
         [0109]    Configuration related entries and user related entries are placed in their own dedicated registry keys in the exemplary embodiment. If some of the entries persisted for either the configuration or particular users begin to reduce the effectiveness of the registry (e.g., by making it too large) then some functionality may be moved to files instead. The file system supported by the computer system  60  may also include an installation directory containing all components of architecture  100 , and a working directory where client specific files are stored. The working directory may be broken down into a series of subdirectories that meet particular requirements. The database  142  may be stored within the working directory if desired.  
         [0110]    The run time configuration of architecture  100  is dependent on a series of registry entries and related files within the working directory. Different customers can be offered different licenses and corresponding different functionality. For example, some customers may not require the full system functionality and could license some but not all modules. Other customers may require alternative or enhanced functionality. Different “versions” of the software can be provided by simply substituting one module for another or by adding additional modules. Direct registry and file manipulation by users is permitted in order to allow users to access and manipulate configuration items. An administrator tool  112  replaces most of the direct registry and file manipulation that is needed in the short term. Administrator tool  112  has the benefit that each request is passed through a component within the business layer  104  that performs validation checks. The administrator tool  112  is geared for the competent user or dealer that already has a configuration for a customer on the machine and wishes to make some minor changes.  
         [0111]    The business layer  104  in the exemplary embodiment supports the importing and exporting of current configuration into a main directory. This provides the benefits of allowing a customer to export their current configuration and provide it to technical support for analysis. Additionally, a disk can be supplied at installation that contains the default configuration for a customer—which can then be imported into the business layer  104  simply and efficiently.  
         [0112]    With respect to memory management issues, all memory passed between the applications layer  106  and the business layer  104  in the exemplary embodiment is allocated to one of the COM heaps. To maximize performance, sufficient memory is allocated by the server of COM method call and de-allocated by the client in the exemplary embodiment.  
         [0113]    With respect to concurrency, all business layer  104  components and service layer  102  components are made thread-safe in the exemplary embodiment. In the long-term, support for multiple connections from hand-held terminals running over the RF communications protocol is desirable. Certain key algorithms may be implemented using multiple threads to ensure the application can provide feedback to the client code while the algorithm takes place. One example algorithm is the reconciliation process. In the exemplary embodiment, an MFC is used internally within many of the business layer  104  components and service layer  102  components. A wrapper macro can be used to insert appropriate process entry points to handle threading successfully. The user applications aren&#39;t necessarily thread-safe or incorporate multiple threads.  
         [0114]    In the illustrative embodiment, the software is not necessarily portable, but rather is targeted for the particular operating systems (e.g., Microsoft&#39;s 32-bit Windows operating systems). For example, the applications layer components  106  may be written using Visual Basic, and the business layer  104  components all use the COM extensively to provide the framework to build the components. Although the software is not portable in the exemplary embodiment, this does not preclude communication with non-Windows based hosts. Furthermore, in other embodiments, the software can be made portable using appropriate porting or other techniques.  
         [0115]    In the illustrative embodiment, architecture  100  is designed to allow a variety of languages to implement the system. This allows tools that design user interfaces to write the application layer  106  and tools to implement business rules to write the business layer  104 . COM is a binary standard defining how objects interact within the Microsoft platform, and is used to form most of the interfaces between objects within architecture  100  in the exemplary embodiment. As the architecture is not tied to any particular implementation language, this leaves flexibility to change languages at will.  
         [0116]    Errors can be detected at any level within the software but they are preferably reported visually from the application layer  106  as opposed to some other layer. Depending upon the type of service (e.g., whether it is a COM object, a database query, a DOL supporting exported C functions, etc.), the mechanism used to indicate warnings and errors differs significantly of the exemplary embodiment. It is the responsibility of each business layer  104  component to trap the raising of all errors. These components must then return them (if required) in a standard form. In the illustrative embodiment, the severity of each error/warning and the observers of same classify each error/warning. The severity defines the importance that the system attaches to the event (e.g., “is it a warning or will the system not function from now on?”). The observer identifies who should be notified of the event. In the illustrative embodiment, the standard form used is the COM rich error mechanism. Careful use of generic error handlers is observed (e.g., writing a “try catch” handler in C++). It is no benefit to the user/technical support engineer to have business layer  104  objects that catch every error raised below them and wrap it with one message indicating on the lines of “invalid error handled.” The observers that are notified about the error change depending upon the type and severity of the error/warning. For instance, in the exemplary embodiment, if the architecture  100  can&#39;t start because there is no valid authorization, this results in a warning message being displayed (but nothing logged—since nothing is running). However, the successful completion of a Count is reported to the audit log in the exemplary embodiment.  
         [0117]    The various user interfaces are implemented as a set of application executables in the exemplary embodiment. The components within the business layer  104  and services layer  102  all run under the same process space in the exemplary embodiment. This process is distinct from all of the user interfaces executables and is known as a “COM surrogate.” A COM surrogate realizes two benefits—namely code isolation and security. The address space that is available to the components within the business layer  104  and service layer  102  is not available to the user applications layer  106  in the exemplary embodiment. Any IPC between the two layers is always through COM in the exemplary embodiment, although other embodiments could use different communications techniques. For ease of debugging, architecture  100  can be set up to run the business layer  104  and services layer  102  under the same process as the user interface application  106 . The communication software that supports batch communication may be run as a hidden process. A server process separate from the main business layer  104  and service layer  102  is used to support RF (wireless) functionality in the exemplary embodiment.  
         [0118]    In the exemplary embodiment, all reports are generated by software running in the applications layer  106 . All data that can be printed on a report is accessed solely from the business layer  104  using standard COM calls. This flexibility allows a client programmer to quickly generate any report using a client language that can drive COM (e.g., VB and XL). In the exemplary embodiment, it is not the responsibility of the business or services layer  102 ,  104  to actually print out any reports. Such reports can be generated and printed by an external report generator package.  
       DETAILED DESCRIPTION OF ARCHITECTURE  100   
       [0119]    The following is a more detailed description of the various components that make up the architecture  100  shown in FIG. 2.  
         [0120]    Business Layer  104   
         [0121]    As discussed above, business layer  104  contains a number of different modules in the exemplary embodiment, including:  
         [0122]    nucleus manager  120 ,  
         [0123]    user manager  122 ,  
         [0124]    configuration manager  124 ,  
         [0125]    host interactor  126 ,  
         [0126]    audit engine  128 ,  
         [0127]    hand-held terminal interactor  130 ,  
         [0128]    stock audit module  132 .  
         [0129]    Nucleus Manager Module  120   
         [0130]    In the illustrative embodiment, nucleus manager module  120  contains the entry components to the stock audit module system. Within this exemplary nucleus manager module  120 , there is a single component that provides generic functionality to all consumers of the architecture  100 . This functionality includes, for example, lifetime management for the current user and providing particular components for the client code. Nucleus manager  120  may also include a nucleus registration component providing registration and licensing information to all consumers. In the illustrative example, nucleus manager  120 &#39;s nucleus interface component may be complemented by the stock audit module  32 . The stock audit module  132  is responsible for understanding the part of the system relating to stock auditing.  
         [0131]    In more detail, the exemplary nucleus manager module implements a set of components within the overall system providing functionality of the such as, for example:  
         [0132]    initialization and termination  
         [0133]    read access to the registration information available for the customer  
         [0134]    log in/log out functionality for the current user  
         [0135]    system integrity checks  
         [0136]    enforcing correct access to license modules  
         [0137]    providing support for installing software.  
         [0138]    In the exemplary non-limiting embodiment, the nucleus manager module  120  may include a nucleus interface component, a registration component, and a session component and an installer component. In the exemplary embodiment, the nucleus interface component provides initial access and they also perform system integrity checks to see what features are to be offered. The registration component may provide read only access to information that defines the license capabilities of the overall system. The session component may be available if the nucleus interface component has insured the set-up of the machine and directory structure is valid. This exemplary session component provides log in and log out functionality and provides access to the modules within the overall system. The installer component in the exemplary embodiment is used to support the installation of the software and to report to the nucleus interface whether the software is installed correctly. The overall functionality of the nucleus manager module  120  may support a single log in user or multiple users (via the session concept). The majority of the code within the nucleus manager module  120  may be generic (i.e., it makes no reference to stock auditing functionality) to allow for easier addition of new modules. In the exemplary embodiment, the nucleus manager is implemented within a DLL (i.e., a standard ATL component with no visible use or interface). In the exemplary embodiment, the nucleus manager component  120  has no direct connections to any files except during installation and has no direct connection to any database. All strings formed within the nucleus manager component  120  preferably uses the language module. Directory paths that provide the absolute location of the directories are preferably held within the registry, and registration details are persisted solely in a connected Dongle in the exemplary embodiment. Preferably, all internal classes are read-safe, none of the code is portable and the module is implemented as an ATL/C++ component.  
         [0139]    Configuration Manager  124   
         [0140]    Business layer  104  also includes configuration manager  124  in the illustrative embodiment. Briefly, the configuration manager  124  provides generic configuration support and allows easy inclusion of new data features. In more detail, configuration manager  124  in the exemplary embodiment defines the customer specific behavior both within the personal computer based software and within any software running on hand-held terminals that communicate with the personal computer. Information directly understood by the configuration manager  124  in the exemplary embodiment is preferably generic in nature. For instance, configuration manager  124  understands which part of the registry that some configuration information is stored and some details about the customer owning the software and the stores owned by the customer. The configuration manager  124  in the illustrative embodiment is responsible for ensuring the current configuration enables the system to be run. The information held within the configuration manager  124  is actually persisted, in the illustrative embodiment, with the combination of the registry and files. If an entry for the configuration manager  124  does not exist, then a sensible default is taken. In the illustrative embodiment, the configuration manager  124  provides a set of generic calls similar to the Registry API that all other modules should use when they need to persist information. This ensures that entries are always placed in the correct location, and allows the persistence mechanism to be changed at a later date if required. The configuration manager  124  implements a series of module specific configuration components. For example, a stock audit configuration component may be provided.  
         [0141]    In more detail, the exemplary configuration manager  124  implements a set of components that are responsible for managing all knowledge about a customer (e.g., except for its name that is held within the Dongle), managing all knowledge about the storage that belonged to the customer, managing all generic information about the configurations that are available for use (including their type) and, managing type-specific configuration information, and providing registry/read/write access to business components and clients to persist information. In the exemplary embodiment, the configuration manager module  124  may include the following components:  
         [0142]    a configuration enumerator that provides a standard enumeration interface to iterate throughout the available configurations  
         [0143]    a configuration component that provides access to a single configuration that is available for the customer  
         [0144]    a stock audit configuration component providing access to a stock audit configuration available for the customer  
         [0145]    a customer component providing access to customer specific information (e.g., the address and supporting telephone numbers)  
         [0146]    a store and enumerator component providing a standard enumeration interface to iterate through all of the stores that belong to a customer,  
         [0147]    a store component providing access to store specific information, and  
         [0148]    a registry component providing read/write functions for client code to persist general information within a known and managed part of the registry.  
         [0149]    In the exemplary embodiment, the configuration manager module  124  is designed to initially support the stock auditing configuration within a generic object model existing to allow the addition of new data capture requirements/configuration logic without significant change. In the exemplary embodiment, the configuration manager module  124  is responsible for holding a number of independent configurations at any one time. Thus, in the exemplary embodiment, the configuration manager module  124  takes sole responsibility for the files that define the customer, the available configurations and the individual stores known to the customer, as well as all persisted information. In the exemplary embodiment, the configuration manager module  124  has no direct connection to a database or to the registry. In the exemplary embodiment, all strings form within the conform within the configuration manager is the language module. As a separate tool, the configuration manager module  124  provides a configuration wizard that is used by product managers or any dealer/customer with the correct license to generate a configuration. This tool does not interact with the rest of system. The configuration wizard presents a series of screens used to select all of the configurable options for a particular configuration which is then preferably persisted in an .INI file. Once the configuration has been agreed by customer and signed off, it is ready to be imported into installed application.  
         [0150]    Host Interactor  126   
         [0151]    In the illustrative embodiment, host interactor  126  manages all interaction with the customer&#39;s main/host computer. Briefly, it treats all types of input file formats in generally the same manner, and imports and exports data into the system quickly with no loss of integrity. In more detail, host interactor  136  understands the format of the data that is accepted from the host machine and the format of the data that is sent to the host machine after a successful data capture process. If a transformation of the data needs to be performed by an external process, either before data is received or sent, the host interactor  126  is responsible for ensuring that happens. The host interactor decides what is to happen to each file it receives from the host machine (initially this is done through simple file name recognition) and dispatches it to one of a set of module-specific components within the architecture  100 . The host interactor  126  is provided with a set of module-specific host interface components from the nucleus interface.  
         [0152]    In more detail, the host interactor module  126  implements a set of components that are responsible for:  
         [0153]    providing methods to take data supplied by a host or other computer for a given data capture function, check that the data looks valid, and stored the data within the database managing entries for the function  
         [0154]    provide methods to extract data held within a database for a data capture function and place them in a digestible form for an external host or other computer (e.g., normally a file within a directory)  
         [0155]    provide methods to give feedback to the client programmer during a load or save of the data  
         [0156]    manage the running of external batch files on data prior to entering the system and after leaving system (e.g., dependent on the configuration).  
         [0157]    In the exemplary embodiment, the host interactor module  126  includes a host manager, an input interactor and output interactor. The exemplary host manager provides top-level access to the host interactor. The input interactor provides the methods used to input/load data from a host computer for a particular application. An output interactor provides the methods used to output/save data from a host computer for a particular configuration. The host interactor module  126  addresses a number of problems including, for example, hiding the differences between the supported file formats in a localized body that does not affect the implementation of surrounding code; providing an asynchronous loading/saving routine for the clients&#39; use and insuring that no other update to the database or actual read on the database can succeed during the update process.  
         [0158]    In the exemplary embodiment, the host interactor  126  may include additional modules such as, for example:  
         [0159]    consolidated saver  
         [0160]    raw data saver  
         [0161]    location/SKU saver  
         [0162]    expected stock loader  
         [0163]    dual key loader  
         [0164]    valid locations loader  
         [0165]    expected location loader  
         [0166]    attributes loader  
         [0167]    transfers loader.  
         [0168]    In the exemplary embodiment, the host interactive module  126  has direct connections with all of the files within a configuration&#39;s HOSTIN and HOSTOUT directory and has connections via a set of database helpers to the underlying tables. In the exemplary embodiment, the host interactor  126  is the sole piece of software that updates expected information within the database. During the update, all other objects are prevented from accessing the database to prevent conflicts.  
         [0169]    Hand-Held Terminal Interactor  130   
         [0170]    The hand-held terminal interactor manages all interaction with the hand-held terminals, whether they are running batch or RF mode. Briefly, the HHT Interactor  130  provides a generic wrapper on top of the communications software that interacts with the hand-held terminals, and it allows the addition of new communications modules (such as RF) with the minimum of impact on the remaining portions of the system. The hand-held terminal interactor  130  provides a small set of functions for the rest of the architecture  100  to use, including file transfer and a set of remote procedure calls. It also provides functionality for the hand-held terminal to use.  
         [0171]    In more detail, in the exemplary non-limiting embodiment, the hand-held terminal interactor module  130  implements a set of components that:  
         [0172]    generate configuration files to be passed to the hand-held terminal software for the current configuration and count  
         [0173]    generate look up files to be sent to the hand-held terminals while containing SKU, dual key and description information  
         [0174]    maintain information about the locations that have been visited by hand-held terminals during the count  
         [0175]    provide a mechanism to pass files to the hand-held terminal software or intermediate programs  
         [0176]    provide a mechanism to check whether files are available for downloading from the hand-held terminal software  
         [0177]    provide a mechanism to download files from the hand-held terminals and integrate into the overall system.  
         [0178]    In the exemplary non-limiting embodiment, the hand-held terminal interaction module  130  is used by components within the business layer  104 . In the exemplary embodiment, the hand-held terminal interactor module  130  may include a hand-held terminal controller, a communications submodule, a data receiver submodule communicating with a transaction manager having a database connection, a data generator communicating with a location map manager, a configuration generator and a lookup generator. The hand-held terminal interactor module  130  in the exemplary embodiment is solely responsible for managing various configuration files including:  
         [0179]    HHT configuration file  
         [0180]    HHT count configuration file  
         [0181]    primary lookup file  
         [0182]    secondary lookup file  
         [0183]    HHT description file  
         [0184]    location map file  
         [0185]    location map update file  
         [0186]    HHT data file  
         [0187]    In the exemplary embodiment, the HHT interactor module  130  has connections via a set of database helpers to the underlying tables and may the sole piece of software that updates expected information within the database.  
         [0188]    User Manager  122   
         [0189]    In the illustrative embodiment, the user manager  122  holds information about all of the users that are configured to use architecture  100 . Briefly, the user manager module  122  provides a flexible and consistent user management interface to the application code. For each user, a series of properties are defined that defines both who the user is and what the user is allowed to do. In the illustrative embodiment, the properties are split up into three distinct groups for a user:  
         [0190]    (a) There is a set of module independent properties that are understood. These may include, for example, the name and password related to a user.  
         [0191]    (b) There is a set of module dependent properties defined for each module that the user is allowed to use. For example, if stock auditing is supported, one of the properties defines whether the user is able to access area reports. This functionality may be provided by a set of module-specific components.  
         [0192]    (c) There is a set of properties that are not understood by the user manager  122  but manage to provide a central location for them. These properties are normally defined by the user interfaces and include window positions, etc.  
         [0193]    At any one time, the user manager  122  in the illustrative embodiment knows who the current user is and provides functions that all other modules can call to perform security checks and the like.  
         [0194]    In more detail, the exemplary user management module implements a small set of executables providing user management functionality for the business objects in user applications. The user management module  122  in the exemplary non-limiting embodiment is responsible for:  
         [0195]    validating user access  
         [0196]    managing access to specific areas of this system based on the user plus for he has current access rights  
         [0197]    managing a “profile” breach user (e.g., window metrics, most recently files, etc.).  
         [0198]    In the exemplary embodiment, the user management module  122  includes a user executable and a user manager executable. The user manager executable is responsible for validating user log ins, enumerating the list of known users and for general user management tasks such as creating new users and deleting existing users. It is also responsible for managing the user security files which provides information relating to each valid user. In the exemplary embodiment, an instance of the user executable component is created when the user log is on. This executable provides the interface used by the client to access the functionality of the user manager module  122 .  
         [0199]    In the exemplary embodiment, STL map implementation may be used to provide a speedy and flexible solution. The user manager module  122  allows the user privileges to be added flexibly and easily, and is also able to support a number of user definable groups and functions which can be used to define areas of the system that each user is allowed to access. For example, user groups may include administrator, auditor and read-only. User functions may include stock audit. In the exemplary embodiment, the user manager module  122  provides a “database” containing details of known users which may be implemented as a STL map the number of STL sets, persisted within standard Windows.INI files.  
         [0200]    Audit Engine  128   
         [0201]    In the illustrative embodiment, the audit engine  128  receives every event that is to be audited or error that is potentially to be logged. Briefly, audit engine  128  provides a fast mechanism for both business and application code to log events and errors for later analysis. The behavior of the audit engine  128  in the illustrative embodiment is dependent on the operating system, the current user&#39;s privileges and the overall system configuration. For example, as there is no event viewer built into a Windows 98 installation, errors can&#39;t be logged to the event log under those conditions. In the illustrative embodiment, the audit engine has no understanding of the internal details about an error. All it knows is the severity, source of the error, required destination(s) for the error, and a textual string representing the error.  
         [0202]    In more detail, in one exemplary non-limiting embodiment, the audit engine  128  implements a small of executable components providing auditing functionality for the business objects and user applications. In the exemplary embodiment, the module is responsible for:  
         [0203]    providing a generic auditing/error reporting service for client code  
         [0204]    providing specific data capture function auditing/error reporting services as required  
         [0205]    hiding information about where the events are being persisted  
         [0206]    providing additional support for trouble shooting.  
         [0207]    In the exemplary embodiment, the audit engine module  128  includes an audit engine, an event log and the stock audit trail. The audit engine is responsible for allocating both the event log and stock audit trail objects. The event log is used by client code to persist errors, and can also send messages during troubleshooting. The stock audit trail component provides audit support for a single count. In the exemplary embodiment, the audit engine takes sole responsibility for managing the event log file that gets output into the customer directory and is also responsible for insuring that this file never goes beyond a certain size. The audit engine also takes sole responsibility for managing the audit trail files that are output into a particular count directory. The audit engine is capable of logging different types of errors including “rich” errors, debugging strings and output strings to files.  
         [0208]    General Module Requirements  
         [0209]    In the illustrative embodiment, each module that requires an actual data-capture solution (e.g., stock auditing) provides:  
         [0210]    a manager component (this is the top-level logic that provides entry to all functionality for the module),  
         [0211]    a host interaction module (this provides the generic host interaction module with the ability to bolt on module-specific handling of input and output files),  
         [0212]    a hand-held terminal interaction component (this provides the generic hand-held terminal interactor with the ability to bolt on module-specific handling of files to be sent to and from the hand-held terminal).  
         [0213]    Stock Audit Module  132   
         [0214]    In the illustrative embodiment, the stock audit module  132  it generally consists of a series of supporting components that add specific functionality to the components outlined above to allow the customer to perform stock audits. In the illustrative embodiment, the stock audit module  132  itself comprise a number of sub-components including:  
         [0215]    stock audit manager,  
         [0216]    stock audit configuration,  
         [0217]    stock audit user management,  
         [0218]    stock audit host interactor,  
         [0219]    stock audit hand-held terminal interactor (see FIG. 3).  
         [0220]    In the example embodiment, the stock audit manager  202  is the main component of stock audit module  132 . Stock audit manager  202  provides access to a large set of components giving details about all of the counts that are managed by the architecture  100  and the current count. The diagram shown in FIG. 4 is an example detail of the main components within the stock audit manager  202 . In this example, a customer module provides information about the customer that the software is licensed to. A store module is provided such that each customer contains zero or more stores (each store is either a retail or a warehouse store). A count module keeps track of the number of counts that can be performed on a store at a given time. A count gives access to the expected count information (if it exists), all physical count information and functions to manage the count. A count summary module provides a high level summary of the count, e.g., how many good locations there are within the count, the total variances, etc. An attribute list is provided as well. Each count has a set of attributes that are associated with each stock item. This set normally includes, for example, departments and groups. After reconciliation, reports relating to the attributes of stock items can be generated.  
         [0221]    In addition, there are a number of stock items within a count. A stock item may hold expected count and physical count information.  
         [0222]    There are also a number of locations that are defined for a count. Each location knows whether it is a good, bad or unchecked location. A location is associated with a set of location data that have been performed for the location/stock data that is expected to be found.  
         [0223]    Location Mismatches—there are potentially a series of mismatches for a particular location. There are two types of mismatches, namely double count and expected count.  
         [0224]    Mismatch—an individual mismatch contains details for one mismatch.  
         [0225]    Physical Count—a physical count abstracts the differences between a manual count performed on a location and all of the other counts (i.e., actual and double).  
         [0226]    Non-Manual Count—a non-manual count holds a set of lines that have been physically scanned/keyed.  
         [0227]    Manual Count—a manual count simply holds the total number of items that have been counted for the location.  
         [0228]    Exception—each count has a series of exceptions that define the exceptions that have been determined during the count.  
         [0229]    Operator—each operator holds the performance of the actual operator and access to the list of exceptions that the operator is involved with.  
         [0230]    Raw Data—each count is a set of raw data. This provides means with access and a complete set of information that has inputted at all of the hand-held terminals.  
         [0231]    As shown in FIG. 3, the stock audit module  132  in the illustrative embodiment also includes a stock audit configuration component  204 . In the illustrative embodiment, the stock audit configuration component  204  understands everything needed to configure the system to perform stock counts for a particular customer. Information held includes the non-generic structure of the files passed between the personal compute and the hand-held, terminals during batch operations, whether dual keys are supported, etc. In the illustrative embodiment, only the HHT interactor  130  understands all generic information regarding the hand-held terminals. The stock audit configuration component  204  in the illustrative embodiment uses functionality provided by the generic configuration manager  124  to ensure potential change to the persistence mechanism is easily handled.  
         [0232]    The stock audit user management component  206  shown in FIG. 3 understands all of the properties and rules that make up a user performing a stock audit in the exemplary embodiment. Examples of these properties include, for example, whether the current user is able to change the format of any output data, whether the current user is able to view management reports, etc.  
         [0233]    The example stock audit host interactor component  208  is responsible in the illustrative embodiment for adding stock audit related processing of files that are sent to or received from the host machine. In the illustrative embodiment, the stock audit host interactor  208  is the only component that understands the physical organization of the file. It is responsible for transferring expected information into the supporting databases, and for generating the files that are to be sent back to the host.  
         [0234]    In the illustrative embodiment, the stock audit HHT interactor  210  is responsible for adding stock audit related processing of files that are sent to or received from the hand-held terminals. In the illustrative embodiment, the stock audit HHT interactor  210  is the only component that understands the physical organization of the file.  
         [0235]    In more detail, the exemplary stock audit module  132  implements a large set of components responsible for delivering stock auditing to a customer. The module is responsible for:  
         [0236]    performing an actual stock audit/count  
         [0237]    understanding information received from both the hand-held terminals in external computers (e.g., host computers) and sent to the hand-held terminals and external computers  
         [0238]    providing a model for user interfaces to be built to present an ongoing stock audit.  
         [0239]    Components directly relating to stock auditing may be logically grouped into the following:  
         [0240]    configuration  
         [0241]    count management  
         [0242]    active count.  
         [0243]    The configuration components hold the information about all the stock audit configurations that are valid for the customer. In the exemplary embodiment, there is no per count or per store information held within these components. These components provide methods to define a configuration and methods to access this information during a count.  
         [0244]    The count management components understand the number of stores that have had counts performed for them over time and holds historical information relating to the performed counts. These components also understand which counts are currently active within the system.  
         [0245]    The active count components understand the information that supports a stock count that is currently being carried out. They understand the process starting when a new count is created, through the loading of expected data, importing of data from the hand-held terminals, through reconciliation and count completion (including sending data to the host computers).  
         [0246]    In terms of count state, a count (inventory process) can be in a variety of states including, for example, count selected but not started; count in process; count being reconciled; count has been reconciled; count has been completed and can be rewound in case data was incomplete; count has been completed and count details have been deleted; count has been deleted.  
         [0247]    Upon selection of a count, the auditor component initialized the count prior to use. In this operation, the store where the count is to be performed is chosen, either expected count information or stock list has been loaded, and locations and areas are assigned. The hand-held terminals are then primed for use. At this stage, various information (e.g., stock lists, expected quantities, list of locations, list of SKU&#39;s, list of transfers) may be displayed.  
         [0248]    When a count is process, the operators use the hand-held terminals to perform physical counts of the stock. Upon completion of a series of locations, the hand-held terminals download information to system  60 . The auditor component monitors the progress of the count potentially making adjustments/corrections if problems arise. During this stage, information such as a list of stock exceptions and list of physical batches that have been received from the hand-held terminals may be displayed.  
         [0249]    During the count reconciliation phase, some additional processing is performed to realize more general reports. These reports give a higher level of information of what is happening within the count.  
         [0250]    Once the count has been reconciled, further imports of data from the hand-held terminals or the host computer are not allowed. However, downloads from batch hand-held terminals are still enabled. Additional information may be displayed during this phase relating to the count.  
         [0251]    In the exemplary embodiment, to create a new count the client tries to create a stock count instance from the stock audit manager by passing the name of the store where the count is to be performed, the configuration to be used on the name of the count. The stock audit manager validates the supplied configuration information and then creates a directory structure for the new count and takes the tables within the database for the new count. Initially, the number of locations that are available to used is set to zero. This is replaced automatically in the warehouse store when the valid locations file is downloaded. In the retail store, the client enters the number of valid locations and areas.  
         [0252]    Services Layer  102   
         [0253]    As discussed above, the services layer  102  includes a number of different components including, for example:  
         [0254]    nucleus shared library  140 ,  
         [0255]    relational database  142 ,  
         [0256]    communication tools  144 ,  
         [0257]    generic library  146 ,  
         [0258]    Win 32 shared library  148 ,  
         [0259]    language independence  150 .  
         [0260]    Each of those components is discussed in more detail below.  
         [0261]    Language Independence Module  150   
         [0262]    In the illustrative embodiment, the language independence module  150  holds all strings that are used within the business layer  104  and the services layer  102 . Language independence module  150  does not come in the illustrative embodiment, contain any resources that detail user interfaces to be displayed—as this must be maintained by the user interfaces themselves in the illustrative embodiment. The language independence module  150  in the example embodiment contains the strings needed to support a single language (where the default is English). The strings within the business layer  104  and the services layer  102  are logically grouped within a single resource file within the example embodiment. In the illustrative embodiment, the language independence module  150  is implemented as a single dynamic linked library exposing a small API used to return strings to client code.  
         [0263]    Generic Library Module  146   
         [0264]    In the illustrative embodiment, the generic library  146  contains code (e.g., C++) that is platform independent. Classes are contained and implement basic data structures that aren&#39;t tied to any particular operating system. In the illustrative embodiment, the generic library does not contain code that is specific to either the stock audit functionality or to the operating system that the library runs on. The generic library module  146  may be implemented as a static linked library that is linked into all business layer  104  modules.  
         [0265]    Operating System Shared Library  148   
         [0266]    The shared library  148  in the illustrative embodiment contains code (i.e., C++) that is bound to the personal computer operating system. Some of the classes in the illustrative embodiment are tied into MFC, and others sit straight on top of the operating system. In the illustrative embodiment, no code exists within the operating system shared library  148  that is specific to the stock audit functionality. In the illustrative embodiment, the shared library  148  is implemented as a dynamic linked library that exposes a series of classes that can be used through implicit linking by all modules.  
         [0267]    Nucleus Shared Library  140   
         [0268]    In the illustrative embodiment, the nucleus shared library  140  is a library that contains code (e.g., C++) that is specific to the particular system being provided. The nucleus shared library  140  in the exemplary embodiment is implemented as a static linked library that is optionally linked into a module.  
         [0269]    Component Communication  
         [0270]    As shown in FIG. 2, communication tools  144  are used to assist in communication between various components of architecture  100 . In the illustrative embodiment, communication is provided between a number of different components within architecture  100 . FIG. 5 shows example communication couplings between the various components within architecture  100 . The FIG. 5 diagram details the links between the main components within the architecture. An indication of the particular interface technology that may be used to provide such couplings is also shown in the diagram. For purposes of simplification, all of the components within business layer  104  have been treated together.  
         [0271]    In the example embodiment, there are a variety of different methods that can be used to communicate between the hand-held terminals and the architecture  100  within the customer&#39;s application. The differences are based primarily on the amount of time that the terminal can communicate. One method is where the terminal communicates through a terminal cradle connected to the personal computer on which architecture  100  is installed. This connection is only present before and after an actual data capture session performed by an operator. During actual data capture, the terminal is disconnected from the cradle and is out of contact with architecture  100 . Thus, this communication method is known as batch communication.  
         [0272]    A further method is where the hand-held terminal can communicate continuously with the personal computer on which architecture is installed. This is achieved, for example, through the use of a wireless network. As the connection is persistent (subject to the terminal being within the coverage area of the wireless network), the software running on the terminal can be thinner. This method may be know as RF communication.  
         [0273]    In the illustrative embodiment, two distinct solutions are employed to satisfy the batch and RF communications techniques. Generally, the communication mechanism is managed by the HHT interactor component  130  and therefore its coupling to the system is minimized. This allows easier replacement of the communication packages if and when required. In the illustrative embodiment, the HHT interactor  130  is used to completely abstract the different communication solutions.  
         [0274]    In the illustrative embodiment, batch communication is handled through a linkage between the HHT interactor  130  and software running on the hand-held terminals. Generally, two tasks are used to control file transferred between the personal computer and the hand-held terminals. A mechanism used to control these transfers is wrapped by a batch communications component within architecture  100 . Batch communications component exposes a COM interface for the hand-held terminal  130  to pass data to be sent by the hand-held terminals. The HHT interactor  130  exposes a COM interface that the batch communications component connects to in order to pass data received from the hand-held terminals to architecture  100 . When a request is received from the HHT interactor  130  to send data to the hand-held terminals, the batch communications component issues a Win 32 Mail slot to the communications process. This instructs the process to switch to a bulk send protocol and send the files for priming down to the hand-held terminals. The files to send are pulled from a file that is created by the batch communications prior to issuing the mail slot. If the transfer process is not sitting in a priming process, then the transfer process works as a slave and just accepts files that are downloaded from the hand-held terminal. The batch communications component places a file notification object on the directory that the transfer process downloads to. Upon detection of a new file, the file is copied into a holding direction. A notification is fired to the HHT interactor  130  that there is more data available. The FIG. 6 diagram illustrates the software involved with batch communications and the protocols used between the various pieces of software in the illustrative embodiment.  
         [0275]    The RF communication solution in the exemplary embodiment makes use of a server process running on the personal computer. This process supports multiple connections from all of the hand-held terminals that are performing data capture operations. The terminal server communicates using Sockets running over the RF network. The terminal server manages a series of files (grouped for each terminal) that holds the results of a data capture operation as it is performed. In the illustrative embodiment, no direct connection is kept between the sessions running within the terminal server and architecture  100 . The RF communication component exists to manage the running of the terminal server. This component exposes the same COM interface for the HHT interactor  130  to pass data to be sent to the terminal server. The HHT interactor  130  exposes a COM interface the RF communications component connects to in order to pass data received from the hand-held terminals to the architecture  100 . When a request is received from the HHT interactor  130  to prime the hand-held terminals for a data capture operation, the RF communications component issues an IPC mechanism (e.g., the Win 32 Mail slot or COM) to the terminal server process. This instructs the terminal server to temporarily suspend input within the hand-held terminals and update the priming information. If a terminal server is not being primed, then it serves the requests that are received by the connected hand-held terminals. It holds the state of each hand-held terminal and controls the menus, etc. that are displayed on the hand-held terminal. Once a data capture operation has been completed by a particular hand-held terminal, the terminal server copies the file into a holding director. A notification is fired to the hand-held terminal interactor  130  via the RF communications component that there is more data available. If during the running of a data capture operation, a lookup is needed (e.g., SKU lookup), then the files that are held within the terminal servers scope are examined to perform lookup). The diagram of FIG. 7 illustrates the software involved with the RF communications and the protocols used between the various parts of the software in the illustrative embodiment.  
         [0276]    HHT Interactor  130   
         [0277]    In the illustrative embodiment, the HHT interactor acts as a gateway to the RF communications and batch communications components. The interfaces used by all the other business layer  104  and services layer  102  components is exactly the same for both types of communication. The HHT interactor  130  in the illustrative embodiment understands the communication method that is supported on the installation, and is responsible for managing this information. In the illustrative embodiment, no support is built in to run the two communication methods in tandem on a particular installation, although other embodiments could provide an HHT interactor  130  which is capable of interacting in the batch and in the RF communication modes simultaneously.  
         [0278]    Applications Layer  106   
         [0279]    As shown in FIG. 2, the applications layer  106  in this illustrative embodiment include the following components:  
         [0280]    stock audit user interface  110 ,  
         [0281]    a administrator tool  112 ,  
         [0282]    installation program  114 .  
         [0283]    In the illustrative embodiment, the stock audit user interface  110  provides all of the stock auditing user interface components (see more detailed description of same set forth below). In the illustrative embodiment, the stock audit module  132  (within the business layer  104 ) provides a set of components that deliver all of the stock auditing functionality. Administrative tool  112  within the applications layer  106  may also be enhanced with an additional view or views that address the stock audit administration requirements.  
         [0284]    Example Process Flows  
         [0285]    [0285]FIGS. 8, 9,  10  and  11  show example processes performed by architecture  100 . FIG. 8 shows an example process for initializing and logging in to the stock audit module  132 . FIG. 9 shows an example process for terminating a session with the stock audit module  132 . FIG. 10 shows an example process for loading expected data for a stock audit. FIG. 11 shows an example reconciliation process. These example process flows are exemplary only and are non-limiting.  
         [0286]    While the invention has been described in connection with what is presently considered to be the most practical and preferred embodiment, it is to be understood that the invention is not to be limited to the disclosed embodiment, but on the contrary, is intended to cover various modifications and equivalent arrangements included within the spirit and scope of the appended claims.