Advanced Settings
- 1 Configuring EMW Print functionality for Cloud EPICOR clients
- 2 Barcode Templates
- 2.1 Introduction
- 2.2 Template Types
- 2.2.1 Fixed Templates
- 2.2.2 Dynamic Templates
- 2.3 Template Structure
- 2.3.1.1 STRUCTURE: [type]:[template]
- 2.3.1.2 Type
- 2.3.1.3 Template
- 2.3.2 Sections
- 2.3.3 Field Identifiers
- 2.3.4 Separators
- 2.3.4.1 Fixed Template
- 2.3.4.2 Examples
- 2.3.5 Dynamic Template
- 2.3.5.1 Special Notes
- 2.3.6 For Dynamic
- 2.4 Customisable Barcode Template Functionality
- 2.5 Location Templates
- 2.6 Template Processing
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
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.
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
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.
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
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 | Format |
---|---|---|---|
01 | Global Trade Item Number (GTIN) | partNum (mapped via UOM Product Code) | N2+N14 |
02 | Global Trade Item Number (GTIN) of contained trade items | partNum (mapped via UOM Product Code) | N2+N14 |
10 | Batch or lot number | lotNum, fromLot, toLot | N2+X..20 |
11 | Production date | origMfgDate (YYMMDD) | N2+N6 |
13 | Packaging date | origMfgDate (YYMMDD) | N2+N6 |
15 | Best before date | bestBeforeDate (YYMMDD) | N2+N6 |
17 | Expiration date | expireDate (YYMMDD) | N2+N6 |
21 | Serial Number | serialNum (qty set to 1 [EA]) | N2+X..20 |
310n | Net weight, kilograms | qty [KG] | N4+N6 |
320n | Net weight, pounds | qty [LB] | N4+N6 |
343n | Length or first dimension, yards | qty [YD] | N4+N6 |
30 | Variable count of items | qty [EA] | N2+N..8 |
37 | Count of trade items or trade item pieces contained in logistic unit | qty [EA] | N2+N..8 |
90 | Information mutually agreed between trading partners | packSlip | N2+X..30 |
91 | Company internal information | lineNum | N2+X..90 |
92 | Company internal information | relNum | N2+X..90 |
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)
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)
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)
Move Inventory > Transaction.
Mandatory fields in the template
warehouseCode, binNum (scan populates Warehouse Code and Bin Number)
Move Inventory > Entry.
Mandatory fields in the template (scan opens Move Inventory > Transaction tab)
partNum (partNum and revNum for Parts tracked by revision) 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)
Serial Manager Modal
Mandatory fields in the template
serialNum
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, uom
Process Issue Form (STK-*).
Mandatory fields in the template
partNum
Optional variables set qty, uom, attrSet, fromPCID, fromWarehouse, fromBin, lotNum, toWarehouse, toBin, reference
Kanban Receipts > Entry:
Mandatory:
partNum
Optional:
revNum
altMethod
Adjust Inventory > Entry:
Mandatory:
partNum (not pcid)(partNum and revNum for Parts tracked by revision) on Entry tab
Optional:
qty (or nbrOfPieces, not both at the same time)
uom
warehouseCode
binNum
reasonCode
lotNum
attrSet
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
Issue Material > Entry:
Mandatory:
jobNum
assemblySeq
mtlSeq
Optional:
partNum
attrSet
qty
uom
fromPCID
fromWarehouse
fromBin
lotNum
toWarehouse
toBin
Issue Material > Data Entry:
Variable fields:
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:
partNum
attrSet
qty
uom
fromPCID
fromWarehouse
fromBin
lotNum
toWarehouse
toBin
Part Tracker>Tracker
Mandatory:
partNum