Share this:

Like this:

48 Responses

[…] Here is a categorized directory of all my articles on Sage 300 ERP. Architecture Accpac and its Databases International Support in Accpac Accpac Multi-Version Support Customization Day End Processi… […]

Hope you are doing well.. i have a question. What is the use of clone property in accpac datasource. could please explain with a sample scenario where its application is essential and most appropriate.

Usually this is used to connect to multiple companies. Once you have a session signed onto one organization, then you can clone to get a session for another organization without providing the credentials again.

Hi – We run Sage ERP 6.0.a. I am responsible for entering and changing customer prices. We have about 750 customers. Some prices are the same across all customers while others are customer specific. We have about 8000 skus. Customers buy subsets of the 8000 skus and only those items they buy are entered into their account.

Have you written an article on entering and changing prices? Or can you refer me to some ACCPAC ERP documentation on the following?

Specifically, have you written about porting prices in an excel spreadsheet to a customer’s price list? About copying and pasting the prices of multiple skus from one price list to another and indicating that these were changed or will be changed on a specific future date? About deleting multiple skus in a price list?

I haven’t blogged specifically on this topic. Within Sage 300, check out the Copy Item Pricing and Update Item Pricing screens in the I/C Items and Price Lists folder. These are intended to perform the operations you mention. Plus you could record macros of these to create custom functionality.

I’m struggling with something that I hope you can shed a little light on. I’ve read many of your excellent articles on working with the 300/Accpac APIs and they’ve solved many problems for me. However, I have one that has been nagging, and even DPP support, who are also quite excellent, haven’t been able to help much in the past.

The issue is that it seems to me that an insert/update of an OE Shipment or OE Invoice creates an automatically “chained” update to the original OE Order that is linked to the Shipment or Invoice. This even seems to happen when Day End runs. Let me illustrate what I mean with an example that also describes the problem I am having.

I have a small module that does two main things — first, it deploys a table into the company database that is used to track if an order inside of our external system has been “locked,” as in, no modifications should be allowed to it. Second, it sub-classes the OEORDH view in such a way that when an update to the order is fired, it first confirms that the given order is not marked as locked in the previously mentioned table. If the order is not locked, the standard OEORDH update code runs ahead as normal, and if the order is locked, the update is stopped and an error is presented to the user indicating the lock is preventing their modifications.

The problem with this is the “chaining” that seems to occur in Accpac when a Shipment or Invoice are entered against that original order, or Day End runs. This is particularly a problem in our case with the Invoice post or Day End because those functions don’t impact data on the original order that impact our external system, so we really don’t need to prevent those updates. Yet, the updates end up being prevented because something seems to chain the Day End and Invoice modifications through to resulting in a call to the Order update method.

Is this an architectural limitation that I cannot work around, or is the approach of sub-classing the OEORDH update incorrect? Another thought I had was, is there a way to tell the source of the OEORDH update call, and discriminate against updates that are direct calls to OEORDH update, as opposed to these calls that seem to be “chained” from accounting functions that don’t impact inventory (our external system only cares about inventory… item numbers, quantities ordered/committed/picked/shipped, serials and lots, etc.). I can’t find any documentation indicating if this is possible.

One thing you can try. Before shipment/invoice updates OEORDH, they would first call OEORDH.viewCallParam with the parameter “op” value = 144, such that OEORDH only does a physical record update and nothing else (e.g. generation of temporary records, calculation of quantity deltas etc), so your subclassed view can detect the same exception.

Thanks Steve, this is a great reply, I have been searching high and low for advice on this and this is wonderful!

A couple follow-ups:
1. Is it possible to distinguish between an OEORDH update that occurs as a result of a shipment entry vs. an invoice entry?
2. Is it possible to distinguish between an OEORDH update that occurs as a result of Day End vs. any other sources that trigger the update?

When you sharing this knowledge, you are doing a great job for dev community.
Thanks to your articles, I confidently work with Sage .NET API.

Can you please help me with following point:

I need to get recently modified transactions (order entry) from .net API – I need to get all transactions list that was modified in an hour for example.
But I can not find any relevant fields in order entry. It is “[AUDTDATE] and [AUDTTIME]” fields in MS SQL database. I am able to get other fields (like order number, addresses, shipto, etc.) but not this one.

Do you have any suggestions how I can get this values or idea about any workaround for my issue?

I don’t think there is an easy way to do this. The Audtime field isn’t exposed from the Views. You could read the database with ODBC or something to get this (just don’t write back this way). Or you just need to read the records and calculate a hash value that you compare to something you stored to see if the record changed.

I have some code that uses the Sage 300 ERP .NET Libraries portion of the API/SDK that creates IC Adjustments from external system data. On rare, but troublesome, occasions, I receive the following error:

Options.

Record has been modified by another program.

Certainly, I understand what the “record has been modified…” error means. What I’m wondering is, what does “Options” tell me? My gut feeling is that I have one or more views opened with a read/write DBLink that should just be opened with a read DBLink, and wondering if the mention of “Options” in the error would possibly indicate what view(s) might not like that?

The usual reason you get these is due to the next sequence numbers for various things being stored in Options records. Generally in our transactions we try to minimize these by updating these late in a transaction so there isn’t much room for these, or if we can we allocate several numbers at one shot. If you are setting transactions yourself, it might be that they’ve gotten quite large.

Is there a way one can change a contract’s billing type from Non-Billable to billable on Sage ERP Project Job Costing (there is already an invoice captured against this contract)? If one has to change it in the tables, which tables will be affected?

I imagine that if the UI is preventing you from changing this, then its protecting the data. That if this did change then the collected numbers for the contract would be incorrect. You might be better off creating a new contract in this case.

Generally we try to stick to standard SQL for portability. Even now that we are only using SQL Server, we have to contend with Azure SQL which is quite different. There are many articles that state stored procedures are bad like http://weblogs.asp.net/fbouma/38178. I don’t think they are inherently bad and would use them for very narrow purposes, but would rather have my business logic clearly defined at a higher layer..

Hello Steve,
Hope you are doing well. I am a programmer in Thailand. Now I am using Sage 300 ERP. May I ask you any question? Can I change value of optional field that is used in Purchase order details through database directly ?

Thank you for your suggestion.
More question,
Around 3 months ago I found some error 5-6 times on OE Order entry that showed “Record has been modified by another program”.
There are 20 users in my system (access to Accpac by remote to terminal service server), 6 of all users used OE Order entry but this error happened to only one user.

I am positive there is no user uses the same document at the same time.
I tried to solve this by created the new user ID but it still has error.

A lot of times the contention can be on something else, like an options record. Often this can depend on the various settings you have for I/C and O/E. If you are creating sub-ledger batches during posting, perhaps try switching this to during Day End.

I am creating program that is similar to Accpac OE Order entry and send transaction to Accpac by using Acapac API.
I have some problem when the customer credit available is not enough that causes my code is not working.
Are there any solutions for check customer credit available before send transaction to Accapc.
I am using Sage 300 ERP.

Today user able to log in to Sage ERP 300 V2016 using User ID ADMIN and PW but no menu options displaying at the left hand task pane except Intelligent Reporting . We have guided user to login as admin in sample database also and guided her to create new database then to do a dbload with no security also same screen shot no menu options displaying at the left hand task pane except Intelligent Reporting

As confirmed by IT colleague there is NO any network changes or windows update was conducted in past few days We have guided users to access to Database Setup of respective database to run Propagate – OK ,

Remote access to server or from all the 5 WS same screen shot no menu options displaying at the left hand task pane except Intelligent Reporting

Run the system diagnostic on server and workstation and check the log file system – OK

Run scanism – OK

Able to print system information and displaying all the modules installed .

We have checked the size/date of the files at each folder \AR63A\ENG\GRP.DAT ; \AP63A\ENG\GRP.DAT; \GL63A\ENG\GRP.DAT,\BK63A\ENG\GRP.DAT; \TX63A\ENG\GRP.DAT; \AM62A\ENG\GRP.DAT; \AS63A\ENG\GRP.DAT all changed to the extension of D2B

We managed to resolve the issue by repairing all the Sage V2016 programs and have to install Norming Fixed Assets V6.2 again to repair , Servers being attacked by virus and all he excel files and GRP.DAT
to different extensions. There are no trace of virus attacks at Event Logs

I’m facing a issue in Sage 300 ERP 6.3 version 2016 with product update 2(which also occurs above 6.1),
when I use in VBA Field edit control, I disabled after entering a value (in field change event) screen getting crashed with UI container error. Inputting value in a FEC and disabling same control in Field change event.

if I select value from finder for the same field its fine, if I input through keyboard and press of tab key its crash with UI Container Error.
so this forcing me keep the field enabled, it may lead to error if again same field user enters the value. any solution available for this. Please help me in this.Thanks

Are you responding to the record changed event from the datasource? If you are using a FEC event you might be getting in a tight loop where your change causes another event that causes another change, etc.

I’m disabling FEC in On record changed event, no code written in FEC level. only data source level it is written and that Data source on record changed also called only once, just simple disable, but this happens only same field disable after typing from keyboard(If i select using finder its fine). I can able to disable other controls its fine, but after inputting and disabling the same control at record changed level its crashing.

Yes i tried mappcontrols methods, and even i tried to disable from field attributes in View level then also getting the same issue, but with finder its fine, through keyboard input its getting crashed. and very few times its not crashing.. so we are temporarily not disabling the control and we are handling at field change level

Hi Stephen,
We have a very unusual problem on two workstations at a client site using Sage 300 version 2017.
We are creating a macro from scratch and the moment we click insert userform to add a form the macro crashes with an error “Sage VBA has stopped working”
You cannot run or edit any macros that contains forms and you cannot create new macros and add forms to them.
On the same computers the Excel VBA works fine, we can add forms to them.
We re-installed Sage 300 2017 numerous times (local install), registered FM20.dll.
Any suggestions? We have never encountered this error despite doing hundreds of macros for Sage 300.
Thank you for any input you might have.

If they have installed multiple versions of Sage 300 in different places then this sometimes can cause weird problems. You could try running regacc to unregister all the Sage 300 DLLs then run it again to re-register them. Also it might be security. Perhaps the users logged onto these computers are missing some sort of necessary access right.

Hi Smith,
I am trying to find out what was the End of life date for Sage AccPac ver 5.6A? Could you please point me to any link where I can get the date or Month/Year when the support for AccPac ended?