Skip to content

FAQs

A practical question-and-answer guide for clients using the Webwirkung Abacus plugin for Shopware 6. The questions below are the ones that come up most often during onboarding and testing — almost all of them trace back to either a configuration setting or a missing/incorrect Abacus identifier on a product, customer, or order. Each entry states the symptom, the likely cause, and how to fix it.

How to use this guide: Find the symptom that matches what you're seeing, check the Cause to confirm it's the same situation, then follow the Solution. Where a fix depends on a value that only exists in your Abacus environment (mandant number, user field names, API limits), the steps say so explicitly.


1. Abacus IDs & Product Mapping

Most "the price is wrong" or "stock is ignored" problems are actually mapping problems: Shopware and Abacus can't line up the record because an identifier is missing or doesn't match. Start here before assuming the sync itself is broken.

Q: A product's price from Abacus is being ignored — the shop shows a different price.

Cause: The Pricing API looks up the price by the product's Abacus Product ID (the abacus_product_id custom field), not by the Shopware product number. If that ID is empty (the product sync never matched the article), or the Pricing API isn't switched on, or a cached value is being served, the Abacus price never reaches the cart.

How to verify it yourself:

  1. Check the Abacus Product ID on the product. In Shopware admin open the product and find the Abacus custom-field set: the field abacus_product_id (plus abacus_product_variant_id for variants). This is filled automatically by the product sync.
    • If it's empty, that's the cause — the product was never linked to Abacus, so no price can be returned. Confirm the article exists in Abacus and let the product sync run (or re-run it). Note: a normal-looking Shopware product number is not enough — the price lookup uses the Abacus Product ID, not the product number.
  2. Check the Pricing API is enabled. Go to Settings → Extensions → My extensions → Abacus Integration → ⋯ → Configure → Pricing API and confirm "Show correct Abacus price for logged-in customers" (isPricingApiEnabled) is on — and "…for not-logged-in customers" (isPricingApiForNotLoggedInEnabled) if guests should also see Abacus prices. If both are off, the Abacus price is never applied to the cart.
  3. For customer-specific prices, the logged-in customer needs an abacus_debtor_number (custom field on customer in Shopware) (filled by the shopper sync). Without it they fall back to guest pricing.

If the IDs and config are correct but an old price persists (caching):

  • The price is cached in the backend PriceCache (keyed by customer + product + variant + quantity + currency + sales channel). For headless projects there can be an additional frontend cache on top that the Shopware backend can't see or clear.
  • There is currently no admin button to inspect or clear a single product's price, and no configurable cache-lifetime setting. A general Shopware cache clear flushes the backend PriceCache; the storefront/frontend cache must expire or be cleared on the frontend separately.
  • To confirm the authoritative "what does Abacus return right now" price, ask the dev team to run a live Pricing-API lookup. A self-service Price Debugger in the admin (showing the resolved Abacus IDs, the live price, and which cache served the displayed value) is on the roadmap but not yet available.

Q: A product isn't appearing or updating in Shopware at all after a sync.

Cause: Either the product-sync mode doesn't allow creating it, the article isn't flagged for the shop in Abacus, or it has no abacus_product_id so later price/stock lookups skip it.

Solution:

  1. Check the sync mode. Under Configuration → My Extensions → Abacus Integration → Configuration → Products, "Sync product data" (productDataSyncMode) has three values: no_product_sync (nothing syncs — the default), pim_mode (updates existing products only — never creates new ones), and full_product_sync (creates, updates, and deactivates). A brand-new product that never appears is usually pim_mode doing exactly what it's set to.
  2. Verify the article is flagged as a ShopProduct in Abacus — that flag is what decides whether it syncs. Once synced, confirm abacus_product_id is populated on the Shopware product.
  3. Check the sync actually ran: the relevant scheduled tasks are webwirkung.abacus.product.synchronization (full sync) and webwirkung.abacus.subscription.product (changed products only). Review the task's last-run time and the plugin log for that product.

Q: How do I know which Shopware field maps to which Abacus field?

Cause: Field mapping between Shopware, the Abacus order document (Abadoc XML), and Abacus master data isn't always obvious — e.g. where a payment reference or transaction ID ends up.

Solution:

  1. Use the order's Abadoc XML as the source of truth: open the transmitted XML for a real order and locate the field you're looking for. If a value (e.g. a separate payment transaction date/ID) doesn't appear in the XML, it isn't being transmitted and needs a mapping change rather than a config toggle.
  2. For references that genuinely aren't in the standard payload, raise it with us. The order export already sends the Shopware references — ExternalOrderReference (the order UUID) and ExternalOrderNumber (the order number) at order level, and per payment a PaymentInfoList entry with Payment (the Shopware transaction ID), TransactionDateTime, Brand, RequestedPaymentMethod and AmountPaid. What it does not send by default is an external payment provider's own transaction reference/ID — there is no dedicated field for that in the base payload, so capturing it needs a custom mapping in the client extension (via the AbacusOrderAdditionalInfoEventAdditionalInfoList).

2. Stock & Availability

Q: Customers can over-order — Shopware lets them buy more than Abacus has in stock.

Cause: Between sync runs Shopware uses its own stored stock value. If that value is higher than the real Abacus availability, Shopware allows the oversell. The plugin only blocks an oversell at order placement when the product is marked closeout.

Solution:

  1. Turn on stock syncing from Abacus. Under Configuration → Products, set "Sync product data" (productDataSyncMode) to "PIM mode: Only stock sync" or "Full product sync". The stock task (webwirkung.abacus.subscription.stock) then overwrites the Shopware stock with the Abacus value (FallbackWarehouseStockTotal − FallbackQuantityReservedTotal) on each run.
  2. Mark articles that must never oversell as closeout — this is the native Shopware "Clearance" / Abverkauf setting on the product (set in Shopware, not Abacus). For closeout line items the plugin runs a live Abacus stock check at order placement and blocks the order if Abacus stock is insufficient (InsufficientAbacusStockException).
  3. Remember the sync writes stock periodically, so a non-closeout product can still be briefly out of date between runs — closeout is what guarantees no oversell.

Note: the base plugin uses the single stock figure Abacus returns (FallbackWarehouseStockTotal). It has no per-storage-location (Lagerort) selection and does not use an AbaReport out of the box. If you need stock sourced differently — e.g. from an AbaReport or based on specific Lagerorte — contact us for a customized implementation.

Q: A product shows as available even though Abacus stock is 0 (or vice versa).

Cause: Either stock syncing isn't enabled, the stock task hasn't run since the Abacus value changed, or the product has no abacus_product_id so it's never matched.

Solution:

  1. Go to Settings → Extensions → My extensions → Abacus Integration → ⋯ → Configure → Products and confirm "Sync product data" is set to "PIM mode: Only stock sync" or "Full product sync". If it's on "No product sync", no stock is written at all.
  2. Check the last run of webwirkung.abacus.subscription.stock and the plugin log.
  3. Confirm the product carries an abacus_product_id — stock is matched by product number/ID, so an unmatched product never gets updated.

3. Pricing & Discounts

Discounts are the most config-sensitive area because Abacus (J15 order processing) treats discount types and levels differently from Shopware.

Q: My discount doesn't appear (or appears as the wrong type) in the Abacus order.

Cause: Two common reasons: the promotion is a fixed-value discount (only percentage promotions are exported — fixed-value ones are ignored), or the discount-type mapping points to a different Abacus type than expected. (Note: multiple percentage promotions of the same type are automatically merged into one entry, so that part needs no setup.)

Solution: Confirm the promotion is percentage-based — fixed-amount promotions won't reach Abacus. Then check the mapping under Settings → Extensions → My extensions → Abacus Integration → ⋯ → Configure → Exporting orders: "Choose line item discount type" (lineItemDiscountType) and "Choose shipping discount type" (shippingDiscountType). This mapping is set per client to match that client's Abacus configuration.

Q: A "maximum total value" (capped) discount is transmitted as the wrong amount.

Cause: Only the percentage is sent to Abacus, so a capped discount (e.g. "10 CHF max") is applied as the raw percentage instead of the capped value. Recalculating the effective percentage runs into Abacus's limit on decimal places in the order request.

Solution: This is a known technical limitation. Either avoid capped/max-value discounts for Abacus-synced orders, or contact us to confirm with the Abacus partner whether higher decimal precision can be enabled for your mandant. The plugin config notes where this isn't supported.

Q: A product-specific discount is applied to every line item in Abacus.

Cause: This is expected behaviour in the base plugin: cart-level percentage promotions are attached to every line item, so a discount meant for one product lands on all of them. There is no setting to restrict a promotion to specific products.

Solution: There's nothing to enable — the base plugin doesn't support per-product or product-group discount targeting. If you need a discount to apply only to certain products/product-groups in the Abacus order, contact us for a customized implementation.

Q: How do I show graduated / tiered prices (Staffelpreise) from Abacus?

Answer: Turn on "Display graduated pricing" (isGraduatedPricingApiEnabled) under Settings → Extensions → My extensions → Abacus Integration → ⋯ → Configure → Pricing API. With it enabled, the plugin reads the Abacus graduation details for each product and shows the tiered prices in the storefront and cart. The Pricing API itself must also be enabled (logged-in and/or guest), and the tiers come from Abacus — they're maintained there, not in Shopware.


4. Orders, Checkout & Sync

Q: Checkout / order transmission is extremely slow (a minute or more), especially for new customers.

Cause: The plugin queries Abacus for shopper/customer accounts during checkout and hits the Abacus API rate limit (HTTP 429 "Too Many Requests"). New-customer and guest orders are worst because they trigger extra account lookups.

Solution:

  1. Confirm it's the rate limit: the plugin log shows Abacus API error (429) ... Too Many Requests on endpoints like .../ShopperAccounts.
  2. If checkout is consistently slow and the log confirms 429s, the lever is your mandant's Abacus API quota (per-minute / per-hour / per-day request limits), which is set on the Abacus side — not in the plugin. Contact us: we'll review your request volume and, if needed, help you raise the limit with your Abacus partner.

Q: Order status from Abacus isn't updating the Shopware order.

Cause: Order-status sync applies Abacus order-processing status changes to the Shopware order. If statuses aren't updating, the subscription or the status mapping isn't set up.

Solution:

  1. Turn on the subscription: Settings → Extensions → My extensions → Abacus Integration → ⋯ → Configure → Subscriptions → enable "OrderProcessingStatusDocument subscription" (orderStatusSubscription).
  2. Enable and define the mapping: in the "Shopware order status mapping" card, switch on "Is order status sync enabled" (isOrderStatusSyncEnabled) and fill in the mapping table, which maps Abacus process steps to Shopware order / delivery / payment states. An empty mapping means nothing syncs.
  3. Check the webwirkung.abacus.subscription.order.status scheduled task is active (runs roughly every 5 minutes) — this is what consumes the status changes from Abacus.

Note: the base plugin does not sync shipping tracking numbers. If you need tracking numbers carried from Abacus into Shopware, contact us for a customized implementation.

Q: Sporadic error messages appear when adding/removing products from the cart.

Cause: Usually a transient API/availability error surfacing in the cart during a live lookup.

Solution: Capture a screenshot and the exact time, then check the plugin log for the matching entry. If the log shows 429 Too Many Requests, it's the Abacus rate limit — see the slow-checkout answer above.


5. Addresses & Customers

Q: How are billing and delivery addresses transmitted to Abacus?

Answer: Every order sends both the delivery address (DeliverySubject) and the billing address (PaymentSubject), always — there is no setting to send the billing address only when it differs from the delivery address. If an existing Abacus address is already linked (abacus_address_id on the Shopware address), that reference is used; otherwise the address is built from the order. If your accounting workflow needs conditional address handling (e.g. only send a deviating billing address), contact us for a customized implementation.

Q: The same customer creates duplicate or mismatched debtors/addresses across sales channels.

Cause: Without consistent debtor/address mapping, the same person buying through different channels or branches isn't matched to one Abacus debtor.

Solution:

  1. Configure debtor assignment (Debitor-Zuordnung) for branches and addresses so customers resolve to the right Abacus debtor.
  2. Review the address mapping for shared customers across sales channels so one customer maps to one debtor rather than creating duplicates.

6. Emails & Notifications

Q: Order confirmations, order acknowledgements, or invoices aren't being emailed to the customer (or to us).

Cause: This is a Shopware Flow / mail configuration issue rather than an Abacus sync issue — the relevant flows or mail templates aren't active or aren't triggered for the order type.

Solution:

  1. Check Settings → Flow Builder that the order-confirmation, acknowledgement, and invoice flows are enabled and target the correct sales channel.
  2. Confirm the mail templates are assigned and the sender/recipient addresses are correct.
  3. Send a test order and check the mail/queue logs to confirm the flow fired.

7. Monitoring & Troubleshooting

Q: How do I monitor whether the syncs are healthy?

Solution: The plugin exposes a health-check endpoint for PIM sync, Abacus sync, and Shopware status that returns a simple status payload (e.g. {"healthy":true,"message":"success","issues":[],"actions":[]}). Point your uptime monitor (e.g. Uptime Kuma) at it to get alerted when a sync becomes unhealthy.

Q: How often do the sync jobs run?

Solution: Each sync runs as a scheduled task with its own interval, so a change in Abacus won't be visible in the shop instantly — e.g. stock only updates on the next stock-sync run. You can find the default schedule here: Scheduled tasks frequency. If your environment overrides the defaults, ask us for the current values.

Q: What's the fastest way to get help when something looks wrong?

Solution: When reporting an issue, include: the order/product/customer number, the exact timestamp, a screenshot, and any matching plugin log line (especially Abacus API errors and HTTP status codes like 429). That combination lets us pinpoint the cause far faster than a description alone.


Quick triage cheat-sheet

SymptomMost likely causeFirst thing to check
Wrong/old priceMissing Abacus article number or stale price cacheProduct's Abacus number + clear price cache
Oversell / wrong stockShopware stock overrides Abacus between syncsproductDataSyncMode = PIM/Full + mark product closeout in Shopware
Slow checkoutAbacus API 429 rate limitConfirm 429 in log; if persistent, contact us to review the mandant's Abacus quota
Discount wrong in AbacusDiscount-type mapping / line-item spreadSet lineItemDiscountType / shippingDiscountType (same-type summing is automatic)
No confirmation emailsFlow/mail config, not AbacusFlow Builder + mail templates
Product/category not updatingNot flagged as ShopProduct, wrong sync mode, or missing abacus_product_idShopProduct flag in Abacus + sync mode + abacus_product_id populated

This FAQ is compiled from recurring issues across active Abacus plugin client projects. Settings labelled as "enable/configure" map to plugin configuration or Abacus/Shopware setup; where an exact field name or limit depends on a specific client's Abacus mandant, confirm the value for that environment before changing it.