SAP tableObjectESLLModuleMM_P2P

ESLL table — Service Line Items Table

ESLL stores individual service lines that make up a service package in MM Service Procurement: one row is one service position (a line from the service catalog or a free text service) with quantity, unit, price and value, linked through a package number to a purchase order item, a service specification, or a service entry sheet.

This page covers ESLL, the table holding the actual service lines used in subcontracted services procurement, including how it hangs off a package number shared with EKPO and ESSR, how to read it without getting lost in orphaned packages, and the pitfalls of treating row counts or values in isolation from the hierarchy tables.

Published 15 Sept 2026· 1,110 words

What it stores

One row in ESLL represents a single service line: a specific service (from the service master, or entered as free text) with its quantity, unit of measure, and monetary value, belonging to a service package identified by a package number. Service procurement in MM does not put services directly on the purchase order item; instead the PO item (with item category D) points to a package number, and that package number is exploded into one or more ESLL rows, which can themselves be structured hierarchically through sub-package numbers. The same package structure is reused when a service entry sheet is created to confirm work performed, so ESLL rows also get referenced from the confirmation side, not only from the ordering side. A package with no ESLL rows is an empty service specification.

Key fields

  • MANDT - client
  • PACKNO - package number, the key that ties the service lines to a PO item, a service specification, or an entry sheet
  • INTROW - internal line number, the technical sequence number of the row within the package
  • SUBPACKNO - sub-package number, used when a line is itself a hierarchy node grouping further lines
  • EXTROW - external row number, the sequence number actually shown to the user on screen
  • SRVPOS - service number from the service master, blank for free-text lines
  • KTEXT1 - short text describing the service line
  • MENGE - quantity of the service line
  • MEINS - unit of measure
  • NETWR - net value of the line
  • BRTWR - gross value of the line

How it joins the data model

  • ESLL-PACKNO = EKPO-PACKNO, service lines belonging to a purchase order item of category D
  • ESLL-PACKNO = ESSR-PACKNO, the same package referenced from a service entry sheet header confirming the work
  • ESLL-PACKNO = ESLL-SUBPACKNO, self join used to walk a hierarchical service specification down through its sub-packages
  • ESLL-PACKNO/INTROW/SUBPACKNO = EKKN-PACKNO/INTROW/SUBPACKNO (via the account assignment table for service lines), used to trace cost object assignment per service line rather than per PO item

How to read it safely

Always restrict on MANDT and never scan ESLL by SRVPOS or KTEXT1 alone across a productive client; the table is unindexed for those fields and a wide scan on a mature system with heavy service procurement will run long. The only reliably selective entry point is PACKNO, so the practical sequence is: get the package number off EKPO for the PO item, or off ESSR for the entry sheet, then select ESLL on that PACKNO. If the hierarchy matters, also read SUBPACKNO to decide whether a row is a leaf service line or a grouping node, because summing NETWR across all rows of a package double-counts value if sub-package header rows are included alongside their own children.

How to prove it in the data

Symptom: a service PO item shows a total value that does not match what the buyer expects on the printed service specification. Pull the package number from EKPO-PACKNO for that item, then select ESLL where PACKNO equals that value, sorted by EXTROW. Sum NETWR only for rows where SUBPACKNO is initial (leaf lines), and compare that total to the PO item's net value; a mismatch usually means either a price change was made directly on a service line after entry sheet acceptance, or a sub-package total was counted twice.

ECC vs S/4HANA

ESLL continues to exist as a transparent table in S/4HANA and service procurement still uses the package-and-service-line model built on ESLL, ESLH and the related service tables. There is no indication that this structure was retired or replaced by a compatibility view in the way some classic MM tables were; the service procurement data model has been architecturally stable across ECC and S/4HANA. Any version-specific extension of the service master model should be confirmed against the current release rather than assumed.

Common pitfalls

  • Summing NETWR or BRTWR across every row of a package without filtering out hierarchy header rows produces a value roughly double the real total, because a sub-package grouping row can carry an aggregated value alongside its own children.
  • Assuming SRVPOS is always populated; free-text service lines have no service master reference and SRVPOS is blank, so filtering only on SRVPOS silently drops legitimate lines from any analysis.
  • Treating PACKNO as unique to one purchase order item. The same package number structure can be referenced again from a service entry sheet, and consultants sometimes assume changing a line in ESLL only affects the PO when it can also affect an entry sheet already created against that package.
  • Reading ESLL in isolation to determine account assignment or cost object. The account assignment for a service line lives in a separate table keyed the same way (PACKNO, INTROW, SUBPACKNO), not in ESLL itself, and skipping that join gives an incomplete picture of where the cost is charged.
  • Assuming EXTROW is a stable technical key. EXTROW is the number shown on screen and can be renumbered when lines are inserted or deleted; INTROW is the stable internal sequence and is what should be used for programmatic joins within a package.
  • Expecting a change in service quantity to show up only in ESLL. Once a service entry sheet has been accepted and invoiced, later changes to the underlying ESLL row do not retroactively alter what was already confirmed and posted; the entry sheet and invoice tables hold the accepted values independently.

Whose problem this is

Functional ownership sits with MM procurement, specifically whoever configures service procurement and maintains service master data; buyers and service coordinators own the content of individual service lines. Data questions that cross into cost object assignment or invoice matching pull in the accounting or controlling counterpart, since the account assignment and settlement of service lines is a shared decision, not a pure MM one.

Related SAP objects

Reviewed pages this object connects to in the ERPClimb knowledge graph.

Source: ERPClimb — https://erpclimb.com/sap-tables/esllERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.