Configuring EMW Print functionality for Cloud EPICOR clients
1. Create new or use existing EPICOR user/s with access to Companies and Sites for which the printing function is to be set up.
Unless sites are at the same physical location there should be a different user set up for each Site in each Company for which EMW print functionality is to be available.
2. In EPICOR Printer Maintenance, define printers for individual Sites for each Company.
EMW will list all available printers so it is advisable that Site specific printer/s is prefixed with Site code followed by “~” in the Description.
3. In EMW, go to Settings and General Settings, cloud customers will be able to specify EPICOR user name(set up in point 1) for currently logged in Site.
4. To successfully print from EMW connected to cloud EPICOR server, an EPICOR session has to be established by logging in to the EPICOR client at the site to which EMW is logged in, with the username configured.
Both EMW and the EPICOR client has to be logged in to the same company.
Barcode Templates
Introduction
Barcode Templates is a new feature for EMW that allows users to specify customizable formats for barcodes in order to extract desired data. They can be used in two different ways which are either Fixed or Dynamic.
The Barcode Templates functionality is still in development and instructions listed here may change or no longer work in upcoming releases.
If you are scanning on a page that has a template specified, it will attempt to match the data scanned to the template. If the structure does not match, it will then ignore the template and treat the data as a normal scan (including checking whether the Dividing Character(s) are used within it). This can have unexpected effects if the template has the same character(s) as the Dividing Character(s) setting and the template match fails.
Template Types
Barcode Template can be specified as one of two possible types: Fixed or Dynamic.
Fixed Templates
Fixed Templates used when a barcode structure will not change. The template must match the structure of the barcode from left to right.
Barcode | Template | Result |
---|---|---|
4234-553 | fixed:${poNum}-${packSlip} | poNum = 4234 packSlip = 553 |
Dynamic Templates
Dynamic Templates may be used when a barcode has unique identifiers for each field and some kind of separator character that can be used to identify the end of a field. The template does not need to match the left-to-right structure of the barcode as long as the unique identifiers are set up correctly.
Barcode | Template | Result |
---|---|---|
#014234#02553# | dynamic:#01${poNum}#,#02${packSlip}# | poNum = 4234 packSlip = 553 |
Template Structure
STRUCTURE: [type]:[template]
Type
Every template MUST begin with a type identifier. This will be the name of the type along with a colon.
Template
After the type, the template itself is specified. Templates are composed from three components: sections, field identifiers and separators.
Sections
Each section is made up of a combination or one or more field identifiers along with any separators that are required. Fixed templates can only ever have one section. Dynamic barcodes can have one or more sections, which are separated by commas.
A fixed section can have multiple field identifiers in the one section, whereas dynamic sections can only have one field identifier per section.
Field Identifiers
Every field identifier is defined by a dollar sign and left squiggly bracket, follow by the program-defined field name, followed by a right squiggly bracket (i.e. “${fieldname}”). The dollar sign and left bracket are used to identify the start of the field identifier. The field name must match a pre-defined list of supported field identifiers (listed at the top of the page). This field name is what the relevant barcode section is mapped to.
NOTE: Maximum length of fields is not supported in 3.2.7, however this feature should be coming in from version 3.3.#. Once this feature is included, it can be used by specifying the field name as ${fieldname:5} to specify a max length of five characters. If a suffix is found before the fifth character, the field mapping will be shorter. The maximum length value is optional and fields can still be specified without the ":5" in order to have no maximum length.
If a barcode has a field that you don't want to be used, use the field identifier of “${IGNORE}” for it.
Separators
Any characters that are outside of these field identifiers are considered separators and are used to separate the fields. These characters can be of any length and can exist both before and after the first and last field identifier respectively. A separator can be considered both a suffix of one field identifier and a prefix of another.
Fixed Template
For fixed barcodes, the type is "fixed:". Note that the use of lowercase characters is required.
Fixed templates have a single section that must be defined in a left-to-right order. The template has strict matching requirements and the relevant barcode must match exactly.
The logic for parsing fixed templates is as follows:
Once the type of barcode has been checked, the app will then look for any separator that exists before the first field (e.g. the “PREAMBLE-” in one of the example). This can be blank.
Once the initial separator has been matched, it will then extract the field name from the field identifier (along with an optional max length in 3.3.0 onward).
It then checks the template for any separator that exists after the field identifier. Once this is found, it then matches the initial separator (a.k.a the prefix separator) to the barcode, then reads any data from that point onward into the field until the next separator is found (the suffix separator).
For the first example, it will check after the the type “fixed:” to find there is no prefix separator. It will then use field1 for the field name and the “-” as the suffix. When parsing the barcode itself, it starts from the start until it find the suffix separator to then map the value of 111 to field1.
If no suffix separator exists, it will map from the current point to the end of the barcode (i.e. for the 333 part of the barcode).
Once it has mapped a field identifier, it will then continue from that point for the next field identifier until all are mapped.
Examples
Barcode | Template | Result |
---|---|---|
111-222-333 | fixed:${field1}-${field2}-${field3} | field1 = 111 field2 = 222 field3 = 333 |
PREAMBLE-ab777$i999*** | fixed:PREAMBLE-${poNum}$i${packSlip}*** | poNum = ab777 packSlip = 999 |
ABC123456 | ixed:${poNum}123${packSlip} | poNum = ABC packSlip = 456 |
TEST-4295/7474--123 | fixed:TEST-${poNum}/${IGNORE}--${packSlip} | poNum = 4295 packSlip = 123 |
Dynamic Template
The primary difference between fixed and dynamic barcodes is that dynamic barcodes specify multiple small sections which can be used to map to any part of a barcode, instead of having to having to map to a 1-to-1, left-to-right relationship.
Each section must have a unique prefix separator (i.e. #01, #02, etc), followed by the field identifier and then a suffix separator. The suffix separator does not need to be unique, and may often contain a character that is also used as the prefix for other separators (i.e. another #).
Instead of parsing the barcode only once, dynamic templates will check the entire barcode scan for each section. The logic is as follows:
The template is split into sections based on the comma.
For each section, the app will search through the entire barcode value until it finds the prefix separator. It will then map the following data into the field name until it finds the suffix character.
Instead of fixed barcodes, which would then continue from that point for the next field, the app will search from the start of the barcode again for the next section.
The example above would be used for a barcode that looks like this: #011234#025555#. Note that the hash in bold is used both as the suffix to indicate the end of the first field and also part of the prefix for the unique identifier for the next section.
The suffix at the end of a section can be left blank if you know for certain that the field will always be the last one in a barcode. Since the suffix wouldn’t exist, the app would simply add everything from the where the prefix separator is up to the end of the barcode into the specified field.
Examples
Barcode | Template | Result |
---|---|---|
1ABBD~2$1200.50 | dynamic:1${poNum},2${packSlip} | poNum = ABBD packSlip = $1200.50 |
~1ABBD~2$1200.50~38877 | dynamic:1${poNum},~2${packSlip} | poNum = ABBD packSlip = $1200.50~38877 |
1114295111222123222 | dynamic:222${poNum}222,111${packSlip}111 | poNum = 123 packSlip = 4295 |
Special Notes
Tabs
Support for using tabs within a template is not in the 3.2.7 release but will be coming out from 3.3.# onward (same as support for maximum length fields).
If you wish to use tabs within your barcode as separators between the fields, it will have to be represented in the template with "\TAB". Tabs that are added directly into the template will not work.
Incorrect: fixed:${poNum} ${packSlip}
Correct: fixed:${poNum}\TAB${packSlip}
Steps to Create Your Own Template:
For Fixed
Step | Example |
---|---|
| "fixed:" |
| "fixed:" or "fixed:TEST-" |
| "fixed:${poNum}" |
| "fixed:${poNum}/" |
| |
a. Add another field name "${fieldname2}" | "fixed:${poNum}/${packSlip}" |
b. Add another suffix after the field if necessary |
For Dynamic
Step | Example |
---|---|
| "dynamic:" |
| |
a. Add the unique identifier prefix before field name | "dynamic:#01" |
b. Add "${fieldname}" to the template | "dynamic:#01${poNum}" |
c. Add a suffix to identify the end of the field (can be ignored if the field will always be the last field in the barcode) | "dynamic:#01${poNum}#" |
d. Add a comma (UNLESS this is the last section in the barcode, in which case do not add a comma) | "dynamic:#01${poNum}#,#02${packSlip}#" |
Customisable Barcode Template Functionality
USER CAN VERIFY WHAT, IF ANY, MULTISCAN FUNCTION EXISTS ON ANY PAGE BY
Opening the Right-Hand menu and selecting Scanner Subscriptions menu item
Multiscan Types
There are 2 different types of multiscan functionality available in EMWW.
Predefined patterns
Predefined pattern of field values programmed directly on the page,
e.g Issue Assembly By ID, Bin Tracker, Lot Tracker etc.
b. predefined patterns of field values selected from a list of available patterns in settings that is then applied to the relevant page i.e., Pack Line in Pack Out
(Page means current open form or an active tab on multi tab form)
One configurable element, of otherwise fixed pattern, is Dividing Character(s) in in Settings > Scanner – Bar Codes section.
2. A template-based pattern that is defined against a page implementing template multi scan. Templates can be defined for available pages in
Settings > Scanner – Template section
Following pages currently support template definitions:
PO Receipt > Entry
PO Receipt > Receipt
Move Inventory > Entry
Move Inventory > Transaction
Container Receipt > Receipt
Serial Manager Modal
Process Issue Form (STK-*)
Customer Shipment> Pack Line
Kanban Receipts> Entry
Transfer Order Ship > Ship Line
Adjust Inventory > Transaction
Issue Material > Entry
Issue Material > Data Entry
Return Material > Entry
Return Material > Data Entry
Location Templates
Location Templates are templates of values that are going to be applicable for Warehouse and Bin combinations. With a single scan, the Location Template will be able to populate the Warehouse Code and Bin Number field values in EKW.
1. Tap on the Menu icon located in the upper left side of the screen to pull up the Main Menu.
2. Under the Main Menu, tap on Settings and select Scanner.
3. Edit the Location templates in the Location Template field.
The Location Template field supports Fixed and Dynamic Template and GS1 format.
4. Once set, a single scan can populate the Warehouse Code and Bin Number fields in the applicable pages.
5. Location Templates are available in these locations:
Issues and Returns
Issue Assembly > Data Entry tab
Issue Material > Data Entry tab
Issue Misc Material > Process tab
Return Assembly > Data Entry tab
Return Material > Data Entry tab
Return Miscellaneous Material > Process tab
Issue Assembly By ID > Process tab
Issue Material By ID > Process tab
Return Assembly By ID > Process tab
Return Assembly By ID > Process tab
Material Queue
Process By ID > Process tab
My Material Queue > Process tab
My Outbound Order > Process tab
Auto Select Trans > Process tab
Note: Scan Sequencing on My Material/My Outbound Orders > Process form disables location template scanning on that page
Inventory
Adjust Inventory > Transaction tab
Move Lot
Moves / Requests
Move Material Request > Transaction tab
Shipping
Transfer Order Ship > Line tab
Template types available for use are:
Fixed
Fixed templates are used when a barcode has a fixed structure which does not change. The defined template must match the structure of the barcode from left to right.
Dynamic
Dynamic templates may be used when a barcode has unique identifiers for each field and separator character that can be used to identify the end of a field. The template does not need to match the left-to-right structure of the barcode as long as the unique identifiers are set up correctly.
GS1
GS1 templates are like dynamic ones but use GS1 standard AI codes as unique identifiers for each field and field’s standard definitions to read values. The template does not need to match the left-to-right structure of the barcode as long as the unique identifiers are set up correctly.
Template Structure
Every template MUST begin with a type identifier. This will be the name of the type along with a colon. After the colon, the barcode structure is specified. This is split into fields and separators.
Every field identifier must follow this structure: ${fieldname}. The values in the brackets are supported fields on the page for which template applies (e.g. ${poNum}).
These field identifiers are used to indicate which data in the barcode should be mapped to the field values.
Any characters that are outside of these field identifiers are used to separate the fields. These characters can be of any length and can exist both before and after the first and last field identifier respectively.
If a barcode has a field that you don’t want to be used, use the field identifier of ${IGNORE} for it.
Fixed
For fixed barcodes, type identifier is “fixed:” in lowercase.
After the colon, the structure of the barcode itself is defined. As mentioned previously, this structure is read from left to right and must match entirely.
Examples
Barcode | Template | Result |
---|---|---|
111-222-333 | fixed:${field1}-${field2}-${field3} | field1 = 111 field2 = 222 field3 = 333 |
PREAMBLE-ab777$i999*** | fixed:PREAMBLE-${poNum}$i${packSlip}*** | poNum = ab777 packSlip = 999 |
ABC123456 | fixed:${poNum}123${packSlip} | poNum = ABC packSlip = 456 |
TEST-4295/7474--123 | fixed:TEST-${poNum}/${IGNORE}--${packSlip} | poNum = 4295 packSlip = 123 |
Dynamic
For dynamic barcodes, type identifier is “dynamic:” in lowercase.
Dynamic templates allow you to specify identifiers for fields individually, instead of as a part of the entire barcode. Any number of fields may be specified, as long as they exist in the barcode.
Dynamic barcodes are split into sections which are separated by commas. Only one field identifier is allowed per section.
Within each section, the field identifier must be prefixed with a unique separator identifier so that the relevant data can be found (i.e. #01, ~02, etc). A field identifier does not have to be suffixed with a separator character(s), but if not, then all data from the prefix (#02) to the end of the barcode will be included in the field. This may be used to your advantage if you know for certain that certain fields will always be at the end of the barcode and do not need a separator at the end.
Example Barcode: #011234#03666#054295#079999999#10123#.
Example template: dynamic:#05${poNum}#,#10${packSlip}#.
In the example above, EMWW will ignore the dynamic: tag and separate the remaining template by commas, leaving us with two sections: #05${poNum}# and #10${packSlip}#. It will then go through the barcode twice. The first time, it will search until it finds #05. It will then map all data from there until it finds a #. This will result in the 4295 being mapped to poNum. It will then go through the barcode again looking for #10, then map the data from there until it finds the #, resulting in packSlip being set with 123.
Further Examples
Barcode | Template | Result |
---|---|---|
~14274~2$1200.50~ | dynamic:~1${poNum}~,~2${packSlip}~ | poNum = 4274 packSlip = $1200.50 |
~14274~2$1200.50~38877 | dynamic:~1${poNum}~,~2${packSlip} | poNum = 4274 packSlip = $1200.50~38877 |
1114295111222123222 | dynamic:222${poNum}222,111${packSlip}111 | poNum = 123 packSlip = 4295 |
GS1
For GS1 barcodes, type identifier is “GS1:” in uppercase.
GS1 Application Identifiers (AIs) are prefixes used to define meaning and format of data fields contained in the barcode.
GS1 templates use AI codes as field identifiers effectively mapping bar code values prefixed with a given code to template fields,
Example Barcode: 019327782007499731030195131522061010201611119
Example template: GS1:01${partNum}320n${qty}310n${qty}11${origMfgDate}13${origMfgDate}15${bestBeforeDate}10${lotNum}21${lotNum}20${IGNORE}
In the GS1 template more than one AI could be mapped to the same destination field in EMWW, last one will be used if more than one found in the barcode.
AI codes 310n and 320n imply unit of measure KG and LB respectively
If the UOMs are configured in EPICOR differently an error will occur indicating that unit of measure could not be found
AI codes that should appear in the barcode but are not relevant and do not need be processed can be set to {IGNORE} e.g., AI 20 is set to be ignored.
GS1 AI code mappings to EPICOR
AI (Application Identifiers) | Description | EKW field |
---|---|---|
01 | Global Trade Item Number (GTIN) | partNum (mapped via UOM Product Code) |
02 | Global Trade Item Number (GTIN) of contained trade items | partNum (mapped via UOM Product Code) |
10 | Batch or lot number | lotNum, fromLot, toLot |
11 | Production date | origMfgDate (YYMMDD) |
13 | Packaging date | origMfgDate (YYMMDD) |
15 | Best before date | bestBeforeDate (YYMMDD) |
17 | Expiration date | expireDate (YYMMDD) |
21 | Serial Number | serialNum (qty set to 1 [EA]) |
310n | Net weight, kilograms | qty [KG] |
320n | Net weight, pounds | qty [LB] |
343n | Length or first dimension, yards | qty [YD] |
30 | Variable count of items | qty [EA] |
37 | Count of trade items or trade item pieces contained in logistic unit | qty [EA] |
90 | Information mutually agreed between trading partners | packSlip |
91 | Company internal information | lineNum |
92 | Company internal information | relNum |
240 | Additional product identification assigned by the manufacturer | partNum |
241 | Customer part number | partNum |
250 | Secondary serial number | serialNum or lotNum, fromLot, toLot |
400 | Customer purchase order number | poNum |
(GTIN is mapped to partNum but this is rarely the actual Part Num in EPICOR, however, GTIN can be stored against a Part as Product Code. When using GS1 template Handle GS1-128 barcodes using industry standard format setting must be turned OFF in in Settings > Scanner – Bar Codes section)
Template Processing
PO Receipt > Entry
Mandatory fields in the template (scan opens PO Receipt > Receipt tab):
poNum, packSlip
Optional fields set1 (when provided will open PO Receipt > Line tab)
partNum, lineNum, relNum
(If lineNum and/or relNum not provided first item in the list matching the partNum will be opened)
Optional fields set2 (when provided with set1 will populate values in PO Receipt > Line tab
qty, uom, lotNum
(Only provided values will be used to populate relevant fields)
With a single scan of the bar code containing mandatory and optional variables, it is possible to populate text box values in Entry tab, select the receipt line and open Line tab and finally, populate text boxes in Line tab with provided values.
GS1 template can be defined for this page, poNum and packSlip fields can respectively be mapped to AI 400 and 90 contained in GS1 barcode. Optional variables lineNum and relNum can be mapped to AI 91 and 92.
PO Receipt > Receipt
Mandatory fields in the template (scan opens PO Receipt > Line tab tab):
partNum
Optional variables set1 (when provided will open PO Receipt > Line tab)
lineNum, relNum
(If lineNum and/or relNum not provided first item in the list matching the partNum will be opened)
Optional variables set2 (when provided with set1 will populate values in PO Receipt > Line tab
qty, uom, lotNum
(Only provided values will be used to populate relevant fields)
With a single scan of the bar code containing mandatory and optional variables, it is possible to select the receipt line in Receipt tab and open Line tab and finally, populate text boxes in Line tab populated with provided values.
GS1 template can be defined for this page, lot attribute fields such as bestBeforeDate, origMfgDate, cureDate, expireDate and mfgLot can be mapped to relevant AI values contained in GS1 barcode.
Container Receipt > Receipt
Mandatory fields in the template (scan opens Container Receipt > Line tab tab):
partNum
Optional variables set1 (when provided will open Container Receipt > Line tab)
lineNum, relNum
(If lineNum and/or relNum not provided first item in the list matching the partNum will be opened)
Optional variables set2 (when provided with set1 will populate values in PO Receipt > Line tab
qty, uom, lotNum
(Only provided values will be used to populate relevant fields)
With a single scan of the bar code containing mandatory and optional variables, it is possible to select the receipt line in Receipt tab and open Line tab and finally, populate text boxes in Line tab populated with provided values.
GS1 template can be defined for this page, lot attribute fields such as bestBeforeDate, origMfgDate, cureDate, expireDate and mfgLot can be mapped to relevant AI values contained in GS1 barcode.
Move Inventory > Transaction.
Mandatory fields in the template
warehouseCode, binNum (scan populates Warehouse Code and Bin Number)
By default the "To" locations fields will be populated from template scan. Also when the focus on "To" location, the value pair that is scanned will populate the "To" locations fields.
With the focus on "From" location, the value pair that is scanned will populate the "From" locations fields.
Move Inventory > Entry.
Mandatory fields in the template (scan opens Move Inventory > Transaction tab)
partNum OR pcid
Optional variables set (when provided will populate values in Move Inventory > Transaction tab)
qty, uom, fromWarehouse, fromBin, toWarehouse, toBin, fromLot, toLot, serialNum
Only toWarehouse, toBin are required with pcid
(Only provided values will be used to populate relevant fields)
With a single scan of the bar code containing mandatory and optional variables, it is possible to populate text box values in Entry tab, open Transaction tab and finally, populate text boxes in Transaction tab with provided values including lot.
GS1 template can be defined for this page, fromLot OR toLot fields can be mapped to AI 10 values contained in GS1 barcode. Quantity in EA is read from AI 37 and weight quantities from AI 310n or 320n. When Serial number AI 21 is present and mapped to serialNum, field quality is defaulted to 1 and UOM to EA
Serial Manager Modal
Mandatory fields in the template
serialNum
The template needs to be defined so that only serial number is extracted from bar code that may or may not contain additional elements
Customer Shipment > Pack Out > Pack Line
Mandatory fields in the template
partNum
Optional variables set lineNum, relNum, warehouseCode, binNum, lotNum, jobNum, kitNum, kitRevNum, orderNum, qty
With a single scan of the bar code containing mandatory and optional variables, it is possible to populate values in Pack Line tab.
GS1 template can be defined for this page, partNum field can be mapped to AI 01 or AI 02, qty field can be mapped to AI 37 and lotNum field can be mapped to AI 10 value contained in GS1 barcode.
Process Issue Form (STK-*).
Mandatory fields in the template
partNum
Optional variables set qty, uom, fromPCID, fromWarehouse, fromBin, lotNum, toWarehouse, toBin, reference
With a single scan of the bar code containing mandatory and optional variables, it is possible to populate values in Process tab and scan validate Part Num and other set scan validations.
GS1 template can be defined for this page, partNum field can be mapped to AI 01 and lotNum field can be mapped to AI 10 value contained in GS1 barcode.
Kanban Receipts > Entry:
Mandatory:
partNum
Optional:
revNum
altMethod
GS1 is not applicable for this template
Adjust Inventory > Transaction:
Mandatory:
partNum (not pcid) on Entry tab
Optional:
qty (or nbrOfPieces, not both at the same time)
uom
warehouseCode
binNum
reasonCode
lotNum
attrSet
GS1 is not applicable for this template
Transfer Order Ship> Ship Line (Add List)
Mandatory:
partNum
Optional:
lineNum (the 1st line number will be picked automatically in the record, unless specified)
qty
uom
warehouseCode
binNum
GS1 is possible for this template.
partNum field can be mapped to 02, 240 or 241, qty can be mapped to 37, 310n, 320n
Issue Material > Entry:
Mandatory:
jobNum
assemblySeq
mtlSeq
Optional:
partNum
attrSet
qty
uom
fromPCID
fromWarehouse
fromBin
lotNum
toWarehouse
toBin
Issue Material > Data Entry:
Variable fields:
Two of these variable fields must be filled in to be considered a template
partNum
attrSet
qty
uom
fromPCID
fromWarehouse
fromBin
lotNum
toWarehouse
toBin
Return Material > Entry:
Mandatory:
jobNum
assemblySeq
mtlSeq
Optional:
partNum
attrSet
qty
uom
fromPCID
fromWarehouse
fromBin
lotNum
toWarehouse
toBin
Return Material > Data Entry:
Variable fields:
Two of these variable fields must be filled in to be considered a template
partNum
attrSet
qty
uom
fromPCID
fromWarehouse
fromBin
lotNum
toWarehouse
toBin
Part Tracker>Tracker
Mandatory:
partNum
Points to note regarding lot number creation using GS1 template.
If neither AI code 10 or 21 are found in the barcode and no potential attribute fields (11, 12, 13, 15) are found or no mapping to any LOTATTR field set to IGNORE in the template then
DO NOTHING – if part is lot tracked and may or may not require attribute entry all entries need to be entered manually.
If neither AI code 10 or 21 are found in the barcode but any potential attribute fields (11, 12, 13, 15) is found
NEXTLOT button press is simulated (lot number generated) Attribute Entry form opens with prefilled date value from the scan.
AI code 10 or 21 found but mapped and mapped to {mfgLot} which is lot attribute (date lot attributes may or may not be present)
NEXTLOT button press is simulated (lot number generated) Attribute Entry form opens with prefilled date value from the scan.
AI code 10 or 21 found and mapped to {lotNum} (date lot attributes may or may not be present)
Lot Number in Line tab is populated with the scanned/mapped value and lot created. Attribute Entry form opens depending on the Part Lot Attribute configuration
All attributes set to “Not Tracked” - Attribute Entry Form will not open, irrespective of whether attribute dates present in the barcode or not
At least one attribute set as Tracked or Mandatory - Attribute Entry Form will open values that can be populated will be populated
5. Bar code with previously defined Lot Number is scanned
Lot number is accepted – Attribute Entry form does not open. (i.e. equivalent to current behaviour when existing lot is entered/scanned or selected from the list)