Margin Master Handbook
- Prerequisites
- Firewall and Network Requirements
- Microsoft Edge Download Block
- SQL Server Authentication Setup for IT Administrators
- Antivirus and Endpoint Security Exclusions
- SQL Server Tools
- Install or Upgrade SQL Server Express
- Install or Upgrade SQL Server Management Studio
- Database Connection Setup
- Database Creation
- Database Restore
- Transfer Settings from Database
- Connecting a Second Computer
- A Tour of the Main Window
- The Menus
- The Button Row
- The Main Data Grid
- The Summary Section
- Banners and Badges
- The Options Window
- Store Configuration
- Miscellaneous
- Export Options
- Vendor Settings
- POS / Connections Tabs
- Background Service
- AI Assistant (Experimental)
- How POS Import Works
- Supported Point-of-Sale Systems
- Data Import Workflows
- RockSolid POS Import
- Epicor Eagle FTP Import
- Epicor MySQL Compass Import
- Transact POS Import
- Paladin POS Import
- Falcon POS Import
- Spruce POS Import
- Bistrack POS Import
- RockSolid Max POS Import
- ECS POS Import
- Prosperity POS Import
- Catalyst POS Import
- Westlake POS Import
- MI9 POS Import
- AS/400 POS Import
- CounterWorks POS Import
- Dimension POS Import
- PacSoft POS Import
- ProStix POS Import
- Sympac POS Import
- Propello POS Import
- EagleVision POS Import
- MySQL/Compass Connection Configuration
- ECI VPN Requirement (Spruce, RockSolid MAX)
- Propello POS Integration Guide
- MI9 Data Pipeline — Import to Main Table
- Troubleshooting: Epicor Import Brought In 0 SKUs
- PACE POS Import
- Advantage POS Import
- General Store POS Import
- J-3 POS Import
- KeyStroke POS Import
- AutBusSystem POS Import
- Tomax POS Import
- Enterprise POS Import
- Computakey POS Import
- Redisell POS Import
- DART POS Import
- MIB POS Import
- Substruct POS Import
- DMAS POS Import
- RODS POS Import
- Procom POS Import
- Agility POS Import
- Acumen POS Import
- Cruise POS Import
- LSandE POS Import
- Retalix POS Import
- DIBCorp POS Import
- GMROI POS Import
- ECi Advantage POS Import
- Sunray POS Import
- ActivantAutomotive POS Import
- IBS POS Import
- Versys POS Import
- RMS POS Import
- TAMS POS Import
- Integrasoft POS Import
- Dynamic POS Import
- Microsoft ARS POS Import
- CDS POS Import
- Spartan POS Import
- Nitterhouse POS Import
- Jeds POS Import
- Theisens POS Import
- Emery Jensen POS Import
- SMS Pro POS Import
- Burdens POS Import
- Intact POS Import
- Bloom Retail POS Import
- NCR Counterpoint POS Import
- Horizon POS Import
- Cloud Vendor Data Sync
- Data Aging and Freshness Warnings
- Resetting Vendor and POS Data
- Rebuild Data and Rebuild Selection Lists
- Troubleshooting Vendor Sync
- Understanding the Strategy Hierarchy
- Pricing Strategies
- Creating a Strategy Step
- Updating and Deleting Steps
- Reviewing a Strategy and Running It
- Shared (Premade) Strategies
- SKU-Level Exceptions
- Manage Custom Groups
- Strategy Execution Cloud Tracking
- Importing from Excel
- Cost Break Analysis
- Cost Break Strategies
- Min/Max Strategies
- Strategy Backup & Restore
- Add Items from Catalog
- Store Grouping
- Data Diagnostics and Missing Index Recommendations
- System Diagnostics
- Margin Master Cannot Save Settings
- SQL Server 2025 Express vs. Full License
- Support Issue Management
- Catalog Lookup
- What's New After an Update
- Version History
- Documentation and the Help Buttons
- CTLD — Do It Best Catalog File
- MARGIN_MASTER — Ace Catalog File
- PCDITEMXREF — Do It Best SKU Classification File
- SAP_ZONE_PRICE_MARGIN_MASTER — Ace Zone Pricing File
- PCDPRODCLASS — Do It Best Product Classification Hierarchy File
- SAP_STORE_DEPT_ZONE_MARGIN_MASTER — Ace Store Zone Assignment File
- Taxonomy — Ace Product Classification File
- Mapp_Pricing — Ace MAP & IMAP Pricing File
- margin_mstr_plano — Ace Planogram File
On This Page
MI9 POS Import
What is this?
MI9 is a retail management system used by larger multi-store operations. Margin Master imports MI9 data files and builds team-based pricing analysis tables, supporting the most fields of any POS system at over 75 fields.
Import File Format
| Property | Value |
|---|---|
| Delimiter | Tab (\t) |
| File pattern | MM*.txt (e.g., MM_Team1.txt, MM_Team2.txt, MM_Unsequenced.txt) |
| Header row | Yes (1 row) |
| Total fields | 75+ |
How Import Works

The export file is read from the Import Path set under Tools > Options > Miscellaneous:


Use a single main table (one row per SKU per store) — the main-table processing mode (see below).
Place your MI9 export files in the configured import folder. Files follow the
MM*.txtnaming pattern.Margin Master reads each file using the SepReader library for high-performance parsing.
Each row is mapped to the Margin Master data model using hardcoded field mappings (no external
.mapor.fmtfiles).Data is bulk-merged into the database using Z.BulkOperations in batches of 10,000 rows.
Files are processed in batches of 50,000 records at a time for memory efficiency.
If a batch fails, Margin Master retries up to 5 times with increasing wait times between attempts.
After the import, the main tables are rebuilt in whichever processing mode is selected on the MI9 tab (below). The import itself is the same in both modes.
Main Table Processing Mode
The MI9 tab under Tools > Options > POS / Connections has one setting, Use a single main table (one row per SKU per store). It chooses how the main tables are laid out; it does not change what the strategies do or the prices they produce.
- Off (the default) — multi table processing. Margin Master builds one main table per team (for example
StoreGroup_Core_mainTable), with one row per SKU per team: cost is averaged and on-hand is summed across the team's stores. Selecting a store picks that team's table. - On — single main table processing. Margin Master builds one table,
Mi9_mainTable, with one row per SKU per store. Selecting a store filters that table by store number instead of choosing a table. This is what makes store-level pricing possible, and it keeps one set of indexes instead of one per table.
Changing the setting does nothing until you close the Options window. You are then asked to confirm, and the confirmation names every main table that will be replaced. If you answer Yes, Margin Master builds the new tables first and removes the old ones only once the build has succeeded, so a failed rebuild leaves everything as it was. No keeps the current mode; Cancel returns to Options.
Either way the rebuild reads every store's point of sale data, can take several minutes, and discards all current pricing work — future prices, applied rules and locks. Re-run your strategies afterwards.
Field Mapping
Core Fields
| MI9 Field | Margin Master Field | Notes |
|---|---|---|
| StoreNumber | StoreNumber | Store identifier |
| SKU | SKU | Product identifier |
| AceSku | AceSku | Priority SKU for Ace Hardware stores |
| Description | Description | Product description |
| Department | Department | Department code |
| Class | Class | Product class |
| Location | Location | Bin/shelf location |
Pricing Fields
| MI9 Field | Margin Master Field | Notes |
|---|---|---|
| RetailLevel1–5 | RetailLevel1–5 | Retail price levels |
| RetailZone | RetailZone | Zone retail price |
| Level1–5Zone | Level1–5Zone | Zone-level prices |
| StoreCost | StoreCost | Store cost |
| AVGCost | AVGCost | Average cost |
| ReplacementCost | ReplacementCost | Replacement cost |
| CurrentPrice | CurrentPrice | Uses cascading logic to determine value |
| FuturePrice | FuturePrice | Planned future price |
CurrentPrice cascading logic: MI9 uses a priority-based approach to determine the current price from multiple price level fields.
Sales History Fields
| MI9 Field | Margin Master Field | Notes |
|---|---|---|
| History1–12 | History1–History12 | Monthly sales history |
Ace-Specific Fields
| MI9 Field | Margin Master Field | Notes |
|---|---|---|
| VendorOwner | VendorOwner | Vendor owner code |
| VendorNumber | VendorNumber | Vendor number |
| VendorName | VendorName | Vendor name |
| Discontinued | Discontinued | Discontinued flag |
| PrivateLabel | PrivateLabel | Private label indicator |
Status Fields
| MI9 Field | Margin Master Field | Notes |
|---|---|---|
| ProductStatus | ProductStatus | Product-level status code |
| StoreProductStatus | StoreProductStatus | Store-level status code |
| BlockedAutoChanges | BlockedAutoChanges | Blocks automatic price changes |
Status codes include: A (Active), B (Blocked), C (Clearance), D (Discontinued), N (New), R (Return), S (Seasonal), W (Warehouse), X (Inactive).
Tips
- Team-based tables: MI9 groups stores into teams. Margin Master builds a separate main table for each team (e.g.,
StoreGroup_Team1_mainTable) rather than one table per store. - Store configuration: Each MI9 store is configured in the Mi9StoreManager table with a BranchCode, GroupName, and Excluded flag. Stores marked as Excluded are skipped during import.
- AceSku priority: For Ace Hardware stores, MI9 files include an
AceSkufield. When present, this takes priority over the standardSKUfield for vendor catalog matching. - Large file handling: MI9 files can be very large. Margin Master processes them in 50,000-record batches and bulk-merges in 10,000-record batches to manage memory.
- Ace Hardware pairing: MI9 supports Ace Hardware vendor pairing through the VendorOwner, VendorNumber, and VendorName fields.
Common Questions
Q: What do the Team1, Team2, and Unsequenced file names mean? A: These correspond to store groups configured in your MI9 system. Each group gets its own main table in Margin Master. Stores not assigned to a specific team appear in the Unsequenced file.
Q: Why is my store not appearing in the import? A: Check the Mi9StoreManager configuration. The store may be marked as Excluded, or its BranchCode may not match the data in the import file.
Q: What happens if an import batch fails? A: Margin Master automatically retries up to 5 times with exponential backoff (increasing wait times). If all retries fail, the error is logged and the remaining batches continue processing.
