JD Edwards GL Post: Batch in Error or Out of Balance
JD Edwards GL post batch in error out of balance R09801
Also searched as
- JDE batch status E in error cannot post
- JD Edwards journal entry batch out of balance
- R09801 post report errors how to fix
- JDE unposted batch stuck posting status P
Short answer
A JD Edwards journal batch fails to post when the General Ledger Post program (R09801) finds a problem in the batch header (F0011) or its detail (F0911), such as an out-of-balance document, an invalid account, a closed period or an inactive business unit. Read the post report errors, fix the offending journal lines in Journal Entry, then repost the batch from Batch Review.
Applies to: JD Edwards EnterpriseOne 9.x (Tools 9.1 and later); concepts also apply to World GL post. Menu names vary slightly by release.
How to clear a batch in error and post it
- 1Open Batch Review (P0011) and filter by batch type (G for general accounting, V for vouchers, R for receipts) and batch status to find the batch. Note the status shown for the batch: in error, posting or approved.
- 2Open the post report output (R09801) from the Work With Submitted Reports view (WSJ). Read the error section: it lists the document number, line and the reason, such as invalid account, business unit not found, or period closed.
- 3Fix the data cause. Invalid account: add it in Revise Single Account or correct the line. Closed period: have the controller reopen it in the company constants or change the G/L date. Out-of-balance document: correct the line amounts so the document nets to zero.
- 4Open Journal Entry (P0911) or Standard Voucher Entry (P0411) in inquiry mode, locate the document through Work With Journal Entries, and correct the failed lines. Do not edit F0911 with SQL as a first resort.
- 5Return to Batch Review, select the batch, and if its status is in error, use the row exit to approve it if your site requires manager approval before posting.
- 6Choose Post by Batch from the row exit, or run the GL Post to run R09801 for that batch, and watch the report for new errors.
- 7Verify in Account Ledger Inquiry that the lines now show posted, and check the trial balance for the account in question.
- 8If the batch status shows posting but no job is running, treat it as a stuck batch and see the reset notes below.
What the post program actually checks
The post program reads unposted rows in the Account Ledger table (F0911), validates each one against the Account Master (F0901), Business Unit Master (F0006) and the fiscal date pattern for the company, and then writes summarized balances to Account Balances (F0902). The batch header lives in Batch Control Records (F0011), which is what Batch Review shows. If any row in a batch fails validation, the whole batch is flagged in error and none of it posts, which is why one bad line blocks a batch of hundreds.
The most common causes are an account that was valid on entry but later made inactive or deleted, a business unit whose posting edit code blocks posting, a G/L date in a period that has since closed, and a document that does not balance because an automatic offset (AAI item) was missing at entry time. Intercompany documents add a further check: each company within the document must balance on its own, so an out-of-balance message can come from a single company inside a multi-company journal.
-- read-only: unposted detail rows for one batch (replace batch number) SELECT GLKCO, GLDCT, GLDOC, GLLNID, GLAID, GLMCU, GLAA, GLPOST FROM F0911 WHERE GLICU = 123456 AND GLICUT = 'G' ORDER BY GLKCO, GLDCT, GLDOC, GLLNID;
Out of balance versus in error
These are different situations. A batch can be out of balance at the control level when the batch total entered at header time does not match the sum of the detail, which happens when batch control (manual batch entry of expected total) is turned on in the processing options of Journal Entry. In that case the fix is to correct either the control total or the detail. A document can also be out of balance in its own right, where debits and credits do not net to zero for a document number, company and ledger type.
A batch in error is a status outcome of posting, not a type of imbalance. It tells you the post run found problems and stopped. Always start from the post report rather than from the batch header, because the report names the document and line while the header only tells you something failed.
-- read-only: documents that do not net to zero in a batch SELECT GLKCO, GLDCT, GLDOC, SUM(GLAA) AS NET FROM F0911 WHERE GLICU = 123456 AND GLICUT = 'G' AND GLLT = 'AA' GROUP BY GLKCO, GLDCT, GLDOC HAVING SUM(GLAA) <> 0;
A batch stuck in posting status
If the post job was killed, the server restarted, or the UBE crashed mid-run, the batch can sit in a posting status with rows flagged as being processed. Repost attempts are then refused because the system believes another job owns the batch. First confirm no R09801 job is actually running in Work With Servers or WSJ for that batch. If none is, the usual route is to reset the batch status through the supported Batch Review function or, if your release does not expose a reset, to raise it with your Oracle support analyst before touching F0011 directly.
Direct updates to F0011 and F0911 flags are a last resort that should be done in a copy-tested environment, with a backup of the rows, because a half-posted batch may already have written some F0902 balances. A good rule is to compare F0911 posted rows to F0902 balances for the affected accounts before and after any manual change.
Common pitfalls
- !Fixing the batch header and ignoring the post report: the header status never explains the cause, only the report does.
- !Reposting repeatedly without reading the error. Each failed run adds log noise and can mask the original problem.
- !Editing F0911 with SQL to force a document to balance. That bypasses automatic offsets and audit fields, and the subledger (F0902 balances) will not agree.
- !Reopening a closed period for one batch and forgetting to close it again, which lets other users post into it.
- !Changing a G/L date to dodge a closed period without telling the controller. Reports by period will shift.
- !Assuming a stuck posting status means the job is still running. Check for a live UBE process first.
How an ERP-grounded AI assistant handles this
ERPray, connected read-only to the JDE database, can answer which batches are in error, list the failing documents with the reason, and show the exact query it ran so the controller can verify. It does not post or reset batches. Any correction goes through a human in Journal Entry, and a write-back suggestion would need explicit approval under the user's own JDE security.
Frequently asked questions
Why does one bad line stop an entire batch from posting?
The post program validates the batch as a unit and flags the batch header in error if any detail row fails. That protects balances from partial updates. You fix the failing lines, then repost the whole batch.
Can I post a batch that is out of balance?
No. A document must net to zero for each company and ledger type before it will post. Correct the lines in Journal Entry, or add the missing offset, then repost.
Where do I find the post errors?
Open the submitted job in Work With Submitted Reports (WSJ) and view the PDF output of R09801. The error section lists document, line and reason. Batch Review only shows the resulting status.
What if the period is closed but I must post?
Ask the controller to reopen the period or approve a different G/L date. Posting into a closed period should be a deliberate accounting decision, not a technical workaround.
Related
JDE UBE failed (status E): how to read jde.log and jdedebug.log
A UBE (batch report/program) that ends with status E in Work With Submitted Jobs tells you almost nothing on its own. The real error is in jde.log on the enterprise server, in the job's own PDF/log subdirectory (jdedebug.log if you turned on debug), and in the work directory for that job number under PrintQueue or the OS temp path.
Error fixJD Edwards: record is being used by another user (record reservation)
EnterpriseOne places a soft record reservation lock when a user opens a record for edit, tracked in the F00165 table, and releases it when the user saves, cancels, or the session ends cleanly. A stuck lock almost always means a session died abnormally (browser crash, network drop, kiosk timeout) without triggering the release, and it must be cleared by an admin, not by the original user retrying.
AdvancedHow to set up row security in JD Edwards Security Workbench
Security Workbench (fast path SECURITY, application P00950) is where every type of EnterpriseOne security record is defined, including row security, which restricts which rows of data a role or user is allowed to see or act on based on a key field like business unit or company, independent of whether they have access to the application itself. Application security controls whether a role can open a program at all; row security controls what data they see once they are in it.
Error fixJD Edwards business function (BSFN) errors: how to diagnose them
A BSFN error in EnterpriseOne means either the compiled function was not found for the current package build, or the function ran and threw an internal exception (often a null business view row, an unhandled C runtime error, or a failed table I/O). The fix path is different for each, so the first step is always determining which one you are facing from jde.log.
How-toHow to set up JD Edwards Orchestrator (step by step)
An EnterpriseOne orchestration chains one or more requests (form requests that drive an interactive application, or service requests that call a BSFN, business service, or SQL) plus optional rules and notifications, then exposes the whole thing as a callable REST endpoint via the AIS (Application Interface Services) server. The setup work happens in Orchestrator Studio, not the Fat Client.
How-toHow to set data selection and processing options in JD Edwards
Data selection controls which rows a UBE's underlying business view reads (a filter, stored per version in F9210/F9211), while processing options control how the program behaves once it has that data (a settings template stored per version in F983051/F983052). They are configured from the same Version Detail screen but are separate, unrelated mechanisms that new users routinely confuse.
AI for ERPAI for JD Edwards EnterpriseOne, Built on Orchestrator and AIS
Add AI to JD Edwards E1 9.2 using Orchestrator, AIS, and BSSV rather than screen-scraping. Ground a private LLM on F4211, F4111, and F0411 data.
Stuck on JD Edwards EnterpriseOne?
Talk to engineers who work inside JD Edwards EnterpriseOne every week, and who build private AI that answers these questions from your own ERP data.