Durchsuchbare Dokumentation aufrufen

Zurück zur Dokumentationsübersicht

FileWorkflow - Abfragen, ob Rechnung unique ist

Es kommt immer wieder vor, dass eine Rechnung (oder ein Beleg) mehrfach ankommt. Einmal als E-Mail und einmal als Papierpost (Brief). Um im Rechnungsprozess sicher zu sein, dass nur eines der beiden Dokumente für die Weiterverarbeitung genutzt wird, muss geprüft werden, ob es diesen Beleg schon einmal gibt. Am Beispiel einer Rechnung soll hier gezeigt werden, wie eine solche Prüfung abläuft.

Um eine Rechnung eindeutig zu prüfen, müssen folgende Daten einer Rechnung verglichen werden:

Das Rechnungsdatum wird deshalb mit herangezogen, um auszuschließen, dass innerhalb der Archivierungszeit vom selben Lieferant eine Rechnungsnummer mehrfach vorkommt.

FileWorkflow einstellen

Der FileWorkflow wird in zwei Schritten eingestellt.

Schritt 1: Skript eintragen und Parameter definieren

Im ersten Schritt wird ein JavaScript verwendet, mit dem festgestellt wird, ob die Rechnung eindeutig ist. Das Skript finden Sie unten. Im Skript wird das Metadatum "demo_invoiceUnique" auf das Objekt gesetzt, mit dem die Eindeutigkeit in Schritt 2 abgefragt wird.

Als Übergabeparameter werden die Metadaten als String übergeben, die für die Prüfung benötigt werden.

Hinweis: Das Datum muss in diesem Format übergeben werden:

${demo_df_invoiceDate:yyyy-MM-dd'T'HH:mm:ss.SSSXXX}

Tragen Sie hier Ihre eigenen Metadaten-Namen ein.

Schritt 1: Skript eintragen und Parameter definieren

Schritt 2: Bedingungen definieren

Im 2. Schritt folgen Abfrageschritte (Bedingungen oder auch Regeln genannt), mit denen das weitere Vorgehen gesteuert wird. Diese werden hier gezeigt:

Schritt 2: Bedingungen definieren

Beim der ersten Bedingung wird geprüft, ob die Rechnung "unique" ist, bei der zweiten Bedinung, ob die Rechnung nicht "unique" ist.

Je nach Fall springt das System in einen anderen Verarbeitungszweig.

JavaScript

Nachfolgend das JavaScript, das im Fileworkflow aufgerufen wird. Hier wird auch gezeigt, wie ein Datum abgefragt werden kann und alle Zeitzonen dabei berücksichtigt werden. Je nachdem, wie hier das Rechnungsdatum gesetzt wird, kann es unterschiedlich im Index aussehen, wird aber hier im query so eingestellt, dass es sauber abgefragt werden kann.

/* global folder, object, parameters */

let objects = require('common/objects');
let metadata = require('common/metadata');
let beans = require('common/beans');
/**
//Test
let object = objects.find('1195277'); // Object, mit dem getestet werden soll

let parameters = {
  demo_df_invoiceDate: '2019-11-18T00:00:00.000+01:00',  // Hier muss das Datum des Objektes entwederals String angegeben werden, oder
                                                         // Sie lesen es aus dem Object aus und formatieren es per templates.fill
                                                         // wie im Fileworkflow oben bei Schritt 1
  demo_df_invoiceNumber: '4039343',
  demo_df_supplierNumber: '192837465'
};
/**/

//throw JSON.stringify(parameters, null, 2);

let demo_df_invoiceDate = beans.convert('string', beans.date(parameters.demo_df_invoiceDate));

let query = ('inpath:9999 docformtype_ci:(Rechnung OR "Rechnung ohne Lieferantenbezug") ' + // Hier wird geprüft für welchen Dokument-
                                                                                            // typ die Prüfung gemacht werden soll
                                                                                            // und das das Object NICHT im 
                                                                                            // Serverpapierkorb liegt (inpath:9999)
                            'demo_df_suppliernumber_ci:"$1" demo_df_invoicenumber:"$2" ' +  // hier werden Lieferantennummer und
                                                                                            // Rechnungsnummer geprüft
                            'demo_df_invoicedate_date_range:[$3-12HOUR TO $3b+12HOUR] ' +   // Hier werden +/- 12 Stunden zum 
                                                                                            // Datum hinzugezählt
                            'NOT id:$4')                                                    // Hier wird das aktuell zu prüfende Object
                                                                                            // ausgeschlossen
                            .replace('$1', parameters.demo_df_supplierNumber)
                           .replace('$2', parameters.demo_df_invoiceNumber)
                           .replace('$3', demo_df_invoiceDate)
                           .replace('$3b', demo_df_invoiceDate)
                           .replace('$4', object.ID);

let results = objects.query(query).find();

let demo_invoiceUnique = results.length === 0;  // Wenn nicht gefunden wird, ist das Ergebnis true (unique), sonst false

// setzen des Metadatums demo_invoiceUnique, um das Ergebnis in einer weiteren Bedingung im Fileworkflow abfragen zu können
metadata({demo_invoiceUnique: demo_invoiceUnique}).save(object);