# Dynamics GP POP Tables: Purchase Order Processing Reference and Sample SQL

> Source: https://netray.co/erp-help/dynamics-gp-pop-tables-purchase-order-processing-reference
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: ERP Help

## Short answer

In Dynamics GP, purchase order headers live in POP10100 (open) and POP30100 (history), lines in POP10110 and POP30110, and receipts in POP10300 and POP10310 with history in POP30300 and POP30310. Join header to line on PONUMBER, and link receipts to PO lines through the receipt line quantity table POP10500. Always read from the right open or history table, because closed documents move.

## Kind

how-to

## System

dynamics

## Erp

Microsoft Dynamics GP

## Module

Purchase Order Processing (POP) / SQL tables

## Query

pop tables dynamics gp

## Alternate Queries

- POP10100 POP10110 dynamics gp
- dynamics gp purchase order tables
- POP30100 POP30110 history tables
- dynamics gp purchase order receipts sql query

## Applies To

Microsoft Dynamics GP 2015 through current releases, SQL Server. Verify column lists in your own company database, since customizations and version changes may add columns.

## Steps

### How to query PO data in GP safely

**Items:**

- Connect read-only to the company database (not DYNAMICS) using SQL Server Management Studio or a reporting login.
- Start from the PO header table: POP10100 for open orders and POP30100 for closed or historical orders. Use UNION ALL when you need both.
- Join the line table on PONUMBER: POP10110 for open lines and POP30110 for history.
- Join to receipts through POP10500 (open receipt line quantities) or POP30310 (history receipt lines) using the PO number and PO line number.
- Translate codes such as PO status with CASE expressions, and join to RM or PM tables (for vendor name) using VENDORID.
- Run queries with NOLOCK only for reporting, and never write to these tables directly; use eConnect, Web Services or GP itself for changes.
- Test results against a GP inquiry screen such as Purchase Order Inquiry before trusting the query.

## Sections

### The main POP tables

**Body:**

Open and history tables mirror each other. POP10100 holds PO headers (PO number, status, vendor ID, document date, subtotal, tax, freight) and POP10110 holds the lines (item number, description, quantity ordered, quantity canceled, unit cost, extended cost, location, required and promised dates). When a PO is fully received and closed, the records move to POP30100 and POP30110.

Receipts use a similar pattern: POP10300 for open receipt headers and POP10310 for receipt lines, with POP30300 and POP30310 for history. POP10500 stores receipt line quantities and links receipts back to the PO and PO line. Always check POPTYPE and status values in your version before filtering.

### Joins that work

**Body:**

Header to line is straightforward on PONUMBER. Line to receipt is the one people get wrong: join on PONUMBER and the PO line sequence field, and do not rely on item number, because the same item can appear on several lines.

To report open quantity, use ordered minus canceled minus received, and compute received from the receipt line quantities, not from header fields. Return and invoice-matching transactions complicate this, so reconcile your totals to a GP report before using them in a dashboard.

**Code:**

SELECT h.PONUMBER, h.VENDORID, h.VENDNAME, h.DOCDATE, h.POSTATUS,
       l.ORD, l.ITEMNMBR, l.ITEMDESC, l.QTYORDER, l.QTYCANCE,
       l.UNITCOST, l.EXTDCOST, l.REQDATE
FROM POP10100 h
JOIN POP10110 l ON l.PONUMBER = h.PONUMBER
WHERE h.POSTATUS IN (1, 2, 3, 4)
ORDER BY h.PONUMBER, l.ORD;

### Open and history together

**Body:**

A purchase history report needs both sets. Use UNION ALL across the open and history tables with the same column list, and tag each row with its source so you can tell which are closed.

PO status is a coded value: new, released, change order, received, closed and canceled map to numbers 1 to 6 in standard GP. Use a CASE expression in the query rather than hard-coding text in a report.

**Code:**

- SELECT PONUMBER, VENDORID, DOCDATE, POSTATUS, 'OPEN' AS SRC FROM POP10100
UNION ALL
SELECT PONUMBER, VENDORID, DOCDATE, POSTATUS, 'HIST' AS SRC FROM POP30100;

### Safe usage notes

**Body:**

Treat these tables as read-only. GP maintains related records in other tables (inventory, payables, tax, distributions), and direct updates can leave the company out of balance in ways that are very hard to repair.

Prefer SQL views for reports so that when the schema changes at an upgrade you fix one definition, and give the report login only SELECT rights on the views.

## Pitfalls

- Querying only POP10100 and missing closed orders that moved to POP30100.
- Joining receipts to lines on item number instead of PO and line number.
- Updating GP tables directly instead of using eConnect, Web Services or the application.
- Assuming status codes without checking them in the target version.
- Reading from the DYNAMICS system database when company data is in the company database.

## Ai Angle

Table knowledge is the barrier for most GP reporting requests. A private assistant grounded in your GP schema can turn a question like which POs are past due with open quantity into the correct joins across POP tables, display the SQL, and run it read-only. Netray runs this against the customer's own SQL Server so no GP data leaves your network.

## Faq

### What is the difference between POP10100 and POP30100?

**Answer:** POP10100 contains open purchase order headers, while POP30100 holds history headers after the order is closed or canceled and moved. Reports that need the full history must read both tables, normally combined with UNION ALL.

### How do I link a receipt to a purchase order line?

**Answer:** Use the receipt line quantity table POP10500 for open receipts, or the history receipt tables, and join on PO number and PO line sequence. Verify with Purchase Order Inquiry that the quantities match what GP shows.

### Can I update POP tables with SQL?

**Answer:** You should not. GP updates several related tables for each transaction, and direct changes can break integrity and audit trails. Use the GP application, eConnect or Web Services for any changes, and use SQL only to read.

### Where do I find vendor details for a PO?

**Answer:** Join the VENDORID from the PO header to the payables vendor master table, which is PM00200 in standard GP. Many header tables also store the vendor name, which is handy but may differ from the current master.

## Search terms

pop tables dynamics gp, POP10100, POP10110, POP30100, POP30110, dynamics gp purchase order tables, dynamics gp pop10500, dynamics gp po receipts sql

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
