abas i XML 2. dio: Narudžbe i nabava – cXML, UBL i pravila XML uvoza u abas
Obrada dolaznih cXML i UBL narudžbi u sustavu abas ERP: XSLT transformacija u EDP-XML, automatsko kreiranje prodajnih naloga, upravljanje cjenovnim odstupanjima i FOP validacija.
U prvom dijelu naše serije analizirali smo interni XML podatkovni model sustava abas ERP, funkcioniranje EDP-XML sučelja i temeljna sintaktička pravila. U drugom dijelu obrađujemo jedan od najčešćih B2B integracijskih zadataka: kako zaprimati i automatski obrađivati narudžbe kupaca u modernim XML standardima (cXML i UBL / Peppol Order) te osigurati besprijekoran unos prodajnih naloga u abas.
Uz klasične EDIFACT ORDERS poruke, suvremene nabavne platforme (SAP Ariba, Coupa, Jaggaer) gotovo isključivo koriste cXML format, dok je u europskoj javnoj nabavi i međunarodnoj trgovini standard Peppol BIS Order 3.0 (temeljen na OASIS UBL 2.1) postao norma. Zahvaljujući fleksibilnoj arhitekturi, abas ERP podržava oba svijeta.
Usporedba B2B XML standarda: cXML vs. UBL
Prije tehničke implementacije u abasu važno je razumjeti arhitektonske razlike dva vodeća standarda narudžbi:
| Značajka | cXML (commerce eXtensible Markup Language) | UBL (Universal Business Language) Order 2.1 |
|---|---|---|
| Primarno područje | SAP Ariba, Coupa, izravni B2B PunchOut katalozi | Peppol mreža, europska B2G i B2B trgovina |
| Zaglavlje i autentifikacija | Ugrađeni Shared Secret i identifikacijska zaglavlja (<Header><From>...</Header>) | Standardizirani EndpointID i PartyIdentification elementi |
| Imenski prostori (Namespaces) | Većinom temeljeni na DTD-u ili bez prefiksa | Stroga hijerarhija imenskih prostora (urn:oasis:names:specification:ubl:schema:xsd:Order-2) |
| Način potvrđivanja | Sinkroni HTTP odgovor (200 OK + Status cXML) i asinkroni cXML Confirmation | UBL OrderResponse (Peppol BIS Order Response 3.0) |
Arhitektura integracijskog tijeka: Od dolaznog XML-a do abas narudžbe
Obrada dolaznih XML narudžbi u sustavu abas ERP odvija se kroz siguran višestupanjski proces:
- Prijem i predvalidacija: Dolazni cXML ili UBL dokument zaprima se putem AS2, HTTPS REST API-ja ili SFTP-a te se odmah provjerava naspram službene XSD sheme radi eliminacije sintaktičkih grešaka.
- XSLT transformacija: Prilagođeni XSLT stilski list prevodi vanjsku XML strukturu u izvorni abas EDP-XML format (Head i Table razine).
- Usklađivanje matičnih podataka: Na temelju unakrsnih tablica u abas Vartabu vanjski identifikatori (GLN, OIB/PDV ID) i šifre artikala kupca prevode se u interne šifre abasa.
- Headless EDP uvoz u pozadini: EDP poslužitelj otvara transakciju, poziva masku narudžbenice u pozadini, izvršava poslovnu logiku (provjera kreditnog limita, određivanje cijena i poreza) i generira dokument.
- Povratna informacija i obavijesti: U slučaju uspjeha bilježi se interni broj narudžbe; kod cjenovnih odstupanja postavlja se status upozorenja i obavještava se prodajni referent.
XSLT transformacija: Pretvaranje UBL / cXML narudžbe u abas EDP-XML
Ključ pouzdane integracije leži u učinkovitom mapiranju putem XSLT-a. Sljedeći sažeti primjer prikazuje pretvaranje UBL 2.1 narudžbe u abas <abasDocument> strukturu:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Order-2"
exclude-result-prefixes="cac cbc ubl">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/ubl:Order">
<abasDocument type="SalesOrder" version="2026.1">
<head>
<!-- Vanjski broj narudžbe i datum -->
<bestellnr><xsl:value-of select="cbc:ID"/></bestellnr>
<vom><xsl:value-of select="cbc:IssueDate"/></vom>
<wtermin><xsl:value-of select="cac:Delivery/cac:RequestedDeliveryPeriod/cbc:EndDate"/></wtermin>
<!-- Identifikacija kupca putem GLN / EndpointID -->
<ygln><xsl:value-of select="cac:BuyerCustomerParty/cac:Party/cbc:EndpointID"/></ygln>
<waehrung><xsl:value-of select="cbc:DocumentCurrencyCode"/></waehrung>
<!-- Oznaka statusa integracije -->
<yedistat>XML_IMPORT_NEW</yedistat>
</head>
<table>
<xsl:for-each select="cac:OrderLine">
<row n="{position()}">
<!-- Šifra artikla kupca i GTIN / EAN -->
<ycustomerno><xsl:value-of select="cac:LineItem/cac:Item/cac:BuyersItemIdentification/cbc:ID"/></ycustomerno>
<yean><xsl:value-of select="cac:LineItem/cac:Item/cac:StandardItemIdentification/cbc:ID"/></yean>
<mge><xsl:value-of select="cac:LineItem/cbc:Quantity"/></mge>
<he><xsl:value-of select="cac:LineItem/cbc:Quantity/@unitCode"/></he>
<preis><xsl:value-of select="cac:LineItem/cac:Price/cbc:PriceAmount"/></preis>
</row>
</xsl:for-each>
</table>
</abasDocument>
</xsl:template>
</xsl:stylesheet>
Mehanizam automatskog uvoza (Headless EDP) u abasu
Kada XSLT generira čist abas XML dokument, EDP poslužitelj provodi uvoz uz poštivanje svih poslovnih pravila:
- Pronalaženje partnera prema
yglnili poreznom broju: Ako interni abas broj kupca nije naveden, sustav pretražuje bazu kupaca po GLN-u ili PDV broju. U nedostatku jasnog podudaranja narudžba se privremeno dodjeljuje prijelaznom računu (Clearing Account) uz blokadu isporuke. - Unakrsne reference artikala: Prilikom obrade stavki abas provjerava polja
yean(GTIN) iycustomerno. Putem Vartab tablice unakrsnih referenci automatski se dohvaća interni broj artikla (artikel). - Standardizacija mjernih jedinica: Međunarodni UN/ECE Rec 20 kodovi (npr.
H87= kom,KGM= kg,MTR= m) automatski se prevode u interne mjerne jedinice abasa.
Upravljanje cjenovnim odstupanjima i pravila tolerancije
Jedan od najčešćih praktičnih izazova u automatskoj obradi narudžbi je cjenovno odstupanje: jedinična cijena u XML narudžbi kupca razlikuje se od cijene iz važećeg cjenika ili ugovora u abas ERP-u.
U abasu se to rješava putem FOP (Format Optimization Program) pravila:
Ako je
| XML_Cijena - abas_Ugovorena_Cijena | > Prag_Tolerancije (npr. > 0.5% ili > 0.01 EUR):
- Stavka se bilježi s cijenom iz XML narudžbe kako bi se sačuvala izvorna namjera kupca.
- Stavka i zaglavlje narudžbe dobivaju status "Čeka odobrenje cijene" (
yedistat = 'PRICE_DISCREPANCY'). - Narudžba se automatski blokira za izradu otpremnice (Lieferschein), a referentu prodaje šalje se obavijest.
Česte zamke pri uvozu XML narudžbi
- Greške s imenskim prostorima u XSLT-u: UBL dokumenti koriste stroge imenske prostore (
xmlns:cac="..."). Ako nisu točno specificirani, XPath izrazi neće pronaći elemente i stavke narudžbe neće se kreirati u abasu. - Neželjeno spajanje istih artikala: Ako kupac naručuje isti artikl u dvije odvojene stavke s različitim rokovima isporuke, automatsko spajanje redaka poremetit će raspored kupca. Spajanje stavki mora biti onemogućeno.
- Preciznost zaokruživanja: Ako vanjski XML sadrži cijenu s 4 decimale (npr.
0.1235 EUR), a polje u abasu je konfigurirano na 2 decimale, zaokruživanje može stvoriti manja odstupanja u ukupnom iznosu. - Neprepoznavanje izmjena narudžbe: Ako kupac pošalje ažurirani XML postojeće narudžbe, sustav mora prepoznati izvornu narudžbu umjesto otvaranja dupliciranog naloga.
Zaključak
Automatizirana obrada dolaznih cXML i UBL narudžbi putem XSLT-a i EDP-a uklanja ručni unos, ubrzava potvrdu narudžbi i jamči visoku razinu integriteta baze podataka u sustavu abas ERP.
U 3. dijelu prelazimo na logistiku i otpremu: prikazat ćemo kako izvesti abas otpremnicu s hijerarhijom pakiranja (Handling Units, SSCC) u XML formatu te kako se integrirati s WMS sustavima i kurirskim službama (GLS, DPD, DHL).
Želite li automatizirati obradu cXML i UBL narudžbi u svom abas ERP sustavu? Zatražite stručne konzultacije s našim timom!