ITM1 table in SAP Business One (Item Prices (per price list))

ITM1 is the SAP Business One table that stores item prices: one row per item and price list, with the price and its currency. Join it to OITM on ItemCode and to OPLN on PriceList = ListNum to get the item name and the price list name.

ITM1 key fields

FieldWhat it holds
ItemCodeItem. Joins to OITM.ItemCode.
PriceListPrice list number. Joins to OPLN.ListNum. ItemCode + PriceList is the primary key.
PriceList price of the item in this price list.
CurrencyCurrency of the list price. Joins to OCRN.
OvrwrittenManual price entry: Y or N.
BasePLNumBase price list number. Joins to OPLN.ListNum.
FactorFactor applied to the base price list.
AddPrice1 / Currency1Additional price (1) and its currency.
AddPrice2 / Currency2Additional price (2) and its currency.
UomEntryUnit of measure entry. Joins to OUOM.
PriceTypeI = inventory UoM price, P = pricing unit price, M = both I and P, O = other UoM price.

How ITM1 relates to other tables

ITM1 sits between OITM (the item) and OPLN (the price list): ItemCode points to the item and PriceList to OPLN.ListNum. The price list itself (name, base list, factor, rounding) is in OPLN; the price of each item is only in ITM1. Older versions of ITM1 rows are kept in AIT1, which the SDK describes as Item - Prices - History; its key adds LogInstanc to ItemCode + PriceList.

Common joins

  • ITM1 T0 INNER JOIN OPLN T1 ON T0.PriceList = T1.ListNum (price list name)
  • ITM1 T0 INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode (item master)
  • ITM1 T0 LEFT JOIN AIT1 T3 ON T0.ItemCode = T3.ItemCode AND T0.PriceList = T3.PriceList (price history)

When you use the ITM1 table

Use ITM1 for price list exports to e-commerce or a portal, items without a price in a list, price comparisons between lists, and checks before a price update. Filter one PriceList at a time unless you really need all lists side by side.

Example query: item prices with price list name and currency

SQL Server

SELECT T2.ItemCode, T2.ItemName, T1.ListName, T0.Currency, T0.Price
FROM ITM1 T0
INNER JOIN OPLN T1 ON T0.PriceList = T1.ListNum
INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode
WHERE T2.SellItem = 'Y'
ORDER BY T2.ItemCode, T1.ListNum

SAP HANA (column names in double quotes)

SELECT T2."ItemCode", T2."ItemName", T1."ListName", T0."Currency", T0."Price"
FROM ITM1 T0
INNER JOIN OPLN T1 ON T0."PriceList" = T1."ListNum"
INNER JOIN OITM T2 ON T0."ItemCode" = T2."ItemCode"
WHERE T2."SellItem" = 'Y'
ORDER BY T2."ItemCode", T1."ListNum"

Paste either version in Tools → Queries → Query Generator. Need the other dialect for your own query? Use the SQL to HANA converter.

Common pitfall: Adding up prices in different currencies

Each ITM1 row has its own Currency, and AddPrice1 and AddPrice2 carry their own currencies too. A report that sums or averages Price across items or lists without checking Currency mixes amounts. Group or filter by Currency, and filter one PriceList when you compare items. See Items with no price in a price list.

Ready-made queries that use ITM1

Questions about the ITM1 table

Where are item prices stored in SAP Business One?

In ITM1, one row per item and price list (ItemCode + PriceList), with Price and Currency. OPLN only holds the price list definitions, not the item prices.

How do I join ITM1 to the price list name?

Join ITM1.PriceList to OPLN.ListNum and read OPLN.ListName.

Where is the price history of an item?

The SAP B1 SDK documents AIT1 as Item - Prices - History, with the same price columns as ITM1 and LogInstanc added to the key.

Related tables

OPLN (Price Lists) · OITM (Items (item master data)) · search all SAP Business One tables

Sources: SAP Business One documentation and SDK (DI API database tables reference), SAP Help Portal.

Ready to get started?

Tell us what you need. You get a clear technical answer, a fixed scope and a price, usually within 24 hours.