Files Sync Providers

Hi All, Acumatica architecture is very extensible and many functions can be extended just with new class of specific interface/base class.Import Data Providers, Dashboards, Credit Card Processing, Bank Statement Import and so on. Most of them already described in different sources. However today I want to show you how to create a custom File Sync Provider. The list of providers that you can see in the Synchronization Types is actually dynamic. That means you can add there more functions without changing base code of Acumatica. To add a new File Sync Provider you need to to 2 things: Create a Provider class that can handle files Export/Import Extend Combo-box to… Read more

Sales Basics For Developers

Hi All, Here I want to share with you some information and my observations on how ERP Sales works in our business. As developers or consultants we are not often involved in sales processes and not often understand how company earns money. However I believe that is an essential knowledge for every single employee as only trough understanding of company targets we can properly define priorities. This is continuation of my previous article – Accounting Basics for Developers. Nature of Sales Sales in general is very chaotic thing that may be affected by so many different aspects: personal preferences (like/dislike more), knowledge (know how to use), personal relationship (trust someone… Read more

Records Post-Processing

Hi All, Today want to share with you some thoughts about how to organize additional processing in Acumatica.Commonly we may need to to something together with document release: create contract, send EDI request (like inter-company), call 3rd party API and so on. Most common way to do so is just code infection in the save or release process. Than you do 2 things just together.However this leads to some troubles: Performance – when you do 2 operations simultaneously you have to lock transaction for longer period of time, that finally affects other users as they have to wait. Repeating – if operation fails and you have to repeat it you… Read more

Developer Webinars Feb for 2019 R1 Updates

Hi all, As last post related to our webinars for developer in 2019 (https://asiablog.acumatica.com/2019/02/acumatica-announced-a-webinar-series-for-developers.html), We would like to share with you some recording in case you missed the session. Credit Card Processing Enhancements – 22nd FebruaryBelow in the recorded session, we discuss our roadmap for our credit card processing plugin for 2019 R2 and discuss what’s new in 2019 R1 .  We talked about our new processing plugin interface, mobile credit card payments, portal payments, changes in our Credit Card Payments workflows, and deprecating older plugins. Generic Inquiry Improvements – 25th FebruaryPivots, navigation, totals, side panels, conditional colorization, OData and Push notifications. All these features are supported by our Generic Inquiries. We demonstrated all of these… Read more

Partner Custom Training – Interviews

Hi All, Few months ago I was conducting a specialized training for About IT partner of Acumatica in South Africa. We have discussed many things like: development, issues investigation, implementation projects, internal ERP usage and many others. Here I want to share with you three interviews we recorded as part as these activities. Feel free to request Acumatica to provide training for whether you need it. Acumatica team will be happy to work with you on agenda and your questions.

Generic Inquiry Tips & Tricks

Hi everyone! As you may know, a lot of things (such as OData, Push Notifications, Dashboards) in Acumatica are based on Generic Inquiries. In this post I’d like to share some tips and trick related to building GIs I found useful. I hope you’ll find them useful too. Join conditions containing multiple tables. Probably, the most unintuitive trick that you can do is adding join conditions based on fields that are not in the list of Parent Fields or Child Fields. Actually, you can use every field from every table to build join conditions in GI just like you do in SQL. You are not restricted by just Parent fields… Read more

How To: Count number of prints in Acumatica

Hi All In this post I will explain how to use Acumatica’s Audit feature help to keep count of how many times a invoice report was printed and then with a little bit of Acumatica Report Designer knowledge, you can indicate on the report if it is a copy/duplicate. The objective in this example is to print a invoice with a header “Tax Invoice” and when it is printed a second time to show “Copy of Tax Invoice”. Audit Feature First you have to setup an Audit of the [ARInvoice.Printed] field on the AR301000 screen: On Invoice and Memos screen (AR301000), the checkbox field below is updated to a true value… Read more

Prevent SO Invoice from Posting Inventory

Hi All, A quick customization tip for you – if you need to cut Inventory posting from SO Invoice you can just simple override PostInvoice and don’t call the base method.In this case Invoice will be successfully released, but inventory transaction will be totally ignored. This customization might be important in some cases and have an easy customization!

Accounting Basics for Developers

Hi All, Long time ago, one my good friend explained me the accounting principles in 30 minutes in a way where I (a system developer, that time) understood it and never forget anymore. This knowledge serves me for a more than 5 years now and I promised myself to share this knowledge with every one how needs. So here it is – Accounting basics for developers.I’ll focus on accounts, account types and general ledger to explain where it is coming from and why it is like this. I guess you’ll understand how to use it after that! Part 1 – Owner is a Core Historically wise, everything has started from… Read more

Acumatica Announced a Webinar Series for Developers

Hi All, Mark Franks just announced an exiting webinars series –https://adn.acumatica.com/blog/announcing-a-new-developer-webinar-series-for-isvs/ I want to encourage you to join and attend most important topics to you. Event if you are in the different time zone, take this chance get a recording and be the first to know new perks in Acumatica Cloud! Please register by clicking on the webinars above you wish to attend. Credit Card Processing Enhancements – 22nd FebruaryJoin us as we discuss our roadmap for our credit card processing plugin for 2019 R2, and see what’s new in 2019 R1 .  We will talk about new processing plugin interface, mobile credit card payments, portal payments, changes in our Credit Card Payments… Read more

Primary & Foreign Keys

Hi Everyone, Acumatica is a advanced ERP system. And when we speak about ERP it is not only about data input, it also about how to store, retrieve and analyze data we have. Because of this we have very connected tables in Acumatica databas where almost every 3rd-4th column is a foreign key to other record. This helps a lot with data analyses.But how to organize keys better for usage, faster for search and smaller for database storage? Primary/Foreign Keys Definition In general we have only 2 ways to define and organize keys: Natural Keys and Surrogate Keys. Each way has own benefits. Natural keys (Code, CD)A natural key is… Read more

Use Acumatica xRP Platform from Console App

Hi All, Did you know that it is not necessary to have a Web Site under IIS to get benefits from Acumatica Platform? You actually can run Acumatica platform even from console app! To do this you just simple do following: Create Console Application in Visual Studio Add references to (PX.Common.dll, PX.Data.dll, PX.Objects.dll) Copy web.config from Acumatica site to app.config of your console application Specify user and company using PXLoginScope Use Acumatica Platform as normally you do that. Here you can find a code example followed by some comments: App.config file is required to Acumatica platform to get proper environment configurations, database connection and other settings. For experiments you can… Read more

Cash Discount Customization

Hi Everyone, Today want to share with you a ways to customize cash discount calculation in AP and AR. The main payer there is a TermsAttribute, that does all required discount calculations. It is linked to fields it need through parameters in constructor: ARInvoice.docDate – input – date of the document ARInvoice.dueDate – output – due data of the document ARInvoice.discDate – output – data where discount is applicable ARInvoice.curyOrigDocAmt – input – total document amt from where discount will be calculated ARInvoice.curyOrigDiscAmt – output – end discount value As there values are configurable it very easy to replace its calculations using customization framework and use different values as a… Read more

Restoring database and create an instance.

Hi guys, I want to share on how you will restore an instance from an existing database file. We usually use the snapshot function of Acumatica, if the system has too many tenants, you will make a snapshot every single out of it, which will make it very tiring task for you also added if the database data is so large. Note: This is only good if you have access on the database itself with management tools, like SQL Management Studio for SQL Server, or Any GUI for MySQL/MariaDB Servers which will produce a .bak File or a .SQL File for you to restore. How to Create an Instance from… Read more

Concurrent Update

HI All, With current web applications architecture it is complicated to track what users are doing on browser side: are they still online or on the way to take a cup of coffee? Will they save a record or just checking it?We can’t just lock records in the Web Application every time when someone have opened it for editing.So here we have 2 main problems: You don’t know who and when will save it You don’t know if user still online or not In Acumatica we have designed the platform in the way to not depend on user behavior. But we still have 2 different ways to manage concurrent update… Read more

Team Structure and Features Work

Hi Everyone, I would like to speak a bit about team development and would like to share a bit of experience of how Acumatica organize development teams. Actually within Acumatica history I really saw how company was changing from unstructured extreme programming to real and organized scrum. This was a long path full of mistakes and success. And I think this experience is worth to share. Here are few ideas to you. Acumatica team is one, solid team where 4 different types of employees are involved. This is important in terms of responsibilities for feature. Team owns the feature and should really focus all resources to deliver it on time.Here… Read more

Easier way on adding Action Menu in Existing Graph

Hi Guys, to help you with coding or adding a Menu Action to an existing screen. Level: Basic Example Scenarios: Grouping Customized Reports  Organized Action Buttons Folder instead of displaying all buttons in toolbar First we need to define our Action Buttons Folder Action Action1 Action2 Then we override the screen’s Initialize() or Initialization Process Using public override void Initialize() then we add the Actions to the Action Folder with  this.ButtonFolder.AddMenuAction(ButtonItem1); Furthermore, please include  MenuAutoOpen = true to make the button not clickable as button and will act as a dropdown button. Please refer to the code below: Just publish the Customization Project, and it will apply accordingly. That’s it, have a nice… Read more

Dynamic API Endpoint URL

Hi All,Sometimes you may need to dynamically change the URL of the API endpoint. In these cases standard way with putting URL in app.config file does now work properly, so we need another way. Here I want to share with you one of the good options that I used in some API integrations here URL needs to be configured in the sessions screen: This approach also helped me previously to solve issue “Could not find endpoint element with name ‘<Name>’ and Contract ‘<Name>’ in the ServiceModel client configuration section. …” In general this error can be solved by copying app.config file with dll or embedding configurations, but it is much… Read more

Extend Tax Calculation Precision

Hi All, A while ago I got a question about extract from document tax calculations in Acumatica. In Thailand there is requirement by law to calculate tax from Document Amount, however in Acumatica we have only option to extract tax from item amount. However this calculation is not aways correct due to rounding differences between line amounts and document amount. For example if you have 7% tax and 3 lines (47000, 18000, 9000) with total 74000 than: If you calc taxes from each line and sum it than you get Taxable Amt = 69,158.87, Tax Amt = 4,841.13 If we calc if using excel (Amt – Amt*1.07), than Taxable Amt… Read more

Tenant Selector In Acumatica

Hi All, Quick trick for you. If you need to link several tenants together, you can use the code from this article Tenant selector attribute: #region NeuralCompanySelectorAttribute public class CompanySelectorAttribute : PXCustomSelectorAttribute { public CompanySelectorAttribute() : base(typeof(UPCompany.companyID)) { DescriptionField = typeof(UPCompany.loginName); } protected virtual IEnumerable GetRecords() { PXCache cache = _Graph.Caches[typeof(UPCompany)]; Int32 current = PX.Data.Update.PXInstanceHelper.CurrentCompany; foreach (UPCompany info in PXCompanyHelper.SelectCompanies(PXCompanySelectOptions.Visible)) { if (current != info.CompanyID) yield return info; } } public override void DescriptionFieldSelecting(PXCache sender, PXFieldSelectingEventArgs e, string alias) { if (e.Row == null || (sender.GetValue(e.Row, _FieldOrdinal) == null)) base.DescriptionFieldSelecting(sender, e, alias); else { UPCompany item = null; Object value = sender.GetValue(e.Row, _FieldOrdinal); Int32 key = (Int32)value; foreach (UPCompany info… Read more