← Artykuły · abas i XML

abas i XML cz. 2: Zamówienia i zaopatrzenie – cXML, UBL oraz reguły importu XML do abas

Przetwarzanie przychodzących zamówień cXML i UBL w abas ERP: transformacja XSLT do EDP-XML, automatyczne tworzenie zleceń sprzedaży, obsługa rozbieżności cenowych i reguły walidacyjne FOP.

W pierwszej części naszej serii omówiliśmy wewnętrzny model danych XML w abas ERP, zasady działania interfejsu EDP-XML oraz fundamentalne reguły składniowe. W drugiej części skupiamy się na jednym z kluczowych wyzwań integracyjnych B2B: jak odbierać i przetwarzać zamówienia klientów w nowoczesnych standardach XML (cXML, UBL / Peppol Order) oraz jak zapewnić w pełni zautomatyzowane tworzenie zamówień sprzedaży w systemie abas.

Obok klasycznych komunikatów EDIFACT ORDERS, nowoczesne platformy zakupowe (SAP Ariba, Coupa, Jaggaer) komunikują się niemal wyłącznie za pomocą cXML, natomiast w europejskich zamówieniach publicznych i obrocie międzynarodowym dominuje standard Peppol BIS Order 3.0 (oparty na OASIS UBL 2.1). Dzięki swojej elastyczności abas ERP potrafi bez problemu obsłużyć oba te formaty.

Porównanie standardów B2B XML: cXML vs UBL

Zanim przejdziemy do szczegółów technicznych w systemie abas, warto zestawić najważniejsze cechy obu formatów:

CechacXML (commerce eXtensible Markup Language)UBL (Universal Business Language) Order 2.1
Główne zastosowanieSAP Ariba, Coupa, bezpośrednie katalogi B2B PunchOutSieć Peppol, europejski handel B2G oraz B2B
Nagłówek i autoryzacjaWbudowane nagłówki Shared Secret i tożsamości (<Header><From>...</Header>)Ustandaryzowane elementy EndpointID oraz PartyIdentification
Przestrzenie nazw (Namespaces)Zazwyczaj oparte na DTD lub bez prefiksówŚcisła hierarchia przestrzeni nazw (urn:oasis:names:specification:ubl:schema:xsd:Order-2)
Mechanizm potwierdzeniaSynchroniczna odpowiedź HTTP (200 OK + cXML Status) i asynchroniczne cXML ConfirmationUBL OrderResponse (Peppol BIS Order Response 3.0)

Architektura procesu: Od przychodzącego XML do zamówienia w abas

Przetwarzanie zamówień XML w abas ERP przebiega w bezpiecznym, wieloetapowym procesie (pipeline):

  1. Odbiór i wstępna walidacja: Dokument cXML lub UBL dociera kanałem komunikacyjnym (AS2, API HTTPS REST lub SFTP) i natychmiast podlega walidacji schematu XSD w celu wyeliminowania błędów składniowych.
  2. Transformacja XSLT: Dedykowany arkusz XSLT przekształca zewnętrzną strukturę XML do natywnego formatu abas EDP-XML (warstwa Head oraz Table).
  3. Mapowanie danych podstawowych: Na podstawie tabel referencyjnych w abas Vartab kody klienta (GLN, NIP) i numery artykułów nabywcy są tłumaczone na wewnętrzne identyfikatory abas.
  4. Bezzalogowy import EDP (Headless Import): Serwer EDP otwiera transakcję w tle, wywołuje formatkę zamówienia sprzedaży, wykonuje logikę biznesową (weryfikacja limitu kredytowego, cenniki, reguły podatkowe) i generuje dokument.
  5. Sprzężenie zwrotne i powiadomienia: Po pomyślnym utworzeniu zapisywany jest numer zamówienia; w przypadku rozbieżności cenowych zamówienie otrzymuje status ostrzegawczy i trafia do opiekuna klienta.

Transformacja XSLT: Konwersja UBL / cXML do abas EDP-XML

Kluczem do niezawodnej integracji jest wydajna transformacja XSLT. Poniższy przykład ilustruje przekształcenie zamówienia UBL 2.1 w natywną strukturę <abasDocument>:

<?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>
                <!-- Numer zewnętrznego zamówienia i data -->
                <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>
                
                <!-- Identyfikacja klienta przez GLN / EndpointID -->
                <ygln><xsl:value-of select="cac:BuyerCustomerParty/cac:Party/cbc:EndpointID"/></ygln>
                <waehrung><xsl:value-of select="cbc:DocumentCurrencyCode"/></waehrung>
                
                <!-- Wskaźnik statusu integracji -->
                <yedistat>XML_IMPORT_NEW</yedistat>
            </head>
            <table>
                <xsl:for-each select="cac:OrderLine">
                    <row n="{position()}">
                        <!-- Numer artykułu klienta i kod EAN/GTIN -->
                        <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>

Mechanizm importu EDP w tle (Headless EDP) w abas ERP

Gdy arkusz XSLT wygeneruje czysty dokument abas XML, serwer EDP przeprowadza import z zachowaniem pełnej spójności transakcyjnej:

  • Wyszukiwanie kontrahenta na podstawie ygln lub NIP: Jeśli wewnętrzny numer klienta nie jest znany, EDP przeszukuje kartotekę odbiorców. W przypadku braku jednoznacznego dopasowania zamówienie przypisywane jest do konta tymczasowego (Clearing Account) z blokadą realizacji.
  • Referencje krzyżowe artykułów: Podczas przetwarzania pozycji abas analizuje pola yean (GTIN) i ycustomerno. Na podstawie tabeli Vartab automatycznie podstawiany jest wewnętrzny numer indeksu (artikel).
  • Normalizacja jednostek miary: Międzynarodowe kody UN/ECE Rec 20 (np. H87 = szt., KGM = kg, MTR = m) tłumaczone są na wewnętrzne jednostki abas.

Obsługa rozbieżności cenowych i reguły tolerancji

Jednym z najczęstszych problemów w praktyce jest rozbieżność cenowa: cena jednostkowa przesłana w zamówieniu XML klienta różni się od ceny w obowiązującym cenniku lub umowie w abas ERP.

W systemie abas sytuację tę obsługuje reguła FOP (Format Optimization Program):

Procedura weryfikacji cenowej:
Jeśli | Cena_XML - Cena_z_Umowy_abas | > Próg_Tolerancji (np. > 0.5% lub > 0.01 EUR):
  1. Pozycja zostaje zapisana z ceną z zamówienia klienta, aby zachować intencję zamawiającego.
  2. Pozycja i nagłówek zamówienia otrzymują status "Wymaga akceptacji ceny" (yedistat = 'PRICE_DISCREPANCY').
  3. Zamówienie zostaje automatycznie zablokowane przed wystawieniem dokumentu WZ (Lieferschein), a do działu sprzedaży wysyłane jest powiadomienie.

Typowe pułapki podczas importu zamówień XML

  • Błędy przestrzeni nazw w XSLT: Dokumenty UBL stosują ścisłe przestrzenie nazw (xmlns:cac="..."). Brak ich zdefiniowania w szablonie sprawia, że ścieżki XPath zwracają pusty wynik, a pozycje zamówienia nie zostaną utworzone.
  • Niepożądana agregacja pozycji: Jeżeli klient zamawia ten sam artykuł w dwóch odrębnych liniach z różnymi terminami dostawy, domyślna logika łączenia pozycji zniszczy harmonogram zamawiającego. Łączenie pozycji musi być wyłączone.
  • Precyzja zaokrągleń: Gdy zewnętrzny XML podaje cenę jednostkową z 4 miejscami po przecinku (np. 0.1235 EUR), a pole w abas ma 2 miejsca, suma netto może nie zgadzać się z oczekiwaniami nabywcy.
  • Brak obsługi korekt i anulowań: Gdy kontrahent przesyła zaktualizowany plik XML do istniejącego zamówienia, system musi rozpoznać pierwotne zamówienie zamiast tworzyć duplikat.

Podsumowanie

Automatyzacja importu zamówień cXML i UBL przy pomocy XSLT i EDP eliminuje ręczne wprowadzanie danych, skraca czas potwierdzania zamówień i gwarantuje pełną spójność danych w abas ERP.

W części 3 przejdziemy do logistyki wysyłkowej: omówimy eksport dokumentów WZ z hierarchią opakowań (Handling Units, SSCC) w formacie XML oraz integrację z systemami WMS i API kurierów (GLS, DPD, DHL).

Planujesz automatyzację przetwarzania zamówień cXML i UBL w systemie abas ERP? Skontaktuj się z naszym zespołem ekspertów!