Naar de inhoud
SyncMyShop

Magento en AFAS

Magento AFAS koppeling

Artikelen met dimensies uit AFAS Profit worden configurable products in Magento, voorraad per magazijn landt op de juiste bron en prijsafspraken per debiteur worden staffelprijzen. Orders en klanten gaan terug naar AFAS. Gebouwd op jouw Magento 2 en jouw AFAS-inrichting, en daarna door ons gedraaid en bewaakt.

Wat je tussen Magento en AFAS koppelt

AFAS Profit is de bron voor artikelen, voorraad, prijzen en de administratie. Magento toont de catalogus en vangt de order. Aan de AFAS-kant loopt alles via connectoren die jouw AFAS-beheerder in een app connector zet: GetConnectoren om te lezen, UpdateConnectoren om te schrijven.

Stroom Richting Magento 2 AFAS Profit
Artikelen en dimensies naar Magento POST /V1/products, configurable products GetConnector Profit_Article
Voorraad per magazijn naar Magento POST /V1/inventory/source-items GetConnector Profit_Stock
Prijzen per debiteur, staffels naar Magento POST /V1/products/tier-prices GetConnector Profit_SalesPrice
Orders naar AFAS GET /V1/orders UpdateConnector FbSales
Klanten naar AFAS factuuradres van de order KnSalesRelationOrg of KnSalesRelationPer
Zendingen naar Magento POST /V1/order/{id}/ship GetConnector op pakbonnen

Het Magento-ordernummer, increment_id, gaat naar RfCs op de verkooporder: opdrachtnummer of referentie, 100 tekens. Dat is ook de sleutel waarmee de koppeling controleert of een order al in AFAS staat. De systeemkant staat op AFAS webshop koppeling, de platformkant op Magento koppeling.

Welk systeem is leidend, per gegeven

Gegeven Leidend Richting Gedrag
Itemcode, omschrijving, eenheid AFAS naar Magento gewijzigde artikelen, op ModifiedDate
Artikeldimensies (maat, kleur) AFAS naar Magento dimensiecode wordt optie in Magento
Attribuutset, categorieën, teksten, afbeeldingen Magento of het PIM blijft in Magento de koppeling schrijft er niet overheen
Op voorraad per magazijn AFAS naar Magento per magazijn een bron
Verkoopbare voorraad Magento berekend in Magento bronnen min reserveringen
Prijsafspraken en staffels per debiteur AFAS naar Magento nachtelijk, als tier prices
Order Magento tot de import, daarna AFAS naar AFAS één keer, met RfCs als sleutel
Verkooprelatie AFAS match, anders aanmaken organisatie of persoon

Wat Magento en AFAS anders bewaren

Artikeldimensies tegenover configurable products

Een Magento-order met een variant en verzendkosten als verkooporder in AFAS Profit Magento levert per variant een eigen SKU, SHIRT-BL-M. AFAS wil de itemcode SHIRT met de artikeldimensiecodes M en BL op de orderregel. De verzendkosten van 6,95 worden een kostenregel met type item 6. Het land AT wordt op het adres van de verkooprelatie de AFAS-landcode A. Magento 2, order AFAS Profit, FbSales increment_id 000010482 items[0].sku SHIRT-BL-M items[0].qty_ordered 3 items[0].price 24.95 shipping_amount 6.95 billing_address.country_id AT RfCs 000010482 ItCd SHIRT StL1 M artikeldimensie MATEN StL2 BL artikeldimensie KLEUR QuUn 3 Upri 24.95 regel 2: VaIt 6 Upri 6.95, BiUn ***** CoId A op het relatieadres, geen ISO vertaaltabel kostenregel landentabel
Eén Magento-orderregel met een variant en de verzendkosten als verkooporder in AFAS. De variant gaat terug naar het artikel plus twee dimensiecodes.

In AFAS is een shirt in drie kleuren en vijf maten één artikel, SHIRT, met twee artikeldimensies: MATEN en KLEUR. Een artikel heeft er maximaal twee, elk met codes van maximaal 10 tekens. Op een orderregel staan ze als StL1 en StL2 naast de itemcode. AFAS geeft dat zelf als voorbeeld: drie regels met itemcode 9900 en dimensiecode S, M en L.

In Magento is elke combinatie een eigen simple product met een eigen SKU, onder een configurable product. De koppeling maakt van SHIRT met M en BL het simple product SHIRT-BL-M en houdt een vertaaltabel bij. Komt er een order binnen, dan zet de koppeling SHIRT-BL-M terug naar ItCd SHIRT, StL1 M en StL2 BL. Een order met een SKU die niet in de tabel staat, wordt vastgehouden en niet als los artikel aangeboden.

Het aantal verzoeken bij de eerste import: 3 x 5 = 15 simple products, 1 configurable product, 2 verzoeken voor de opties en 15 keer het koppelen van een variant aan het model, want Magento neemt één childSku per aanroep. Dat is 33 verzoeken per artikel. Een collectie van 250 dimensie-artikelen is 8.250 verzoeken. Zie varianten.

Voorraad per magazijn en per dimensie

Profit_Stock geeft per artikel, per magazijn en per dimensiecombinatie twee getallen: StockActual, op voorraad, en StockEconomic, de economische voorraad. Magento's Multi-Source Inventory heeft per SKU een aantal per bron. Een AFAS-magazijn wordt dus een Magento-bron, en dat past beter dan bij platforms met één voorraadgetal.

Magento rekent daarna zelf. Verkoopbaar is de som van de bronnen min de reserveringen van open orders, en een reservering vervalt pas als de zending in Magento staat. Schrijft de koppeling een getal waar AFAS de open webshoporders al vanaf heeft gehaald, dan trekt Magento ze nog een keer af. Daarom gaat StockActual naar de bron, en wordt de zending in Magento geboekt voordat de volgende voorraadronde loopt. Zie welke voorraad toon je in je webshop.

Prijzen per debiteur tegenover klantgroepen

Profit_SalesPrice levert per debiteur, datum en aantal een bruto prijs, een korting en een nettoprijs. Magento kent geen prijs per klant. Een tier price hangt aan een klantgroep, met sku, customer_group, quantity en price. Op Open Source krijgt een debiteur met eigen afspraken dus een eigen klantgroep. Op Adobe Commerce met B2B kan dat een shared catalog per bedrijf zijn, die zijn eigen klantgroep aanmaakt. Hangt een klant eenmaal aan een bedrijf, dan is zijn klantgroep alleen-lezen.

De rekensom: 120 debiteuren met eigen prijzen over 2.500 artikelen zijn tot 300.000 tier prices. Met de synchrone invoerlimiet van 20 regels, als die aanstaat, zijn dat 15.000 verzoeken. Via het bulk-endpoint met 5.000 regels per verzoek zijn het er 60. Daarna gaan alleen gewijzigde afspraken mee. Zie klantspecifieke prijzen.

Klant, land en verzendkosten

Een Magento-klant is een e-mailadres met een factuuradres. AFAS wil een verkooprelatie: een organisatie (KnSalesRelationOrg) of een persoon (KnSalesRelationPer). De koppeling zoekt eerst op het debiteurnummer dat bij de Magento-klant is opgeslagen, daarna op btw-nummer en e-mail, en maakt pas dan een nieuwe relatie aan. Zie dubbele klanten en debiteuren.

Magento levert het land als ISO-code in country_id. AFAS gebruikt eigen landcodes in het adres; in AFAS's eigen voorbeeld is Oostenrijk A, niet AT. Een vertaaltabel zet ze om. De verzendkosten staan in Magento als shipping_amount op de order. In AFAS worden ze een tweede regel met type item 6, kosten, en eenheid *****, net als in AFAS's voorbeeld met artikel en vervoerskosten.

De technische werkelijkheid van deze combinatie

Onderwerp Magento 2 AFAS Profit
Limiet op verzoeken geen algemene, de server bepaalt het fair use, geen getal
Tegelijk de server bepaalt het 5 aanroepen
Per aanroep invoerlimieten standaard uit 100 regels zonder take, 75 MB, 900 seconden
Wijziging melden Adobe Commerce: events; Open Source: niets geen webhook, pollen
Toegang OAuth 1.0a met een Integration OAuth, of een classic token tot 31 augustus 2027

Op Magento Open Source meldt geen van beide kanten een wijziging. De koppeling vraagt alles op: orders uit Magento op updated_at, artikelen uit AFAS op ModifiedDate. Over het aantal parallelle aanroepen is AFAS niet eenduidig: docs.afas.help noemt 5, help.afas.nl 6. De koppeling houdt 5 aan.

Voorraad, doorgerekend. De standaard-GetConnector Profit_Stock heeft geen veld voor de wijzigingsdatum, dus een ronde leest alles. 1.200 dimensie-artikelen met gemiddeld 12 combinaties in 2 magazijnen zijn 28.800 regels. AFAS adviseert kolommen maal regels onder de 150.000 per aanroep te houden: bij 6 kolommen is dat 172.800, dus de koppeling leest in twee delen van 14.400 regels (86.400 per deel), met skip, take en een vaste sortering. Naar Magento zijn het 28.800 bronregels: via het bulk-endpoint met 5.000 per verzoek 6 verzoeken. Je eigen aantallen reken je door met doorvoer berekenen.

Het bulk-endpoint hangt aan een consumer. Magento's bulkverzoek geeft direct een bulk_uuid terug; de consumer async.operations.all doet het werk. Draait die niet, dan blijven de bewerkingen zonder foutmelding op status 4, Open. De koppeling vraagt na elke batch de status op.

Wat een standaardkoppeling hier niet doet

Standaardkoppelingen en koppelplatformen voor AFAS beschrijven hun eigen grenzen:

  • Eigen GetConnectoren. De leverancier levert een set connectoren die in AFAS geïmporteerd moet worden. De mapping volgt die set, niet de connectoren die jouw AFAS al heeft.
  • Alleen orders. Als documenttype naar AFAS wordt alleen de order genoemd, niet de factuur.
  • Een beperkte veldset. Van de webshop naar AFAS worden klantnaam, SKU en verzendadres genoemd; van AFAS naar de webshop klantgegevens en voorraad.

Artikeldimensies, prijzen per debiteur als staffels per klantgroep, de verzendkosten als kostenregel en de vertaling van landcodes staan in geen van die beschrijvingen. Een gebouwde koppeling legt ze vast op hoe jouw AFAS en jouw Magento zijn ingericht. Andere combinaties met AFAS: WooCommerce AFAS koppeling en Shopify AFAS koppeling.

Als het misgaat

Wat er misgaat Wat de koppeling doet Wat je ziet
AFAS antwoordt 500 met externalMessage de order blijft staan, andere orders gaan door het bericht van AFAS en de order
AFAS antwoordt 503 met retry_after wacht het aangegeven aantal seconden niets, tenzij het aanhoudt
401 of 403 alle stromen naar AFAS pauzeren token ongeldig of IP-adres geweigerd
SKU niet in de vertaaltabel de order wordt vastgehouden de order en de SKU
Dimensiecode bestaat niet als optie in Magento het simple product wordt niet aangemaakt het artikel en de code
Magento-bulkbewerking blijft op status 4 de batch wordt gemeld, niet opnieuw verstuurd de bulk_uuid en het aantal open regels
Magento ligt plat voor een upgrade wijzigingen uit AFAS wachten in de wachtrij de lengte van de wachtrij

Een order die blijft falen, bewaart de koppeling met de oorspronkelijke inhoud en biedt hij opnieuw aan zodra de oorzaak is opgelost. Omdat RfCs de sleutel is, maakt een herhaling geen tweede verkooporder. Een controleronde vergelijkt de Magento-orders van de laatste dagen met de referenties in AFAS.

Voor livegang draait de koppeling als dry run: hij leest beide kanten en laat zien welke producten, bronaantallen en prijzen hij in Magento zou schrijven, zonder te schrijven. Zie dry run en goedkeuring. Andere systemen achter Magento: Magento Business Central koppeling en Magento Exact Online koppeling. Alle stromen staan op koppelingen. Vertel welke Magento-versie je draait en hoe jouw AFAS is ingericht.

Veelgestelde vragen

Ondersteunt AFAS varianten zoals Magento die kent?

Gedeeltelijk. Een artikel in AFAS heeft maximaal twee artikeldimensies, bijvoorbeeld MATEN en KLEUR, met codes van maximaal 10 tekens. Magento kan een configurable product op meer attributen bouwen. Een derde eigenschap, zoals de lengte van een broek, wordt in AFAS een eigen artikel of een deel van een dimensiecode.

Wie maakt de connectoren in AFAS aan?

De AFAS-beheerder van jouw organisatie. Hij maakt de app connector aan, zet de GetConnectoren en UpdateConnectoren erin, en geeft de koppeling een token of OAuth-gegevens. Wij leveren de lijst met GetConnectoren, UpdateConnectoren en velden die de koppeling nodig heeft. Een eigen GetConnector voor voorraad, met precies de velden die Magento nodig heeft, maakt de ronde kleiner.

Werkt het met Magento Open Source of alleen met Adobe Commerce?

Met allebei. Het verschil zit in prijzen en meldingen. Op Adobe Commerce met B2B kan een prijsafspraak per debiteur in een shared catalog per bedrijf; op Open Source wordt het een klantgroep. En op Open Source meldt Magento geen nieuwe orders, dus de koppeling vraagt ze op.

Wat gebeurt er met de verzendkosten?

Die worden een eigen regel op de verkooporder in AFAS, met type item 6 (kosten) en een kostenitem dat in jouw AFAS bestaat, zoals AFAS het in zijn eigen voorbeeld doet. Zo staan ze apart in de omzet en op de factuur.

Verandert er iets aan de toegang tot AFAS?

Ja. AFAS gebruikt OAuth als standaard voor nieuwe koppelingen. Na 31 augustus 2027 werken app connectoren met een classic token niet meer. Een nieuwe Magento AFAS koppeling bouwen we direct op OAuth.

Hoe snel staat een Magento-order in AFAS?

Zo snel als de pollronde. Op Adobe Commerce kan een event de koppeling direct laten starten. Op Open Source vraagt de koppeling bijvoorbeeld elke 5 minuten nieuwe orders op. AFAS zelf heeft geen webhook voor orders of voorraad, dus voorraad en prijzen komen ook per ronde.

Vertel wat je nodig hebt

Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.

  • Je weet de prijs en de doorlooptijd voordat je iets toezegt
  • Wij zoeken uit welke koppeling het werk uit handen neemt
  • Wij verzorgen de bouw, hosting, bewaking en het onderhoud
  • Je team krijgt minder overtypwerk en minder uitzoekwerk

Leveranciers, producten, orders per dag, een ruwe schatting is prima.

Of mail direct: carsten@syncmyshop.com