xkzero Announces Direct Store Delivery System for Sage 100 ERP

[a version of this blog post was originally published as a press release via PR Web March 31, 2015]

facebooktwittergoogle_plusredditpinterestlinkedinmail

Chicago, Illinois (PRWEB) March 31, 2015

ERP and mobile software developer xkzero has announced the availability of xkzero Mobile Commerce software integrated natively into Sage 100 ERP. xkzero Mobile Commerce provides Route Selling and Direct Store Delivery (DSD) automation, primarily for companies who sell business to business (B2B) utilizing in-house sales teams and with their own fleet of delivery reps and vehicles.

Paul Ziliak, xkzero co-founder, says demand for xkzero Mobile Commerce (XMC) has exceeded expectations, “We announced the release of XMC for Sage ERP X3 at Sage Summit 2014. We had already generated great customer success and interest from the X3 channel, but we did not anticipate the demand we’ve also seen from Sage partners and end user customers with Sage 100 ERP.”

DSD is a method of distribution common among food and beverage manufacturers and distributors. By automating these processes, companies can achieve increased sales and improve inventory control, thus increasing gross profits. Ziliak reports that companies investing in DSD automation represent a wide range of industries, but notes that food and beverage companies such as beer, wine and spirits, carbonated beverages, bread and bakery products, milk and dairy, ice cream and frozen products, energy drinks, coffee, water, ice, pizza and salty snacks are sectors that could be well-served with xkzero Mobile Commerce.

XMC automates a comprehensive range of transaction types, including pre-sales (order taking), deliveries, returns, exchanges, payments and inter-vehicle transfers. Additionally, XMC aids with truck driver loading and scheduling, inventory check-in and check-out, daily inventory and payment reconciliations and more.

“We’re passionate about local and independent businesses and we love watching them grow. This is a true enterprise caliber system available for small and mid-sized distributors. From asset management, bottle and can deposit tracking, surveys for the Department of Motor Vehicles (DMV) and other compliance reporting, a performance monitoring dashboard, photo and geo-code enabled transactions–we’ve got it all covered,” Ziliak said. “Distributors with XMC and Sage 100 ERP will be better informed, more confident and capable of capturing more sales with less time and effort.”

XMC is built native iOS (Apple mobile devices) and includes a responsive design web management console along with web services to ensure a seamless ERP integration, Ziliak said. “The technologies we chose have proven to be the best for business. Usability, flexibility and dependability are paramount when you’re in customer facing situations. That is our guiding force.”

About xkzero 
xkzero provides Mobile ERP leadership and supply chain optimization for small and mid-sized distribution and manufacturing companies. Specializing in Sage ERP X3, Sage 100 ERP and Sage 500 ERP, xkzero’s published apps include iSales 100, GetX Universal Search for Sage 100 ERP and xkzero Mobile Commerce.
http://www.xkzero.com/MobileCommerce info(at)xkzero(dot)com @ERP_apps

About Sage North America 
Sage provides small and medium sized organizations, and mid-market companies with a range of easy-to-use, secure and efficient business management software and services – from accounting, HR and payroll, to payments, enterprise resource planning and customer relationship management.

How to Use Scripting to Require Additional Fields on a Screen 

Scripting Tips for Sage 100 ERP
by Alnoor  Cassim, xkzero Technical Services

facebooktwittergoogle_plusredditpinterestlinkedinmail

One of the unique features of Sage 100 ERP is the ability to set up business rules, similar to a built-in requirement such as entering a salesperson code to add a new customer within Customer Maintenance.

An example of a customized business rule is not allowing a customer to be created until the Price Level and Email Address fields are filled in. Also, you may put rules in place to temporarily place the customer on credit hold and apply a $1 credit limit until the credit hold is cleared by the finance department.

Or, perhaps you have not taken advantage of the customization options in Sage 100 ERP, and have an imprecise, manual process in place that relies on all users to follow and remember these rules. You may have even defined tasks and security events in Role Maintenance to accomplish a portion of the automation, then thought, “I wish there were a clean way to enforce all these rules!” In fact, there is a way! Once again (like we showed you in the previous blog), scripting can save the day! The answer to your frustrations could be creating a fairly straightforward script.

How to Use Scripting to Require Additional Fields on a Screen

What  kind of script  do you need to create?  

Create an event script (a.k.a. User Defined Script) that runs in Customer Maintenance when the Accept button is pressed.

Note that you are not limited to requiring only the fields mentioned above. You are also not limited to Customer Maintenance. The event type you will create is called Table Pre-Write. All of the “Pre” events (Pre-Write, Pre-Validate, Pre-Delete) are typically used to add your own user defined validation and prevent an action from occurring.

How  do  you create this script?  

Follow  these  steps:

1. Go to the Custom Office/Main Menu.
Make these selections:
“User-Defined Field”
“Table Maintenance”

2. Go to the  “Accounts Receivable”  heading.
Choose:  “AR Customer Master.”
Right-click and choose:  “User Defined Scripts.”

3. You are now in  the  “User Defined Script”  window.
Click:  “Add”

4. This will open the “User-Defined Script – Add Script”  window. (See image below.)
Choose:  Event: “Table – Pre-Write”
Type a name for your script, such as this:  “Required Fields for New Customer”

Alnoor-SC_Script031815

5. This will bring you to a  message  indicating that  the script file does not  exist.
It will be followed by a question, “Do you want to create it? Yes/No?”
Yes, you do want to create the script! 
Click:  “Yes.”

6. Now the “Edit Script” window will appear.
Copy the following code and paste it into your script editor window:
NOTE: It is important to use the code exactly as shown below, including line breaks and spaces.

'Alnoor Cassim - xkzero - Require Additional Fields in Customer Maintenance

'Init VARs
sEmailAddress = "" : sPriceLevel = "" : sCustomerNo = "" : nCreditLimit = 1

'Check if current user is member of the Finance_Dept role.
In_Finance = oSession.AsObject(oSession.Security).IsMember("Finance_Dept")

'Enforce new customer rules for any non-Finance_Dept roles (In_Finance = 0)
'If we wanted to run only for Finance_Dept check for In_Finance > 0

If In_Finance = 0 and oBusObj.EditState = 2 Then

	retVal = oBusObj.GetValue("EmailAddress$", sEmailAddress)
	retVal = oBusObj.GetValue("PriceLevel$", sPriceLevel)
	retVal = oBusObj.GetValue("CustomerNo$", sCustomerNo)

	If sPriceLevel = "" Then

	sMsg =	"The Price Level is blank." & vbCrLf & _
		"Please enter a Price Level for customer " & sCustomerNo
	'retVal = oSession.WriteLog ("M", Replace(sMsg,vbCrLf,CHR(138))'Write to Activity Log
	retVal = oScript.SetError(sMsg) 'Prevent the Accept and show the message
	retVal = oScript.InvokeButton("fldr.pAddl") 'Click the Additional tab folder
	Exit Sub

	End If

	If sEmailAddress = "" Then

	sMsg =	"The Email Address is blank." & vbCrLf & _
		"Please enter an Email Address for customer " & sCustomerNo
	'retVal = oSession.WriteLog ("M", Replace(sMsg,vbCrLf,CHR(138)) 'Write to Activity Log
	retVal = oScript.SetError(sMsg) 'Prevent the Accept and show the message
	retVal = oScript.InvokeButton("fldr.pMain") 'Click the Main tab folder

	Exit Sub

	End If

	'Put the Customer on Credit Hold and set the Credit Limit = $1.
	'This will overwrite whatever was previously entered for these 2 fields.
	retVal = oBusObj.SetValue("CreditHold$", "Y")
	retVal = oBusObj.SetValue("CreditLimit", nCreditLimit)

End If

How does this work? 

To better understand the logic behind the script’s functionality, read this:
“Init VARs”
In the first section, we “initialize” (init) the variables to prepare for use later in the script.

“IF/THEN/ELSE” 
Through these stated conditions, we run our main logic. In this particular script, we want the conditions to be as follows:

Check if we’re a member of the role called “Finance_Dept.”

Check if the customer on the screen is a “new customer.”

How  do we find out if the current user is a member of “Finance_Dept” role?  

Use the special IsMember() security function you see in the code block. If the value to the left of the equals sign is more than 0 the current user is a member of that role. Otherwise, they are not a member.

How  do we find out if the customer is new or existing?

We do this  by checking the  “edit state” as indicated by the  following  values:

2 = new customer
1 = existing customer
0 = no customer on the screen

Get the values of the Price Level, Email Address, and Customer No fields.
If either of the first 2 fields are blank, take these steps to prevent the customer from being saved:

  1. Check for a blank price level.
    Notice the If / End If block to check for a blank Price Level.
    Execute the SetError(msg) function.
    This is a 2-part function that will both prevent the Accept button from being clicked and show a message box to the user with your own user defined message. A good message could be this, “Oops! The Price Level is blank.”
  2. Auto-click the Additional tab folder.
    Run the InvokeButton() function as a way of auto-clicking the Additional tab folder.
  3. Exit the script.
    To immediately exit the script, run the Exit Sub command This is not required for preventing the Accept.
  4. Check for a blank email address.
    To check for a blank email address, the If / End If block runs similarly, except the Main tab is auto-clicked.
  5. Write message to the Activity Log.
    Do you want to write the message to the Activity Log? Then remove the single quote character from the line where you see the WriteLog() function.
  6. Put the customer on Credit Hold and set the Credit Limit.
    Next, Put the Customer on Credit Hold and set the Credit Limit = $1
    The two SetValue() lines at the end accomplish these tasks.
    Note: You should not follow this up with a Write() command because the Pre-Write script runs before the standard Sage 100 Write() command runs, which will write / save the record for us. If we ran on Post-Write event then we would issue a Write().

    You’re  almost  done!   

  7. Accept the script.
    Now you can “Accept” the script.

    This will return you to the “Add Script” window.
  8. Return to the User Defined Scripts window.
    Close this screen and return to the “User Defined Scripts” window.
    To do so, click:  “OK.”
  9. Go to the Script Compile window.
    Next, go back to the main “User Defined Field” and “Table Maintenance” window.
    To do so, click:  “Close.”Here, you must also click “Close” again to see the “Script Compile” window.
    IMPORTANT:  When the “Script Compile” window appears, click the Compile” button.
    You can further edit the script, if necessary.  To do so, from the “Custom Office/Main” menu, choose the “User Defined Script Maintenance” task. When done editing the script, to syntax check the script, click “Check Script,” then to save the script, click “Accept.”
  10. Compile. Close.
    The next step is to click the “Compile” button in the lower-left of the screen. When the Script Compile window appears, click the Compile button again followed by the Close button.
    You’re done!

This is the second of many scripting examples we will share through the xkzero blog. If you need help with scripting, programming or technical issues with your Sage ERP, no matter how complex, please feel free to contact us: 

xkzero Technical Services
Email: info@xkzero.com
Call: 847-416-2009

 

Turn “No Order” Into a Positive Experience

No Order - No Problem.

No Order – No Problem.

You hire, train and deploy a team of professional sales people to be out on the streets to produce one thing above all elsenew customer orders.

Reality sometimes gets in the way, though and often enough your route sales/pre-sales team will return indicating there is “No Order”‘ for a number of customers. Obviously that is not the desired outcome, but there are ways you can turn “No Order” into a positive outcome for your businessand your customer. Here’s how:

  • Track Every Customer Interaction. Every time you receive “No Order,” you should record that in your system, the same as you would any other transaction. When the customer orders nothing there is something to be learned, just as when an actual sale occurs.
  • Geo-track Your Transactions. Modern smart phone applications can tell you if your sales rep was actually at the customer site when “No Order” was indicated. Having a geo-coded app can certainly improve that sort of accountability.
  • Save Money. Tracking “No Order” may result in a new schedule for visiting your customers. Better coordinating these times can result in improved labor efficiency, reduced fuel costs, route and territory consolidation, or other operational gains.
  • Improve Customer Relations. Tracking “No Order” in a systematic way can help you better your customer relationships. The result will be a schedule more aligned with their goals, a more effective product mix on the shelves, and an improved understanding of the preferences of your customers and their shoppers.

You are likely to discover that by diligently recording “No Order” transactions, the ultimate outcome may very well be more new orders!

facebooktwittergoogle_plusredditpinterestlinkedinmail

About xkzero

xkzero is a Chicago-based software company dedicated to revolutionizing the way people work. We believe that people perform best when they are confident, informed, and have a high level of trust in the tools they use.

We build solutions designed for the best possible user experience, engineered in a flexible way to accommodate the needs of each individual and we adapt to the precise business rules that can vary industry by industry, company by company.

xkzero can help you discover a whole new dimension of selling, operations and business intelligence. We focus on the way your people interact with customers and suppliers, and interact with each other. We can help you change the way your business processes and reports business activity as it happens.

For more information about xkzero, please email us at
info@xkzero.com or call 847-416-2009.

Webinar: Mastering Direct Store Delivery for Food & Bev with Sage ERP X3

Deliver sales and profits

Deliver sales and profits

Mastering Direct Store Delivery for Food & Bev with Sage ERP X3

Join us for a free Webinar
Friday, March 20, 2015 at 11:00 am CDT.


Register now!
https://attendee.gotowebinar.com/register/7851484255973751298

The Direct Store Delivery (DSD) segment of the food and beverage market is full of great companies who are limited by unnecessarily inefficient processes. Potentially unseen bottlenecks like truck loading, driver scheduling, customer routing, and the inability to perform transactions on location–like deliveries, returns, returns, credits, exchanges and payments–can limit the growth of these otherwise innovative companies.

Learn how to win new food and beverage manufacturing and distribution deals with Sage ERP X3 and xkzero Mobile Commerce–a combination that turns these operational limitations into great competitive advantages.

Find out how to supercharge your food and beverage marketing campaign by integrating a market-defining solution to automate route sales, deliveries, inventory controls, mobile payment acceptance and more into your processes.

In this Webinar, you will learn about these key points:

  • How grocers value direct store delivery
  • How comprehensive in-store automation works
  • Benefits of DSD
  • Best-fit industries for DSD
  • Back-office ERP benefits

The event will also include a high-level overview of the ways xkzero Mobile Commerce would be used by both an administrator and a driver/sales rep, and include use-case examples of the unique intelligence gathering features of geo-coding, photo-enablement, and more.

Space is limited so we encourage you to register now.  ​https://attendee.gotowebinar.com/register/7851484255973751298

After registering, you will receive a confirmation email containing information about joining the webinar.

facebooktwittergoogle_plusredditpinterestlinkedinmail

About xkzero

xkzero is a Chicago-based software company dedicated to revolutionizing the way people work.   We believe that people perform best when they are confident, informed, and have a high level of trust in the tools they use. xkzero builds solutions designed for the best possible user experience, engineered in a flexible way to accommodate the needs of each individual and we adapt to the precise business rules that can vary industry by industry, company by company.

xkzero can help you discover a whole new dimension of selling, operations and business intelligence. We focus on the way your people interact with customers and suppliers, and interact with each other. We can help you change the way your business processes and reports business activity as it happens.

For more information about xkzero please contact us at info@xkzero.com or call 847-416-2009.

Use Scripting to Change All Shipping Warehouses on an Order

Scripting Tips for Sage 100 ERP

Blogger: Alnoor Cassim, xkzero Technical Services

When creating Sales Order Entries in Sage 100 ERP, have you ever keyed in many lines of shipping information on multiple orders only to learn that the product needs to ship from a different warehouse than the location originally entered?

If so, you know that manually correcting the warehouse code on each order line is quite time consuming (and not exactly fun). You may have even thought, “If only there were a way to change the warehouse information just once to apply the update to all the line warehouses… Good news! This wish can come true by creating a fairly straightforward script.

What kind of script do you need to create to change all warehouses in an order?

Create an event script that runs when the Warehouse Code on the Header is changed.

How do you create this script?

Follow these steps:

  1. Go to the Custom Office/Main Menu, and make these selections:
    “User-Defined Field”
    “Table Maintenance”
  2. Under the “Sales Order” heading, choose “SO Sales Order Header.”
  3. Right-click and choose “User Defined Scripts.”
  4. In the “User Defined Script” window, click the “Add” button. This will open the “Add Script” window.
  5. In the “User-Defined Script – Add Script” window, as shown below, make these choices:
    Event: “Column Post-Validate”
    Field: “WarehouseCode”
  6. Type in a name for your script, such as this:
    “Update Line Whse from Hdr Whse”
    Scripting-Warehouse-1
  7. You will see a message indicating that the script file does not exist, followed by a question, “Do you want to create it? Yes/No?”
    Yes, you do want to create the script! Click “Yes.”
  8. Now the “Edit Script” window will appear. Copy the following code and paste it into your script editor window. Note: It is important to use the code exactly as shown below, including line breaks and spaces.
'Init VARs 
newWhse = value : sItemCode = "" : sItemType = "" 

'If an existing sales order and not during update 
If oBusObj.EditState = 1 and oSession.Updating = 0 Then 
	Set oLines = oBusObj.AsObject(oBusObj.Lines) 
	
	retVal = oLines.MoveFirst() 
	
	sMsg = "Would you like to update the Whse Lines to Whse Code " & newWhse & "?" 
	retMsg = oSession.AsObject(oSession.UI).MessageBox("",sMsg,"Style=YesNo") 
	
	If retMsg = "NO" Then 
		Exit Sub ' 
	Else 
		retVal = oLines.MoveFirst() 
		'Loop through all the lines and choose regular inventory item lines only 
		Do Until CBool(oLines.EOF) 
			retVal = oLines.GetValue("ItemCode$", sItemCode) 
			retVal = oLines.GetValue("ItemType$", sItemType) 
			
			If sItemType = "1" Then 
				retVal = oLines.SetValue("WarehouseCode$", newWhse) 
				retVal = oLines.Write() 
			End If 
			
			retVal = oLines.MoveNext() 
		Loop 
	End If 
End If

How does this work?

To better understand the logic behind the script’s functionality, read this:

“Init VARs”
In the first section, we “initialize” (init) the variables to prepare for
use later in the script.

“IF/THEN/ELSE” 
Through these stated conditions, we run our main logic. In this particular script, we want one of the conditions to be “existing order.”

How do we find out if the order exists?

We do this by checking the “edit state” as indicated by the following values:

2 = new order
1 = existing order
0 = no order on the screen


Next, to find out if you have landed on a regular inventory item, follow these steps:

  1. Go to the Lines object. Move to the first line and start a loop.
  2. Check the value of the “Item Type” field.
  3. If it is a regular inventory item, set it with the new value and then write the line. Continue until all the lines are completed.

You’re almost done! 

Now you can accept the script. This will return you to the “Add Script” window.

  1. To close this screen and return to the “User Defined Scripts” window, click “OK.”
  2. Next, to go back to the main “User Defined Field” and “Table Maintenance” window, click “Close.” Here, you must also click “Close” again to see the “Script Compile” window.
  3. IMPORTANT: When the “Script Compile” window appears, click the Compile” button.

Note that you can further edit the script, if necessary. To do so, from the “Custom Office/Main” menu, choose the “User Defined Script Maintenance” task.


This is the first of many scripting examples that we will share through the xkzero blog. If you need help with scripting or other technical issues with your Sage ERP, no matter how complex, please feel free to contact us: 

xkzero Technical Services
Email: info@xkzero.com
Call: 847-416-2009

xkzero Announces New Channel Territories

xkzero is happy to announce we’ve expanded our channel sales team, which we’ve divided between East and West for the U.S. and Canada. This effort will help us keep our commitment to serving you at the highest level.

We continue to grow thanks to forward thinking Sage ERP partners like you. By focusing on leading edge technologies for mobile, search and other innovative solutions, we’re finding new and exciting ways to add value to Sage customers.

Channel Sales Team and Territories

Accordingly, we’re pleased to announce the addition of Santos Rodriguez to the xkzero channel sales team. Santos will manage the North Central, South Central, Northwest and Southwest territories of the U.S., and Western Canada. Many of you already know Santos from his years working in channel and inside sales with top Sage partners.Amanda Lubert will manage opportunities in the Northeast, Southeast, and Ohio Valley region in the U.S., as well as Puerto Rico and Eastern Canada. For those of you in the West working on open opportunities with Amanda, rest assured that she will continue your work together for a transitional period.

Mobile ERP and xkzero
Mobile is a huge growth area for sales and ERP functions of almost any kind, and companies are willing to invest in technology solutions when they see the capability to create real value. Please look for a whole new level of engagement from us this year to share with you how xkzero can help you build your sales and profits too.

Contact Info
Here is the contact information for your xkzero sales team.  We appreciate your dedicated support, and we look forward to our ongoing shared success.

Amanda Lubert (East)
alubert@xkzero.com

Santos Rodriguez (West)
srodriguez@xkzero.com

Paul Ziliak
pziliak@xkzero.com

Phone and general inquiries:

847.416.2009
info@xkzero.com

Thank you for your continued partnership!

Paul Ziliak