Stephen Smith's Blog

Musings on Machine Learning…

Posts Tagged ‘software

Sage Intelligence 7.4

with 11 comments


With our upcoming Sage 300 ERP 2014 version we will be integrated with Sage Intelligence Reporting 7.4. Within our product this will also be labeled as version 2014. This is a fairly major upgrade to the Sage Intelligence package and definitely worth a look. There have been a great many feature, usability and performance enhancements throughout the product.

This product is integrated to many sister Sage ERP packages and this is where Sage is investing in improving Excel based reporting. For ERP a big usage of this is for Financial Reporting, but don’t forget this is a useful tools for many other applications like Sales Analysis.

Financial Reporting

Many of our Sage sister products used Microsoft FRX as their financial reporter. This product has now been discontinued by Microsoft. To provide a replacement we spent quite a bit of time adding features contained in FRX into Sage Intelligence. Sage 300 never used FRX, but we now benefit from all this work with better Financial Reporting from Sage Intelligence.

For Sage 300 ERP installed on-premise, it still includes the Financial Reporter bundled with General Ledger. This F/R is still there and supported. We just added support for Excel 2013 which was a major job due to the changes in Excel from a multiple document interface (MDI) to a single document interface (SDI) along with Excel now having data execution protection (DEP) turned on. We understand that people have invested a lot in developing many powerful reports with this technology and are quite happy with how it works.

For the Sage 300 Online product we have removed this Financial Reporter and are only hosting Sage Intelligence for Financial Reporting. With this cloud offering we are looking to the future. With version 1.0 of this product we are running the regular desktop version of Excel to work with Sage Intelligence. But this isn’t really what we wanted. As a cloud offering we wanted to integrate to the cloud version of Excel, namely the browser based Excel 365 version. However the API for this product isn’t sufficient yet to do sophisticated Financial Reporting. Once Excel 365 develops sufficient power, we will be integrating Sage Intelligence to this and allow cloud based use of Office 365. By using Sage Intelligence it means that when we switch from the local installation of Excel to using the cloud version, all your report will continue to work and won’t need to be re-written. For the Sage 300 built-in Financial Reporter it will only continue to work with the local installed version of Excel. As a result of this besides adding features needed for FRX users, we have also added functionality to Sage Intelligence to make it more comparable to the built in Financial Reporter.


We now load all the data into memory at the beginning and then do all reporting from this in-memory database. This way as you change reporting options and interact with the report, you get far better performance than before. No more re-reading things from the database as you go along.

Excel Support

Sage Intelligence 7.4 now supports running Excel 2013 both 32 and 64 bits. For Sage 300 ERP the built-in F/R supports Excel 2013 but only running in 32 bit. If you absolutely need 64 Bits then give this solution a look. However MS does install 32 bits by default now for Excel 2013 due to all the compatibility problems with the 64 bit version (it isn’t only us). Similarly Sage Intelligence also no uses .Net framework 4 which is better supported and avoids installing old versions of the .Net runtime.


Let’s look at a few of the new things in the product. First we’ve modernize the toolbar in the Report Manager to the Office ribbon style. We’ve also fixed up the wording and hints to make this a bit easier to use.


As part of providing an out of the box Financial Reporting solution for Sage 300 ERP, we’ve added a number of sample reports that match the Financial Reports bundled with our built in F/R. Below is he home page for the Financial Ratio report:


And then the actual report. Note that there are a few more ratios here than in the built-in report along with graphs and such.


For the Balance Statement and Income Statement reports each three are incorporated into one Sage Intelligence report, each on a separate tab. One of the income statements is shown below.


The new Report Designer boasts a fresh new User Interface to supplement a powerful generation engine utilizing the Report Designer In-Memory technology allowing for improved performance and usability. This tool makes it very easy to create new powerful Financial Reports without having to edit every Excel cell by hand. Automated layout generation for a single company:


Plus screens to specify your account ranges and labels:



Sage 300 ERP 2014 will be bundled with Sage Intelligence 2014 which is version Sage Alchemex Intelligence 7.4. This is a fairly major release which greatly increases the power of Sage Intelligence as a Financial Reporter. It adds many features to be comparable to both FRX and to the built-in F/R from General Ledger. This version supports Excel 2013, including the 64 bit version and this is the product that we will be adding cloud based Excel 365 support to.

Screen Improvements in Sage 300 ERP 2014

with 9 comments


In a previous posting I talked about some improvements to the look of the Sage 300 ERP Desktop, in this article I’ll be looking at a number of improvements we’ve made in our document entry screens. The last major screen refresh was when we re-wrote our screens from CA-Realizer to VB6 for version 5.0A. This was a major technology upgrade that enabled much of the new technologies in our screens. This allowed them to be customizable and enabled things like screen resizing. Back then we designed the screens for a maximum display resolution of 800×600 and designed the screens accordingly. Since then over several versions we’ve added many new features and this has tended to clutter up the screens.

With this version, we aren’t performing a major technology refresh but we are revisiting many of the screen design decisions made back in the 5.0A days and making small but significant changes to make the screens look more modern. We don’t want to disrupt current customers with this release, we want the screens to still be familiar and we want people to work the way they have always worked. As a result we haven’t rearranged fields or moved fields around. Everything should be where you remember it, just laid out a bit better using some extra space.

First we’ll look at the new O/E Order Entry Screen so we can refer to it as we go through the various changes.


New Minimum Resolution

When we released 5.0A 800×600 was a pretty good super-VGA resolution that could be handled by most good laptop and desktop computers. Now it’s pretty easy to get multiple banks of 27 inch monitors with terrific resolution. If you want to spend a lot of money you can even get 4K resolution. However we now live in a world with quite small ultra-notebooks as well as a plethora of tablet computers. So we can’t greatly change our minimum resolution, but we can at least increase it to 1024×768.

This then gives us a bit of room to unpack fields, to get better column alignment and to add a bit of white space back to the forms. Some fields where quite squished in, and now we can get back to everything having a bit of room to breathe. This is then much easier on the eyes and makes using the screen a bit easier on the concentration.

New Graphics

If you look at the form, you might notice that we’ve updated most of the little bitmaps, for instance, to create a new record or to drill down to further information. Some of the graphics are a little larger than they used to be, taking advantage of the extra screen real estate. They are also a little more modern looking with the current prevailing styles. Notice that everything is a bit flatter looking as this is the trend.

Required Fields

We’ve added an asterisk to all the required fields. You can see this on the Order Entry screen next to the Customer Number along with a little legend over on the right. This has been a long time requested feature for the product. Order Entry doesn’t have many required fields, but some other functions have quite a few. These just give you a visual cue of which fields to enter, so you can avoid annoying error messages when you save or post a document.

Notes for Developers

All of these features are “opt-in”. If you don’t do anything to your screens, they will look and behave exactly as before. We don’t want to effect screens generically, since if we just put in the new graphics, they could cause fields on screens to overlap and such. Besides remaining compatible with third parties, we also need to remain compatible with older versions of our applications for before they are activated to the new version. Some of the old graphics are quite small and didn’t want to limit ourselves to those sizes since it restricted the graphics designers too much.

Of course resizing the form is up to you and just done in VB. I suspect many ISVs have already adopted larger screen sizes, so this may not be such a big deal.

For the other items they are all options in the field edit control that must be turned on. Below is the new FEC configuration dialog for the customer number field in Order Entry:


Note the checkboxes for “Load Modernized Icon” and “Required Fields” that have been added to allow you to enable these features.


With each release of Sage 300 ERP we are striving to take steps to improve the look and usability of the product. Since the 2014 version isn’t a major technology release we want make sure the changes aren’t disruptive. As a result we’ve analyzed a number of improvements that are useful, but won’t cause any retraining burden on our customers. Combined with the changes to the Desktop, these changes give the product a fresher look. Then we’ll keep on adding a few improvements of this nature in each product update and release.

Written by smist08

September 14, 2013 at 3:21 pm

Sage CRM 7.2 Available for Sage 300 ERP

with 8 comments


Earlier this year Sage CRM 7.2 was released for standalone CRM customers. We have competed the Sage 300 ERP integration in conjunction with the Service Pack 1 release of Sage CRM 7.2. We have now released the Sage 300 ERP 2012 integration for Sage CRM 7.2 and this is the integration that will be included in the forthcoming Sage 300 ERP 2014 release.

Generally customers find that combining Sage CRM as a front office solution to Sage 300 ERP as the back office  solution creates a much more powerful combined system than having separate ERP and CRMs. The level of automation, reporting and customer connectedness is greatly increased across the organization. As such introducing a new version of CRM can provide many immediate benefits for companies and this blog is looking at some of the things that are new in this version. We find that customers running both of these Sage products together have much higher net promoter scores than customers running non-integrated systems.

Social CRM

Historically CRM programs managed communications with customers and other business contacts by managing e-mails and phone calls. CRM had all the basic contact information, integrations to help automate these processes like creating e-mails and automatically recording the information in CRM. Auto-dialing phones and logging that you called and letting you fill in some comments. Setting reminders and schedules for performing these tasks.

However, how we are communicating with our business contacts is changing. Many people are using e-mail and voice phones much less than they used to. I ignore most incoming calls from unknown callers because they are usually cold sales calls or scams (like you have just won a cruise vacation). E-mail is getting much noisier with spam and other junk, causing more important e-mails to just get lost. It’s been found that recent high school graduates actually have quite an aversion to actually talking on a phone and don’t use e-mail much.

Now there are many more communication channels. Many people now communicate via various social websites like Facebook, LinkedIn, Google+, Yammer and Twitter. Many calls are made via services like Skype and there are people texting more than ever and even using systems like BBM.

So if we want to get a complete comprehensive picture of all our communications with a customer, we need to see all of these in CRM as well. We added LinkedIn and Twitter connectors to Sage CRM last version and with this version we have added Facebook integration.


With this Facebook integration you can bring Facebook information right inside Sage CRM to better understand your customer. You can associate Facebook pictures and profiles with prospects. Generally this is an avenue to get a more complete picture of your customer, or potential customer’s business.

Getting good leads is usually a big problem for companies. Chances are that for a given customer, his contacts will be related in some way and perhaps offer good prospects to market to. If you do get a response from one of a customer’s contacts then you can use the original customer as a reference to help make the sale, or act as an introduction to get you in the door.

Social Media stores terabytes and terabytes of information on business’s and people. Being able to effectively mine all this information is going to be a huge competitive advantage in the future.

Another social feature added to Sage CRM 7.2 is Yammer integration. Yammer is a social network for collaboration within a company. With this integration your sales teams can collaborate and share information using Yammer from Sage CRM.


Mobile CRM

People don’t necessarily spend their entire day sitting at their desk behind a computer. They work from home, they travel on business trips and visit customers face to face. You CRM system contains tons of useful information that will help you do your job better if accessible in these situations. Over the past couple of versions and further with this new version, we‘ve been adding mobile features to Sage CRM to make it easier to access from mobile devices.

Sage CRM is a web application and with the previous version we enhanced to work with all popular browsers. This then allowed mobile users (which usually have Safari or Chrome) to browse the Sage CRM screens. Perhaps this works a bit better for tablets, but tends to be a bit of a pain on an iPhone.

As a result we’ve been adding native device apps to complement the web interface to Sage CRM. Plus we’ve been working on improving the web interface so it will work much better on table devices like the iPad.

The picture below shows the Sage CRM web application rendering itself for an iPad:


Next we have the iPhone native Sage CRM application:


And finally the Sage CRM 7.2 Windows 8 application for Windows tablets:


As we move forwards we will be providing more and more functionality on more and more mobile devices so you can instantly get any information you need instantly. Down the road you might be wearing your Google glasses and when you say the customer’s name, all the information on that customer will be right there in your view to reference.


With this version of Sage CRM we’ve improved the reporting capabilities. A new HTML5 based charting library has been added, so you don’t need Adobe Flash for charts anymore. You can clone reports to get started with a customization. There are more chart types with more configurable settings. There are new security settings so you can better control who can see what.


Sage CRM 7.2 adds more codeless customization capability where you can design more powerful screens right in the product without writing code. Sage CRM also doesn’t use frames to hold custom screens anymore. This will affect some ASP based customizations, but generally leads to better ability to control your own web pages (especially the CSS).


The main change to the Sage 300 ERP integration was changing Quotes to Orders to work in the new frameless Sage CRM web pages. Most other changes have already been released in service packs or hotfixes for Sage 300 ERP 2012, so if you are fully current you won’t see much different. But if you are coming from an older version, you should see a number of improvements.


Sage CRM 7.2 integrated with Sage 300 ERP make for a powerful front/back office solution. This release is definitely worth checking out especially for the mobility and social features.

Written by smist08

September 7, 2013 at 4:59 pm

Sage Mobile Sales

with 10 comments


This is the third article in my series on Sage’s new Web and Mobile applications that were released at Sage Summit this year. Previously I blogged on our Sage Mobile Service iPhone Application and our Sage Billing and Payments Web Site.

For this article, I’m going to be looking at our new Sage Mobile Sales application. This application has two parts, an iPad native application for taking sales and a web site for managing inventory, customers and sales people.

This application enables sales people to show customers products right from a catalog on their iPad, they can review and edit customer information, they can create a quote and have it e-mailed to the customer, they can check product availability and they can enter an order and accept immediate payment.

Generally this application is best for salespeople working directly with clients to create a quote or order. It makes getting information on the items being sold easy as well as allows you to easily create the order.

The diagram below shows the mobile application interfaced to the Sage Data Cloud and the Sage Data Cloud connected to the on-premise ERP system to synchronize data. You can take credit card payments directly from the iPad or take orders on account. If you take the order on account then you can use the Sage Billing and Payments application to collect the money which is also shown connected to the Sage Data Cloud.


The iPad Application

The sales people will install this native iPad application onto their iPad from the Apple store. You can see the Apple store entry here. This application fully uses the capabilities of the iPad to make life as easy as possible for the sales people. Below is a screen shot of the customer list:


If you tap any of these customers then you will get more detailed information on that customer:


This includes their contact information as well as giving you their sales history.

Similarly you can get a list of inventory items and if you tap them you get detailed information on the item for sale:


Notice you see the price and the quantity available. You also get a number of photos of the item. You can immediately add it to a quote. You also see links to similar items.

The application is written in Objective-C and developed using Apple’s XCode integrated environment. Note that this application requires at least iOS 6, which means you need at least an iPad 2. If you need to be truly mobile, then you would need the cellular version of the iPad (rather than the Wi-Fi only one) and a mobile data plan.

The Web Application

You use the web application to manage your inventory, customers and sales people. The initial data is uploaded from your on-premise ERP system, but there is some additional data that you would want to add to make this a better experience. Further this is a good portal to get information on how your sales are going and how your sales people are doing.

Below is a screen shot of the inventory list screen:


From here you click on an inventory item to get more detailed information:


Here you do things like setup related items or add the item to a category (which makes browsing them on the iPad much quicker). You can also add more photos for the item. Generally these should be produced professionally and not just taken with your iPad camera.

For the Team, tab you can manage your sales team, set quotas and see how your sales people are performing against their quotas.

Connected to ERP

Like the other two mobile/web applications I blogged about, this one uses the Sage Data Cloud and will work with any ERP that is connected to this cloud. Currently that is Sage 100 ERP and Sage 300 ERP with Sage 50 ERP (Canadian and US) following shortly.

If you were to use all three of these application, you would still only use one connector which would synchronize ERP data to and from the Sage Data Cloud and would share common items like the customer master file.

Credit card processing is via Sage Payment Services so again everything here is synchronized between the ERP, Sage Payment’s virtual terminal and the Sage Data Cloud.


This iPad native application is a great way to enable a mobile sales team to interact with customer and build quotes and orders. It has many ease of use features that iPad users expect and fully integrates with your current Sage on-premise ERP system.

Sage Summit 2013

with 7 comments


Sage Summit is our annual North American partner and customer conference. This year it was held at the Gaylord National Resort and Convention Center in Washington, DC. Sage rolled out many exciting new products, upgrades and services. As a blogger I’m glad that they’ve all now been announced since these will provide articles for months to come and I don’t have to hold back waiting for Sage Summit anymore. Most of the topics mentioned here quickly will be the topic for future much more detailed blog postings.


Pascal Houillon kicked off the opening keynote comparing the Sage journey to mountain climbing. Talking about teamwork and overcoming very daunting obstacles. There was also a lot of mention on progress with building the Sage brand in North America.


Included in the keynote were demos of some of Sage’s new mobile applications, showing people buying things from iPads, being dispatched to perform service work from their iPhone and entering construction time card data on an Android tablet. The best demo was Steve Malmgren demoing voice input on a Windows phone where he could just ask general questions with vague input data and get back meaningful answers. He could ask questions like “What’s the address of American in Milwaukee?” and get back the full company name, its address and go to a map to get directions. It was very impressive and the voice recognition worked really well considering the noisy conditions up on stage.

Then the keynotes broke out into several super-sessions. I attended the super-session on technology which was standing room only. This session outlined all our new technology initiatives and all the things that we were delivering now. These included several mobile native applications along with the announcement of the new Sage 300 Online. A lot of time was invested in explaining how the provisioning and signup processes worked and how ISVs can participate in the new Sage Data Cloud that is the backbone for all the new services.

Sage Mobile Applications

We previewed rough prototypes of a number of mobile applications at last year’s Sage Summit conference. This year we are releasing the real things. The first three mobile applications are Sage Mobile Sales, Sage Billing and Payment and Sage Mobile Service.

Sage Mobile Sales is an iPad native application for sales people, Sage Mobile Service is an iPhone native application for receiving service calls. Sage Billing and Payment is a web application for chasing down people who owe you money. All of these take credit cards for payment via Sage Payment Solutions.

Below are some screen shots to give a flavor of what they look like.


Sage Data Cloud

All these Sage Mobile Applications are connected to the Sage Data Cloud. All the data required for these applications to run, as well as all the transactions they generate go through the Sage Data Cloud. The Sage Data Cloud is hosted in Microsoft Azure and is connected to your on-premise ERP system. Your on-premise ERP uploads to data to the cloud like customer and inventory information and then downloads transactions like orders and invoices. It is the glue that connects your on-premise ERP with the cloud world without requiring you to run a web server or any other special infrastructure.


Currently we have connectors to the Sage Data Cloud for Sage 100 ERP and Sage 300 ERP. With connectors to Sage 50 ERP (US and Canadian) to be available shortly.

Sage 300 Online

Sage 300 Online is our new cloud version. This runs Sage 300 ERP 2014 in the Microsoft Azure cloud. It is integrated with SageID and uses new virtualization technology to being an improved application experience.

The following is the web page that you would launch the Sage 300 ERP 2014 Desktop from or transfer data to/from the cloud.


Sage 300 ERP 2014

Sage 300 ERP 2014 is our new version that will be shipping in a couple of months. This version includes many user interface improvements in the main Desktop along with throughout many application screens. There is much more information on what people are doing in the system, improved visual process flows and a number of other improvements that people have been asking for.

Sage City

We introduced Sage City last year and have continued it this year due to popular demand. Sage City includes a keynote address for the Sage Customers, it then breaks up into networking/problem solving sessions where like-minded customers get together to jointly solve their problems.

Sage Marketplace Live Expo

Every year there is an exhibition hall which has booths representing all our main ISV partners. All the Sage business applications act as both a platform and a center for a whole ecosystem of products and services. These products range from small but useful utilities all the way up to major applications and all have the goal of seamlessly integrating with various Sage products. Many lunches, breakfasts and dinners were served here so that partners and customers could eat as well as have plenty of time to investigate all the various products that could make their lives easier.

Social Media

Like any conference, one of the goals is to promote the company and to generate coverage in the press. Besides getting articles written for various publications (mostly online), part of it is generating interest in the social media like Twitter, LinkedIn or Facebook. Seeing all the tweets by industry analysts as well as judging sentiment from the attendees by watching the twitter feeds. You can see this by searching for the hashtag #SageSummit. Often the twitter feeds were displayed on large screens for all to see. Plus Twitter is a great way of people to connect and exchange information. There was also a Sage Summit conference mobile application to show the conference agenda as well as allow people to connect and use social media. Plus points were awarded for using the app where people were competing for a prize.


Sage Summit 2013 was another enjoyable conference. It was a great opportunity to meet many partners and customers. To see all the great products our ISV community are working on. To see some products and people from other parts of Sage that I don’t normally interact with. Next year Sage Summit is in Las Vegas at Mandalay Bay on July 27-August 1, 2014.

Written by smist08

July 26, 2013 at 12:52 pm

Launching Non-SDK Programs From the Desktop

with 23 comments



When SDK applications are launched from the Desktop, they are passed an object handle that they can use to create a session that exactly matches the session of the desktop that launched them. Further the desktop can manage these programs and for instance put up an error message if you try to close the Desktop while they are still running.

Quite a few people create programs that aren’t written using our SDK, but still are tightly integrated to Sage 300 ERP via one of our APIs such as the COM API, .Net API or Java API. You can add arbitrary EXE programs to the Desktop as icons and launch them just like any other screen.

When we designed the current UI framework, we had the intention that our UIs could be run from many places, such as VBA macros or hosted inside Internet Explorer. We also envisioned them being strung together in workflow type applications. Towards this we created the Session Manager and the Signon Manager to help tie together programs running inside the desktop with programs running outside the desktop. For information on using the Session Manager, check out this blog posting.

Generally this has worked quite well. Especially if you only signon to one company, then all the various things running will share the same session and you won’t have to signon to everything separately. However there are a few limitations to our current approach. If there are two desktops running (usually signed on to different companies) then when the external program is run, it has to present a dialog to choose which company’s session to use. This makes sense if you say start an EXE program from the start menu, since how would it know which desktop session to use? But when you run from the desktop you would expect it to just use that desktop’s session, rather than being treated like it wasn’t run from the desktop. Similarly if you started an EXE program from the desktop you would expect the Desktop to prevent closing until this program is closed, right now this check is only for SDK programs run from the desktop and doesn’t apply to anything else.

A lot of people are creating standalone EXE’s that use our APIs and they are using the Session Manager, which generally works well, but would like to get the other cases handled as nicely. So for the upcoming Sage 300 ERP 2014 release we have added some support to the Desktop to help with this. To basically allow non-SDK programs to start with the same protocol as the SDK programs so they can behave in the same manner. The alpha (developer) early release of Sage 300 ERP 2014 is available to ISVs so you can try this out now.

New Macro Substitution

If you add a program to a groupfile or if you add a program via file new in the desktop, if you specify $objecthandle$ as an argument, then this will be translated into an object handle when you are run that you can use in other API calls to get a session that matches your desktop. For instance in a group file:

ID = "XX0500"
PARENT = "XX0000"
DESCRIPTION = "test ojbect key"
CMDLINE = "c:\\accpac6\\sm\\testobj\\testobj.exe $objecthandle$"


This is then the token you can use to create your session exactly from the Desktop that ran you.

If you aren’t an SDK program, you probably don’t have your own group file. However you can use a couple of SDK tools to add your item to an existing group file. The program unccgrp.exe (usually installed in c:\pluswdev\bin) will de-compile a group file (these are usually grp.dat files in a programs language folder, like ar62a\eng\grp.dat). Then you can add your own entries to this and then use ccgrp.exe to re-compile the group file. This is a bit of a kludge because it may overwritten by Product Updates and two people trying to do this at once may collide and interfere with each other. But it can be an effective and useful technique.

How to Use the Object Handle

You can then pass the object handle into a session init call and your session will be configured to match the desktop you are run from. Additionally if you want to register your windows handle, you can use the roto api to do so given the object handle. You should also clear this when you terminate.

Below is a VB program which does these things. It uses the session it gets to display the company name in a label. This way it will be connected to the right Desktop and the Desktop knows when it’s running.

Private Declare Sub rotoSetObjectWindow Lib "a4wroto.dll" (ByVal objectHandle As Long, ByVal hWnd As Long)
Dim strObjectHandle As String

Private Sub Command1_Click()
    Unload Me
    ' clear our window handle when closing so we don't block the desktop closing
    rotoSetObjectWindow Val(strObjectHandle), 0
End Sub

Private Sub Form_Load()
    Dim mSession As New AccpacCOMAPI.AccpacSession

    ' Get the object handle from the command line
    strObjectHandle = Command$

    MsgBox "Object Handle = " + strObjectHandle

    ' Use the object handle to intialize the session. With this you will inherit
    ' an open session matching the desktop that launched you.
    mSession.Init strObjectHandle, "XY", "XY1000", "62A"

    ' Set the window handle so the desktop can track whether you have closed
    ' effectively doing a roto openok.
    rotoSetObjectWindow Val(strObjectHandle), Me.hWnd

    Dim mDBLinkCmpRW As AccpacCOMAPI.AccpacDBLink

    Dim CSCOM As AccpacCOMAPI.AccpacView
    Dim CSCOMFields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "CS0001", CSCOM
    Set CSCOMFields = CSCOM.Fields

    Label1.Caption = CSCOMFields("CONAME").Value

End Sub

Sage 300 ERP Desktops Through the Ages

with 9 comments


With our upcoming 2014 version of Sage 300 ERP (to be released in 2013), one of the features is an improved look to our Windows Desktop Launcher. I thought it might be fun to do through a bit of history and review all the various Desktops we’ve included with Sage 300 ERP.


The first Windows version of Sage 300 was for the 16 Bit Windows 3.1 system. In these earlier versions of Windows, there was no ability to have folders in your lists of icons. Having nested folders of icons was a big feature of IBM’s OS/2 Desktop. IBM released this icon/folder system as a custom control for Windows. We took the IBM library and used it as a basis for our original desktop shown below:


Here you could have folder (like Bank or Tax Services) which drilled down to further Windows. Basically using the innovative OS/2 technology of the day. Otherwise this desktop was implemented as a standard Windows MDI application written in C. This was the desktop used exclusively for versions 1.0A to 3.0A. It was also used for the 16-bit versions of 4.0A and 4.1A.


IBM never produced a 32-Bit version of their OS/2 control library for Windows. As a result we had to create a new desktop for our 32-Bit version, which we did using the Microsoft MFC framework. This is now in the age of Windows 95 where Microsoft now has nested icons and tree controls as introduced in the Windows 95 file explorer. These new controls are easy to use from MFC and we created a new desktop using these written in C++. This desktop has been included in all our versions since 4.0A. With 4.2A we dropped the 16-Bit version and this became our only desktop for a short while.


The toolbar and status bar are standard MFC application features. The licensing pane is created by embedding an Internet Explorer ActiveX control.

The Web

With version 5 we introduced our first web version. This was based on building our UIs in VB6 and compiling them as ActiveX controls. We could then run them in an Internet Explorer window. The controls would downloaded and installed automatically and they would communicate back to the server using DCOM or .Net Remoting.

But now we needed a way to select and launch the UIs this way, so we created and ASP application to do this. This was our Web Desktop.


One feature of this desktop is that since we are now Web, we aren’t limited by the usual Windows icons sizes, so all the “icons” are actually 80×80 pixel bitmaps which look quite a bit better than on the standard Windows desktop.

Of course the previous 32-Bit desktop is still in the product for the majority of people that aren’t running web deployed. As it turns out this desktop was never used much because the majority of people that used our web deployment mode only used it from Sage CRM and as a result those UIs were run by CRM rather than our Web Desktop.

The Sage Desktop

Shortly after our acquisition by Sage there was a companywide initiative to standardize the desktop/launcher program across all Sage products. This was the Sage desktop.


This desktop was written in C# as a standard .Net WinForms program. It included things like desktop notifications and news from Sage. Had a modern look and supported most things expected in the desktop. However Sage 300 ERP and CRE were really the only applications in Sage that adopted this and eventually development was discontinued. This desktop was included in versions 5.5A and 5.6A.

The Sage 300 Web Portal

With version 6.0A we introduced the new Web Portal which included data snapshots and a data inquiry tool in addition to the ability to launch screens.


For more information on this Portal, have a look at this blog posting.

Updated Windows Desktop

With the forthcoming release of Sage 300 ERP 2014 we will be updating the standard Windows desktop that we introduced back in version 4.0A with an updated look. We have all new icons for both the programs and for the toolbar. Plus a new look for the toolbar.


This gives the standard Sage 300 desktop an updated look. Especially by refreshing all those icons that have been in the product since version 1.0A.


A lot of attention gets spent on the Desktop/Launcher program since it is usually people’s first impression of running our program. Although most people do most of their work in a program like Order Entry, it’s still good to keep improving the Desktop. Looking back at the desktop’s you can see the influences of the various technologies that were popular at the time.

Written by smist08

June 16, 2013 at 10:28 pm

Sage 300 ERP Macros

with 5 comments


We’ve had macros in Sage 300 ERP since version 1.0A. In the early days we used CABLE (the CA Basic Language Engine) as our macro language. This was a macro language version of CA-Realizer which we used for UI development back then. It was fun creating the development environment with debugging capabilities and such. Amazingly CABLE macros are still supported in Sage 300 ERP and if you run a CABLE macro (*.mac) you will get this environment:


With version 4.0A we introduced Visual Basic for Applications (VBA) as our macro language. We did this hand in hand with introducing our first COM interface a4wcom. This interface is still around, but generally we use the newer Sage 300 ERP COM interface a4wcomex.


Why Macros?

We provide macros as a method of customizing the product which doesn’t require the SDK. While it does require programming, the Basic language used is simpler than say using C, Java, C# or C++. So hopefully more people can provide meaningful coded customizations that are largely upgrade safe. Generally VBA is a very powerful development environment and we’ve seen some amazing pieces of work implemented as macros. Plus VBA is the macro language used by Microsoft Office, so there are many technical resources, books, courses and such to help you with your development. Further you can use macro recording to help you with some starting code.

For many of our customers, the ERP package handles their financial accounting needs, due to regulations on using Generally Accepted Accounting Practices (GAAP) these are pretty standard. However especially in the operations modules a lot of businesses want custom calculations and procedures to more exactly match their particular business. Whether this is enforcing additional government regulations, implementing custom pricing models or whatever. These are very varied and we need to provide a powerful framework so that these can be accommodated whatever they may be.

At the same time we need these customizations to easily migrate from version to version so that customizations don’t then lock a customer into a particular version and prevent them from ever upgrading.

A powerful macro language with deep hooks into the product is an ideal way to accomplish these goals.

Business Logic

Both CABLE and VBA macros are fundamentally based on our Sage 300 ERP Business Logic Objects or Views. The API for all our Business Logic Objects is the same, so once you learn one, to some degree you learn them all. For a bit more info on our Business Logic, have a look at this blog posting. For an example of creating Orders have a look at this posting.

This can be a great mechanism for say importing data from an external system. VBA can access the API of the external system, extract the data and then feed it into our Business Logic to do things like import G/L Journal Entries or O/E Orders.

Using the VBA Forms capability you can create your own screens that interact with our business logic and perform your custom tasks. The VBA forms library/system is a very powerful but easy to use system for creating potentially quite sophisticated UIs.

The API to our business logic that the macros use is the same as the API used by our UIs, so you know that anything you can do in a UI, you can also do in a macro. It also guarantees that this layer is heavily tested and supported.

Generally the main interfaces to our business logic stays the same. As we add features we add fields, but as long as these aren’t required fields and you don’t need to use these features then your macro can remain the same from version to version.


With version 5.0A, we gave VBA the ability to customize our product’s User Interface Forms. We accomplished this by re-writing all our UIs from CA-Realizer to VB. The new VB UIs were created as ActiveX controls themselves and hence could be hosted on standard VBA forms. Then each UI contained a uniform set of methods, properties and events to all VBA macros to interact and customize them.

There is a little work to upgrade when you go from version to version. With each version the screen control gets a new class id, so you need to remove the old versions control reference and add the new one. Otherwise the code should remain compatible and continue to work. I documented how to do this in this blog posting.

Automating Processes

Another great use of macros is to automate recurring tasks. Besides business logic we give you full access to printing reports, including setting all the report parameters. These can be either Crystal Reports of Financial Reports. I blogged on printing through macros here and a bit more information on customizing reports here. Plus from the Business Logic you have access to all processing functions like Posting Batches or running Day End.

So you can write a macro to print out all your month end reports. You can write a macro to go through and process un-posted batches. Or whatever other recurring process you want automated.


Customization through macros is a powerful technology to personalize your ERP and to allow you to achieve greater efficiency. VBA is an industry standard macros language and gives you great power to customize Sage 300 ERP.

Windows Bit-Rot

with 9 comments


In investigating some performance problems being reported on some systems running Sage 300 ERP, it lead down the road to investigating Windows Bit-Rot. Generally Bit-Rot refers to the general degradation of a system over time. Windows has a very bad reputation for Bit-Rot, but what is it? And what can we do about it? Some people go so far as to reformat their hard disk and re-install the operating system every year as a rather severe answer to Bit-Rot.

Windows Bit-Rot is the tendency for a Windows system to get slower and slower over time. Becoming slower to boot, taking longer to log-in, and taking longer to start programs. Along with other symptoms like excessive and continuous hard disk activity when nothing is running.

This blog posting is going to look at a few things that I’ve run into as well as some other background from around the web.


I needed to investigate why on some systems printing Crystal reports was quite slow. This involved software we have written as well as a lot of software from third parties. On my laptop Crystal would print quite slowly the first time and then would print quickly on subsequent times. My computer is used for development and is full of development tools, so the things I found here, might be relevant to myself more than real customers. So how to see what is going on? A really useful program for seeing what is going on is Process Monitor (procmon) from Microsoft (from their SysInternals acquisition). This program will show you every access of the registry, the file system and the network. You can filter the display, in particular you can filter to monitor only a single program to see what it’s doing.


ProcMon yielded some very interesting results.

The Registry

My first surprise was to see that every entry in HKEY_CLASSES_ROOT was read. On my computer which has had many pieces of software installed, including several versions of Visual Studio, several versions of Crystal Reports and several versions of Sage 300 ERP, the number of classes registered here was huge. OK, but did it take much time? Well the first time something that’s run that does this it seems to take several seconds, then after this its fast probably because the registry ends up cached in memory. It appears that several .Net programs I tried do this. Not sure why, perhaps just .Net wants to know all the classes in the system.

But this does mean that as your system gets older and you install more and more programs (after all why bother un-installing when you have a multi-terabyte hard drive?), starting these programs will get slightly slower and slower. So to me this counts as Bit-Rot.

So what can we do about this? Un-installing unused programs should help, especially if they use a lot of COM classes. Visual Studio being the big one on my system, followed by Crystal and Sage 300. This helps a bit. But there are still a lot of classes there.

Generally I think uninstall programs leave a lots of bits and pieces in the registry. So what to do? Fortunately this is a good stomping ground for utility programs. Microsoft used to have RegClean.exe, Microsoft discontinued support for this program, but you can still find it around the web. A newer and better utility is Ccleaner from Piriform. Fortunately the free version includes a registry cleaner. I ran RegClean.exe first which helped a bit, but then ran Ccleaner and it found quite a bit more to clean up.

Of course there is danger in cleaning your registry, so it’s a use at your own risk type thing (backing up the registry first is a good bet).

At the end of the day all this reduced the first time startup time of a number of program by about 10 seconds.

Group Policy

My second surprise was the number of calls to check Windows Group Policy settings. Group Policy is a rather ad-hoc mechanism added to Windows to allow administrators to control networked computers on their domain. Each group policy is stored in a registry key, and when Windows goes to do an operation controlled by group policy, it reads that registry key to see what it should do. I was surprised at the amount of registry activity that goes on reading and checking group policy settings. Besides annoying users by restricting what they can do on their computer, it appears group policy causes a general high overhead of excessive registry reading in almost every aspect of Windows operation. There is nothing you can do about this, but it appears as Windows goes from version to version, that more and more gets added to this and the overhead gets higher and higher.


You may not think that you install that many programs on your computer, so you shouldn’t have these sort of problems but remember many programs including Windows/Microsoft Update, Adobe Updater and such are regularly installing new programs on your computer. Chances are these programs are leaving behind unused bits of older versions that are cluttering up your file system and your registry.

Auto-Run Crap

Related to auto-updates, it appears that so many programs now run as icons in the task bar, install Windows services or install programs to run when you log-in. All of these slow down the time it takes you to boot Windows and to sign-in. Further many of these programs, say like Dropbox, will keep frequently polling their server to see if there are any updates. Microsoft has a good tool Autoruns for Windows which helps you see all the things that are automatically run and help you remove them. Again this can be a bit dangerous as some of them are necessary (perhaps like a trackpad utility).

Similarly it seems that everyone and their mother wants to install browser toolbars. Each one of these will slow down the startup of your browser and use up memory and possibly keep polling a server. Removing/disabling these isn’t hard, but it is a nuisance to have to keep doing this.

Hard Disk Fragmentation

Another common problem is hard drive fragmentation. As your system operates the hard disk becomes more and more fragmented. Windows has a de-frag program that is either scheduled to run when your computer is turned off or you never bother to run it by hand. It is worth de-fragging your hard drive from time to time to speed up access. There are third party de-frag programs, but generally I just use the one that comes built into Windows.

Related to the above problems, often un-installation programs leave odds and ends files around and sometimes it’s worth going into explorer (or a cmd prompt) and deleting folders for un-installed programs. Generally it reduces clutter and speeds up operations like reading all the folders under program files.

Dying Hard Drives

Another common cause of slowness is that as hard drives age, rather than just out right failing, often they will start having to retry reading sectors more. Windows can mark sectors bad and move things around.  Hard drives seem to be able to limp along for a while this way before completely failing. I tend to think that if you hear your hard drive resetting itself fairly often then you should replace it. Or when you defrag if you see the number of bad sectors growing, then replace it.


After going through this, I wonder if the people that just reformat their hard drive each year have the right idea? Does the time spent un-installing, registry cleaning, de-fragging just add up to too much? Are you better off just starting clean each year and not worrying about all these maintenance tasks? Especially now that it seems like we replace our computers far less frequently, is Bit-Rot becoming a much worse problem?

Written by smist08

May 4, 2013 at 2:31 pm