{{indexmenu_n>0040}} ====== Workflow - Prüfung der Umsatzsteuer ID Nummer des Kunden/Lieferanten via REST-API ====== Das folgende Beispiel beschreibt die automatisierte Prüfung der Umsatzsteuer bei Speichern eines Kunden-/Lieferantenstammsatzes.\\ \\ **ACHTUNG:** Ab dem 30.11.2025 ist die alte XML-RPC-Schnittstelle des Bundeszentralamt für Steuern (BZSt) nicht mehr verfügbar und es steht nur noch die neue REST-API zur Verfügung.\\ Hierzu wurde eine neue Funktion implementiert, die sehr ähnlich zur bestehenden Bestätigungsabfrage agiert. \\ \\ **HINWEIS:** Sollte es zu Störungen der API kommen, können Sie dies unter folgendem Link einsehen: \\ https://www.bzst.de/DE/Unternehmen/Identifikationsnummern/Umsatzsteuer-Identifikationsnummer/eVatR/eVatR_node.html ===== Umsetzung ===== ==== Definition Workflow ==== {{:cimerp:0140_workflow:0080_workflow_beispiele:pasted:20251106-162525.png}} ==== Formel ==== **WICHTIG:** Hier neuer Prozeduraufruf mit anderen Parametern.\\ Erläuterung der Parameter unterhalb. declare retcode = integer not null with default, result = varchar(2000) not null with default, terminal_id = varchar(50) not null with default, enddeclare begin callproc cdpr3_GenerateWorktableID(byref(terminal_id)); ResultString = 'Überprüfung UST-Identnummer zu Kunde: ' + text(ikey1) + HC_NEWLINE; // Prozedur kann periodisch in Schleife, für einen Massenlauf, aufgerufen werden retcode = cdwpr4_check_ustident_api(strResult = byref(result), pKundenNr = ikey1, iNameDepth = 1, pIdentNummer = '', pFirmenname = '', pFirmenname2 = '', pFirmenname3 = '', bDebugApiOutput = false, bProtokoll = true, bTestAufruf = false, pTerminalId = terminal_id, bCheckStammNr = false, pStammNr = '', bQualifizierteAnfr = true, // Nur wichtig wenn bQualifizierteAnfr = true übergeben wurde pStrPlz = '', pOrt = '', pStrasse = '', bStrictName = false, bStrictPlace = false, bStrictPostCode = false, bStrictStreet = false ); ResultString = ResultString + result; //message ResultString; if retCode <0 then return true; // Fehler else return true; // in Ordnung endif; end ==== Erläuterung Parameter ==== |**Name Parameter** |**Art d. Variable** |**Beschreibung** | |**strResult** |alphanummerisch - maximal 256 Zeichen|Auswertbarer Rückgabewert, z.B. "Die angefragte Ust-IdNr. ist zum Anfragezeitpunkt gültig."| |**pKundenNr** |nummerisch - Ganzzahl|Kunden-Nr. - Wichtig, wenn nicht gesetzt, funktioniert Aufruf nicht| |**pIdentNummer** |alphanummerisch - maximal 16 Zeichen|Angefragte Ust.-Ident - Wenn nicht gesetzt wird autom. ermittelt anhand der Kunden-Nr.| |**iNameDepth** |nummerisch (Nur Werte 1-3 erlaubt, 1 = default)|Wenn Prüfung auf name_zeile1 fehlschlägt wird bei iNameDepth = 2 auf name_zeile1 + name_zeile2 geprüft| |**pFirmenname** |alphanummerisch - maximal 64 Zeichen|Name Zeile 1 des Kunden - Wenn nicht gesetzt wird autom. ermittelt anhand der Kunden-Nr.| |**pFirmenname2** |alphanummerisch - maximal 64 Zeichen|Name Zeile 2 des Kunden (Nur relevant wenn iNameDepth min. 2 - Wenn nicht gesetzt wird autom. ermittelt anhand der Kunden-Nr.| |**pFirmenname3** |alphanummerisch - maximal 64 Zeichen|Name Zeile 3 des Kunden (Nur relevant wenn iNameDepth min. 3 - Wenn nicht gesetzt wird autom. ermittelt anhand der Kunden-Nr.| |**bDebugApiOutput** |boolean (true/false)|Aktivierung Debugausgaben in Log-Datei zusätzlich wird eine Datei im w4glerrors-Ordner erzeugt, mit der rohen Rückgabe des API-Aufrufs| |**bProtokoll** |boolean (true/false)|Aktivierung Protokollierung in Protokolltabelle sta_ustident_protokoll anhand Terminal-ID| |**bTestAufruf** |boolean (true/false)|Wenn true verwendet vom BZSt. vergebene Dummy-Daten zur Prüfung der Funktionalität der API| |**pTerminalId** |alphanummerisch - maximal 64 Zeichen|Terminal-ID für Protokolltabelle - Wird autom. erzeugt wenn nicht vergeben und bProtokoll mit true übergeben wurde| |**bCheckStammNr** |boolean (true/false)|Wenn true, wird bei fehlgeschlagener Prüfung des Kunden die im Kundenstamm hinterlegte Stamm-Nr. verwendet| |**pStammNr** |nummerisch - Ganzzahl|Wenn bCheckStammNr = true wird diese anstatt der Kunden-Nr. verwendet, sollte die Prüfung der Kunden-Nr. fehlschlagen (wird autom. ermittelt)| |**bQualifizierteAnfr** |boolean (true/false)|Wenn true, dann wird zusätzlich zum Namen und Ust.-Ident auch auf PLZ, Ort und Strasse geprüft| |**pStrPlz** |alphanummerisch - maximal 11 Zeichen|Postleitzahl des Kunden - Wenn nicht gesetzt wird autom. ermittelt anhand der Kunden-Nr. (Nur relevant wenn bQualifizierteAnfr mit true übergeben wurde)| |**pOrt** |alphanummerisch - maximal 64 Zeichen|Ort des Kunden - Wenn nicht gesetzt wird autom. ermittelt anhand der Kunden-Nr. (Nur relevant wenn bQualifizierteAnfr mit true übergeben wurde)| |**pStrasse** |alphanummerisch - maximal 64 Zeichen|Strasse des Kunden - Wenn nicht gesetzt wird autom. ermittelt anhand der Kunden-Nr. (Nur relevant wenn bQualifizierteAnfr mit true übergeben wurde)| |**bStrictName** |boolean (true/false)|Wenn true und die Namensprüfung der qualifizierten Anfrage schlägt Fehl, wird die Prüfung als fehlerhaft erachtet| |**bStrictPlace** |boolean (true/false)|Wenn true und die Ortsprüfung der qualifizierten Anfrage schlägt Fehl, wird die Prüfung als fehlerhaft erachtet| |**bStrictPostCode** |boolean (true/false)|Wenn true und die Postleitzahlprüfung der qualifizierten Anfrage schlägt Fehl, wird die Prüfung als fehlerhaft erachtet| |**bStrictStreet** |boolean (true/false)|Wenn true und die Strassenprüfung der qualifizierten Anfrage schlägt Fehl, wird die Prüfung als fehlerhaft erachtet| ==== Ergebnis ==== {{:cimerp:0140_workflow:0080_workflow_beispiele:pasted:20251106-162617.png}} ==== Historieneintrag ==== {{:cimerp:0140_workflow:0080_workflow_beispiele:pasted:20200211-155234.png}} {{:cimerp:0140_workflow:0080_workflow_beispiele:pasted:20200211-155304.png}} ==== Reportaufruf ==== {{:cimerp:0140_workflow:0080_workflow_beispiele:pasted:20200403-130104.png}} ==== Reportergebnis ==== {{:cimerp:0140_workflow:0080_workflow_beispiele:pasted:20200403-130201.png}}