/
Advanced Settings

Advanced Settings

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

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

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:

  1. 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.

  2. 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).

  3. 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).

    1. 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.

  4. 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).

  5. 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

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:

  1. The template is split into sections based on the comma.

  2. 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.

  3. 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

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

Step

Example

  1. Add "fixed:" to the start of the template

"fixed:"

  1. Add any prefix before the first field if necessary

"fixed:" or "fixed:TEST-"

  1. Add "${fieldname}" to the template

"fixed:${poNum}"

  1. Add any suffix after the field if necessary

"fixed:${poNum}/"

  1. Repeat as required:

 

a. Add another field name "${fieldname2}"

"fixed:${poNum}/${packSlip}"

b. Add another suffix after the field if necessary

 

 

For Dynamic

Step

Example

Step

Example

  1. Add "dynamic:" to the start of the template

"dynamic:"

  1. Repeat as required:

 

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. 

  1. Predefined patterns

    1. 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 > ScannerBar 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 > ScannerTemplate 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

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 

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

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 > ScannerBar 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