Human-readable collection output uses terminal tables. Automation should use --json; structured JSON is written to stdout, while warnings and enabled diagnostics are written to stderr.
Typed collection tables retain their existing columns by default. Discover the available profiles with either command:
devop-dk config columns list
devop-dk config columns show
Inspect one profile to see every available column, its numeric ID, stable property path, and default/current position:
devop-dk config columns show sales.person
Labels come from DisplayAttribute or DisplayNameAttribute in the active UI culture. For example, Icelandic output can show Sölumaður (SalesPerson). The label is friendly and localized; the property path in parentheses is the stable configuration name.
Choose and order columns interactively or directly:
devop-dk config columns select sales.person
devop-dk config columns set sales.person 1,4,6,5,2
devop-dk config columns set sales.person Number,Warehouse,Modified,Created,EmployeeNumber
devop-dk config columns set sales.person all
devop-dk config columns reset sales.person
Numeric IDs are input shortcuts. The CLI persists property paths so saved selections remain understandable and resilient if the catalog order changes. default is an alias for reset, and pressing Enter in the guided selector keeps the current selection. Use --json with columns list or columns show for machine-readable discovery.
Column profiles affect human-readable typed collection tables only. They do not change --json, single-record detail tables, or generic table records --fields. Nested scalar properties are supported; extension data, dictionaries, and secret-bearing properties are excluded.
Profiles are named after the command; project.work-request replaces the former project.request. The customer contact and receiver lists have the profiles customer.contact and customer.receiver. A stored selection that names a column that no longer exists, such as the former Options.VatExempt on the customer profile (now VatExempt), stops with "Column '...' no longer exists in profile '...'. Run 'devop-dk config columns show ' and update or reset the selection." Run devop-dk config columns reset <profile> or set a new selection to recover.
Entities that DK Plus stores with a stored time expose it as ObjectDate, labelled "Stored Date" (Icelandic "Vistað dags."). It is separate from Modified, the dkERP modification time. The default tables of customer, product, purchase.vendor, sales.invoice, sales.order, sales.quote, sales.recurring, and project.journal show an ObjectDate column right after Modified, project.work-request ends with ObjectDate, and the get detail tables of customers, products, vendors, and sales documents add a Stored Date row after Modified. --json output carries objectDate in the same entities.
The --modified-since, --modified-after, and --modified-before windows are applied by DK Plus to ObjectDate when the entity has one, so a record whose Modified is older than the window can still be listed. Existing stored column selections keep working; use config columns show <profile> to add ObjectDate to a customised selection.
product list excludes DK Plus rows whose ItemCode is null, empty, or whitespace instead of aborting the entire result. It writes a bounded warning to stderr, for example:
Products with no ItemCode detected (RecordId: 1, 3); excluded from results.
Only record IDs are reported. Valid products, including products on later pages, are still returned, and JSON on stdout remains valid.
devop-dk sales invoice pdf INV-100 --output ./documents/INV-100.pdf
devop-dk sales invoice html INV-100 --output ./documents/INV-100.html
devop-dk sales order pdf 962 --output ./documents/order-962.pdf
devop-dk sales quote pdf 456 --output ./documents/quote-456.pdf
devop-dk purchase invoice attachment 123 --output ./documents/vendor-123.pdf
When an explicit output path contains missing parent directories, the CLI creates the complete directory tree automatically. --force is required only when replacing an existing file; it is not needed to create directories. HTML is written to stdout when --output is omitted.
Order and quote document commands use numeric document numbers. Their get commands use v2 UUIDs. Orders support --custom; DK Plus quote document endpoints do not.
Generic tables keep their explicit field-selection model:
devop-dk table fields ARCUST
devop-dk table records ARCUST --fields Number --fields Name --take 25
devop-dk table record ARCUST --fields Number,Name --query Number=C-100 --json
--fields can be repeated or receive comma-separated property names; -f is its short form. See Generic tables for incremental reads, filters, changes, and deleted records.
Next: Automation and safety.