Zum Inhalt springen

Lieferantenstammdaten aus einer Excel-Liste

Ihre Lieferantenliste führen Sie in Excel: Name, Kreditorenkonto, Zahlungsziel in Tagen und ob der Lieferant gesperrt ist. Laden Sie die XLSX-Datei in eine Datentabelle lieferanten mit dem Namen als Schlüsselspalte hoch; eine neue Fassung der Liste laden Sie einfach erneut hoch. Das Skript sucht den Lieferanten der Rechnung in der Tabelle, setzt das Kreditorenkonto und den Tag, bis zu dem die Rechnung zu zahlen ist, zwei Felder, die der Workflow selbst deklariert. Einen gesperrten Lieferanten markiert es mit dem Schlagwort „Prüfen“, und für einen Lieferanten, der in der Liste fehlt, bekommt die Freigabe einen Hinweis. Brauchen Sie je Lieferant nur Kostenstelle und Sachkonto, genügt eine Karte: Kontierung aus einer Datentabelle.

Der Workflow startet für jedes Dokument vom Typ incoming-invoice. Seine Datei workflow.yaml:

$schema: 'https://docs.acriva.de/schemas/workflow.schema.json'
format: 1
schemaVersion: 4
sdk: '1.0.0'
key: vendor-master-data
name: Lieferantenstammdaten aus der Lieferantenliste
template: custom
trigger:
documentType: incoming-invoice
fields:
- key: creditorAccount
kind: text
labelDe: Kreditorenkonto
labelEn: Creditor account
documentTypes:
- incoming-invoice
- key: paymentDue
kind: date
labelDe: Zahlbar bis
labelEn: Payable by
documentTypes:
- incoming-invoice
start: enrich
steps:
- kind: script
name: enrich
label: Stammdaten des Lieferanten
script: enrich.ts
hook: onDocumentArrived
inputs:
- kind: field
key: vendorName
type: text
- kind: field
key: invoiceDate
type: date
- kind: table
key: lieferanten
returns: []
exits: []
next: approve
- kind: humanTask
name: approve
label: Freigabe
taskKind: approve
assignees:
- when: null
assignee:
kind: costCenterResponsible
fallback:
kind: role
role: Buchhaltung
options:
excludeRequester: true
excludeActorsOfSteps: []
pickFile: false
next: approved
onRejected: rejected
- kind: end
name: approved
label: Freigegeben
outcome: approved
- kind: end
name: rejected
label: Zurückgewiesen
outcome: rejected

Hook: onDocumentArrived · Eingaben: vendorName, invoiceDate, Datentabelle lieferanten · Rückgaben: keine

import { date, defineScript } from '@acriva/workflow-sdk';
export default defineScript({
hook: 'onDocumentArrived',
async run(ctx) {
const { vendorName, invoiceDate } = ctx.document.fields;
if (vendorName == null) return;
// The row whose key column (the vendor's name) holds the name, or null when the list has none.
const vendor = await ctx.tables.lookup('lieferanten', vendorName);
if (vendor === null) {
ctx.hint(
`„${vendorName}“ steht nicht in der Lieferantenliste. Bitte ergänzen Sie den Lieferanten in der Datentabelle Lieferanten.`,
);
return;
}
if (vendor.gesperrt) {
ctx.addTag('Prüfen');
ctx.hint(
`„${vendorName}“ ist in der Lieferantenliste gesperrt. Bitte klären Sie, ob die Rechnung bezahlt wird.`,
);
}
if (vendor.kreditorenkonto) ctx.setField('creditorAccount', vendor.kreditorenkonto);
if (invoiceDate != null && vendor.zahlungszielTage != null)
ctx.setField('paymentDue', date.addDays(invoiceDate, vendor.zahlungszielTage));
},
});

Ein Test führt jeden dieser Fälle in der Sandbox aus und vergleicht das Ergebnis.

  • Eingabe: vendorName Billig-Druck Ltd., invoiceDate 2026-10-15
  • Datentabelle lieferanten: 3 Zeilen
    • name Telekom Deutschland GmbH, kreditorenkonto 70012, zahlungszielTage 30, gesperrt false
    • name Bürobedarf Schmidt KG, kreditorenkonto 70044, zahlungszielTage 14, gesperrt false
    • name Billig-Druck Ltd., kreditorenkonto 70091, zahlungszielTage null, gesperrt true
  • Ausgang: der Standard-Nachfolger
  • Änderungen: Schlagwort „Prüfen“; Hinweis an der nächsten Aufgabe: „„Billig-Druck Ltd.“ ist in der Lieferantenliste gesperrt. Bitte klären Sie, ob die Rechnung bezahlt wird.“; Feld creditorAccount = 70091
  • Eingabe: vendorName Telekom Deutschland GmbH, invoiceDate 2026-10-15
  • Datentabelle lieferanten: 3 Zeilen
    • name Telekom Deutschland GmbH, kreditorenkonto 70012, zahlungszielTage 30, gesperrt false
    • name Bürobedarf Schmidt KG, kreditorenkonto 70044, zahlungszielTage 14, gesperrt false
    • name Billig-Druck Ltd., kreditorenkonto 70091, zahlungszielTage null, gesperrt true
  • Ausgang: der Standard-Nachfolger
  • Änderungen: Feld creditorAccount = 70012; Feld paymentDue = 2026-11-14
  • Eingabe: vendorName Neue Firma AG, invoiceDate 2026-10-15
  • Datentabelle lieferanten: 3 Zeilen
    • name Telekom Deutschland GmbH, kreditorenkonto 70012, zahlungszielTage 30, gesperrt false
    • name Bürobedarf Schmidt KG, kreditorenkonto 70044, zahlungszielTage 14, gesperrt false
    • name Billig-Druck Ltd., kreditorenkonto 70091, zahlungszielTage null, gesperrt true
  • Ausgang: der Standard-Nachfolger
  • Änderungen: Hinweis an der nächsten Aufgabe: „„Neue Firma AG“ steht nicht in der Lieferantenliste. Bitte ergänzen Sie den Lieferanten in der Datentabelle Lieferanten.“