It would help to know the URL that is reporting the error, the line from the server's error log, and the permissions assigned to the file and it's parent folder(s).

FrontAccounting escapes all values before storing them. If you are storing values directly, you should use the same escaping mechanism. It can create some serious problems if you have a limited char() or varchar() field and suddenly you can't fit a 10 character string in a 15 character field because the escaping expands some characters into 4.

Having said that, it's not going to change anytime soon, so you may have to adapt your code accordingly.


(21 replies, posted in Wish List)

You can customize any report by company. That is not a problem, but I don't think I completely understand the tiered pricing scenario you describe, but you can have some control over whether an item is sold at wholesale or retail, e.g.

Sorry, I'm not sure exactly what you're asking. It does sound a bit strange.


(21 replies, posted in Wish List)

I suggest you read the Wiki on the tax configuration for FA. It should be able to accommodate what you describe quite well.

First you would create all of the taxes that could be applied, with their respective rates and whether or not they apply to shipping.
Then you create tax groups that specify which taxes will be applied to that group. You can also create tax exempt groups.
Next, you set the tax group for each customer branch, so each type of customer may have their own tax configuration.

I hope I understood your question.


(8 replies, posted in Setup)

Just disregard this entire thread. I figured out how to access the install/update languages feature in FA and I used that. Now my reports are working, again. I wonder if there was something amiss in the language files you were kind enough to zip for me.

The generated PHP file is completely different.


(8 replies, posted in Setup)

Is the generated PHP file supposed to look like this? ...

return array(
    '' => 'Cannot update work orders costs:
    'Main  Menu' => '',
    'Logout' => '',
    'Restricted access' => '',
    'Login as user: demouser and password: password' => '',


(8 replies, posted in Setup)

I'm getting 4 calls to gettext_php_support->set_language() (trying to generate an invoice) as follows:

[17-Sep-2019 13:43:16 America/New_York] set_language(en_US,iso-8859-1)
[17-Sep-2019 13:43:17 America/New_York] set_language(en_US,ISO-8859-1)
[17-Sep-2019 13:43:18 America/New_York] set_language(en_US,ISO-8859-1)
[17-Sep-2019 13:43:18 America/New_York] set_language(,)


(8 replies, posted in Setup)

I guess I spoke too soon. When I put those files into my language folder, the system seems to hang/timeout at line 307 of includes/lang/

It just keeps returning to this block:

if (!$this->_lang_code) 
    $this->_jobs[] = array($domain, $path); 

and the value of $this->_jobs[] =

[17-Sep-2019 13:36:41 America/New_York] Array
    [0] => Array
            [0] => en_US
            [1] => ../lang

    [1] => Array
            [0] => en_US
            [1] => ../lang



(8 replies, posted in Setup)

Thank you!


(8 replies, posted in Setup)

On a related note: I'm not sure what would happen if I ran the install wizard over the top of an existing multi-company installation. I don't want to add any new companies or change any of my settings.

The upgrade guide makes no mention of language files. I cannot locate any download on Sourceforge that references language packs.

I apologize if I'm missing something obvious. I have searched my filesystem, read the Wiki and googled this.

I know this is a really basic issue, but I am continuously getting errors about en_US.po not found and I cannot find that file anywhere. It is not in the 2.4.7 distribution. It was in the 2.4.4 distro, but that one breaks 2.4.7.

It doesn't seem to be required for the system to function, but the tmp/errors.log just grows and grows.

Everything I've read says the the .mo file is the compiled version of the .po file and the .po file shouldn't be needed. I need clarification on this, please!


(3 replies, posted in Setup)

Thank you. I would not have looked there.


(3 replies, posted in Setup)

I discovered that I did not create an empty company, but I meant to. I had to clean out all of the sample transactions. I assume there is an option for leaving those out when creating a new company. I must have missed it.

Anyway, I cleared out all of the existing customer and transaction, inventory, etc. and entered the fiscal year into the database manually. I will need to repeat this process several times, so I hope I can figure out how to create a clean/empty company.


(3 replies, posted in Setup)

I've read the Wiki. Maybe I'm missing something obvious, but there should be a way for me to configure the fiscal year on a new company without going into the database and manipulating records.

Here is the situation:
After installing a new company with 2.4.7, I have 2 fiscal years that are 1/1/2018 to 12/31/2018 and 1/1/2019 to 12/31/2019.
If I select 2018 as my current fiscal year, I can't delete 2019 because 2018 exists.
If I select 2019 as my current fiscal year, I can't delete 2019 because it's the current fiscal year.
If I try to create the current fiscal year (10/1/2018 - 09/30/2019), I cannot, because it overlaps with an existing fiscal year.

So, I cannot create the fiscal year I need, and I cannot remove the 2 stupid entries that were blindly put there for me by the setup script.

The company has no transactions. It should not care if I delete and add fiscal years.

Yes, I can go under the covers and fix this, but I should not have to.

Reconciling an account involves accounting for outstanding items. I'm not sure where exactly the problem lies?

You reconcile the items on the statement expecting to reach the balance on the statement, then you add/subtract outstanding items to get to the current balance you will carry forward.

If I understand what you are saying, your balance carried forward should account for transactions in the previous period. You should have reconciled the earlier transactions in the previous system before you determined the opening balance for FA, so you should only have to reconcile transactions that occur after the switch.

There is no way to reconcile transactions that aren't in the system.


(2 replies, posted in FA Modifications)

It's a hack that may require extra permissions to work, but without it, the restore always fails if there are views, because the 2.4.7 code treats views like tables. I would think if a user is savvy enough to create views (which would break the backup/restore), they would make sure they have permission to create them. smile

I'm accessing some FA data from outside of FA, so the views allow me to abstract some of the complexities in FA and hide them from the external function.

Anyway, the purpose of this reply is to tell you that I don't know how to submit code changes for FA.

The way I check to be sure on those things is I make a database backup, change something, make another backup, and diff the two backups to be sure there is nothing I missed.

In this case, you're not generating transactions that have all sorts of side effects, like stock-moves, GL entries, etc.

That is correct. Were you expecting it to update previous transactions?


(2 replies, posted in FA Modifications)

I created a view to simplify my SQL and discovered that views are not supported in the 2.4.7 backup utility, so I coded in generic support for backing up and restoring views.

I made changes in /admin/include/db/ and in /includes/db/

I don't know if my changes are generally useful, since FA seems to avoid views. If my changes are useful to anyone else, please let me know how/where I can post the changes.

p.s. The changes are pretty trivial and they are isolated to the backup/restore functions.

I spoke too soon on my previous answer. It appears, in FA 2.4.7, if you leave the branch billing address blank, the invoice will use the customer billing address on the invoice.
The only thing I don't see how to change is the branch name still appears above the customer billing address, but if the branch name is the same as the company name that may not be a problem.

If I understand what you're asking, you're wanting the company's billing address on the invoice regardless of which branch is selected?
As far as I can tell, you would need to change the invoice header format. The name and address that is pulled into the invoice data record in debtor_trans is from the selected branch. Maybe that could be an option in the future, to always bill to the customer address, but without a code change, I'm pretty sure the header format is your only option. You might have to call a function to get the customer address based on the debtor_no in the invoice, but it could be done.

Also, I am noticing a customer prepayment is simply going to the Accounts Receivable/Asset account. I don't find a Customer Deposit/Liability account. Is this by design? It would seem that a customer pre-payment should be recorded to a liability account since it isn't yet an asset.

The entries are recorded as negative amounts so they reduce your AR asset account. I guess a negative AR is a positive liability, but it works out the same.
Balances on customer accounts are determined independent of the GL and all customer charges and credits are rolled into AR in the general ledger.
I'm not saying it's the best or most correct way of doing it, but a negative asset has the same net result as a liability, so the balance sheet is correct.


(6 replies, posted in Accounts Receivable)

Not sure where all the previous discussion went, but I don't remember anyone saying anything about making journal entries to pay invoices.

All of my testing has been with decimals set to 2, but the error only happens if you add sales tax on freight (AFAIK). However, if you do that, you are guaranteed to get some invalid numbers.

I reported a bug. It may be something fairly easy to fix, since it is pretty predictable.

Just be sure your Accounts Receivable balance is correct. That is probably where the errors are the most noticeable ... that and when an invoice shows an incorrect total.