Release 22.1.0
Unbedingt die aktuellen Installationsvoraussetzungen vorab prüfen!
Was wurde gemacht?
In diesem Release ging es hauptsächlich um Bugfixing. Dabei wurden 26 Vorgänge behoben.
Zusammenfassung
- INV-343 - Im Gadget werden nun die Zugriffsberechtigungen geprüft
- INV-382 - Bei der Aktenbildung werden max. 100 Einträge gezeigt
- INV-383 - Datumswerte wurden in
invoiceItemnicht befüllt - INV-384 - Numerische Werte werden nun formatiert gespeichert
- INV-385 - Felder wurden nicht geleert
- INV-388 - Wo ist mein Beleg? Suchen im Archiv liefert nicht immer ein Ergebnis (siehe unten)
- INV-391 - Werte werden nun mit S vorbelegt
- INV-392 - Installationsanleitung aktualisiert
- INV-395 - JobUser wird nun aus documents Einstellungen ausgelesen
- INV-396 - Anlage von Buchungsvorlagen klappt nicht, wenn Anzeigenamen für Rechnungskreise konfiguriert sind (siehe unten)
- INV-397 - Es gab im AutoIndex ein Rundungsproblem
- INV-398 - Auswahl standardmäßig aktiviert
- INV-402 - Access:
%fileOwner.login%wird nicht aufgelöst - INV-404 - Korrektur
afterCallbacks vonvalidVerificationundverificationDeletewurden nicht getriggert - INV-409 - Korrekte Validierung negativer Beträge
- INV-410 -
totalNetAmountfehlt ininvplus.fieldMapping.js - INV-411 - Schaltfläche Zahllauf aktualisieren - Filter aktualisiert nicht
- INV-381 - Callbacks Zahlungsziel korrigiert
- INV-393 - In den Views wurde der
recipientnicht mit abgefragt - INV-415 - Umstellung TableResultDialog auf TableDialog
- INV-437 - Lieferanten / Buchungsvorlagen: Verknüpfungsregister zeigt nichts an
- INV-434 - Unendliche Betragsfreigabe / INV-446 - Unendliche Betragsfreigabe
- INV-448 - JavaScript Error, wenn man im Gadget auf "Fälligkeit abgelaufen" klickt
- INV-455 - Verknüpfte Dokumente - OUSP Request
- INV-459 - moment() wird in ou.sp.ptpINV.job.exportToXtract nicht importiert
- INV-469 - Steuersatz-Validierung schlägt bei 0%-Steuersätzen fehl
Spezial Thema - Wo ist mein Beleg Gadget
Im Zuge von INV-388 - wurde das FileSearch Gadget komplett umgeschrieben.
Dabei wurde die Logik komplett überarbeitet und funktioniert nicht mehr so wie vielleicht erwartet.
Ein grober Ablauf

Es wird nun Standardmäßig über die Datenbank gesucht (und kein HitResultset!). Verwendet wird ein neuer View viewInvoiceFileSearch. Wählt man eine Mappe aus, so wird die uuid als Suchkriterium hergenommen und ein HitResultSet erstellt.
Achtung! Wird ein Archiv verwendet, so muss zwingend die ou.tmpl.ptpINV.callbacks.fileSearch in ein ou.cust.ptpINV.callbacks.fileSearch umbenannt werden. Hier müssen dann folgende Anpassungen getroffen werden.
Im beforeLookupFile Callback (ou.tmpl.ptpINV.callbacks.fileSearch.js#142) muss zwingend das Archiv mit übergeben werden, damit der HitResultSet weiß, dass es auch ein Archiv durchsuchen muss. Dazu einfach folgende Zeile verwenden:
data.searchOptions.searchResources.push("Unit=Default/Instance=Default/View=MyView@EEx");
Manuell auszuführende Schritte
Diese Anleitung berücksichtig immer nur den Sprung von der vorhergehenden Version zu der gerade beschrieben Version. Bei Upgrades über mehrere Versionen hinweg müssen alle Änderungen der Zwischenversionen ebenfalls beachtet werden!
Also legen wir los, zunächst mit etwas einfachem.
Datenbank
Database/mssql/v22.1.sql
→ Ein neuer View hat sich dazu entschieden im Invoice mit zu machen.
Views anpassen
Im Zuge von INV-393 - müssen die Views um die recipient Bedingung angepasst werden.
Database/mssql/v21.0.sql
viewInvoiceItemLatestByInvoiceNumber
...
FROM invoiceHeader ih
LEFT JOIN invoiceItem ii ON ii.uuid = ih.uuid
LEFT JOIN costcenter ON costcenter.costcenter = ii.itemCostCenter and costcenter.recipient = ih.recipient
LEFT JOIN impersonalAccount ON impersonalAccount.account = ii.itemImpersonalAccount and impersonalAccount.recipient = ih.recipient
LEFT JOIN costunit ON costunit.costunit = ii.itemCostUnit and costunit.recipient = ih.recipient
...
viewInvoiceItemLatest
...
FROM invoiceHeader ih
LEFT JOIN invoiceItem ii ON ii.uuid = ih.uuid
LEFT JOIN costcenter ON costcenter.costcenter = ii.itemCostCenter and costcenter.recipient = ih.recipient
LEFT JOIN impersonalAccount ON impersonalAccount.account = ii.itemImpersonalAccount and impersonalAccount.recipient = ih.recipient
LEFT JOIN costunit ON costunit.costunit = ii.itemCostUnit and costunit.recipient = ih.recipient
...
viewInvoiceItemFrequencySource
...
FROM
invoiceHeader
LEFT JOIN invoiceItem ON invoiceItem.uuid = invoiceHeader.uuid
LEFT JOIN costcenter ON costcenter.costcenter = invoiceItem.itemCostCenter and costcenter.recipient = invoiceHeader.recipient
LEFT JOIN impersonalAccount ON impersonalAccount.account = invoiceItem.itemImpersonalAccount and impersonalAccount.recipient = invoiceHeader.recipient
LEFT JOIN costunit ON costunit.costunit = invoiceItem.itemCostUnit and costunit.recipient = invoiceHeader.recipient
Fertig! 🥳 So, das war einfach, jetzt geht's richtig los:
Portalscripts
Wie im jedem Update, so auch in diesem wird's wieder etwas schmerzlich beim Thema Portalscripts 🤒. Aber so viele sind es diesmal gar nicht, also legen wir los 💪.
Globalcust
INV-343: Anzeige der Kacheln unter Ordner "Rechnung":
Portalscripts/globalcust/Gadget_ou.cust.filetype.folder.html.Counter.jsPortalscripts/globalcust/ou.cust.callback.folder.counter.js
INV-382: Aktenbildung bei sehr vielen Mappen pro Kreditor dauert sehr lange:
Portalscripts/globalcust/ou.cust.global.filetype.property.eNavigator.dataCollector.js
und das war's auch schon für Globalcust, na siehste, ist gar nicht so schlimm. So jetzt tief durchatmen, wir kommen zu den ptpINVcust
ptpINVcust
Ok, gehen wir's an, los geht's. Zunächst gibt es ein paar neue Callback-Skripte. Im Zuge der Umstellung auf die MultiTable wurden die letzten Überbleibsel vom TableResultDialog umgestellt. Das heißt, es gibt neue lookup- und get-Skripte.
INV-415: TableResultDialog UserExits ersetzen durch MultiTableDialog:
Portalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.getPaymentTerm.jsPortalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.getVendor.jsPortalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.getVendorAccount.jsPortalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.lookupPaymentTerm.jsPortalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.lookupVendor.jsPortalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.lookupVendorAccount.js
Weiter geht's
Portalscripts/ptpINVcust/ou.cust.ptpINV.callbacks.js
→ Behebt INV-381 - Callbacks Zahlungsziel korrigieren:
Portalscripts/ptpINVcust/ou.cust.ptpINV.filetype.action.onDelete.js
→ Fehlender Import
Portalscripts/ptpINVcust/ou.cust.ptpINV.filetype.field.html.cover.js
→ Behebt INV-398 - Cockpit: Vergangene Rechnungsprüfer - Auswählen standardmäßig aktivieren:
Portalscripts/ptpINVcust/ou.cust.ptpINV.filetype.property.eNavigator.js
→ Behebt otris Fehlermeldung in den Logs (AutoText im Format %vendorName% ist obsolete)
Portalscripts/ptpINVcust/ou.cust.ptpINV.filetype.property.hROnFileViewScript.js
→ Fix Fallback auf leeres Array
Mir ist gestern mein Joghurt runtergefallen - er war nicht mehr haltbar 😁
Ok, weiter geht's
Portalscripts/ptpINVcust/ou.cust.ptpINV.install.adminDashboard.js
→ Da der oucadmin Benutzer standardmäßig nicht mehr angelegt wird, muss er dennoch die Zugriffsprofile erhalten, das geschieht nun hier.
Portalscripts/ptpINVcust/ou.cust.ptpINV.job.archiv.js
→ Code Refactoring (Hauptsächlich geändert um eine lauffähige Demo zu haben)
Portalscripts/ptpINVcust/ou.cust.ptpINV.lib.js
→ Fix prüfen ob LockingWorfklowSteps vorhanden sind.
Portalscripts/ptpINVcust/ou.cust.ptpINV.lib.proposal.autoIndex.js
🥵 Bald geschafft, das Ende ist in Sicht 🛣️
Jetzt wird's nochmal kurz fies. Im Zuge von "INV-409 - Negative Nettobeträge werden bei Steuersatz Validierung ignoriert", haben wir die cust Logik in sp umgezogen und mit Tests versehen. Diese Logik muss nun angepasst werden:
Portalscripts/ptpINVcust/ou.cust.ptpINV.lib.proposal.autoIndex.js
Portalscripts/ptpINVcust/ou.cust.ptpINV.settings.monitorROB.js
→ Fehlende Keys in Soll/Haben Kennzeichen
Portalscripts/ptpINVcust/ou.cust.ptpINV.workflow.action.incomingEvent.js
Portalscripts/ptpINVcust/ou.cust.ptpINV.workflow.action.outgoingEvent.js
→ Umstellung auf require
🥳 Das war's, einer der größten Brocken erledigt! Weiter geht's
Im Zuge von INV-388 - Wo ist mein Beleg? Suchen im Archiv liefert nicht immer ein Ergebnis" wurde das FileSearch Gadget (wie oben erwähnt) komplett umgeschrieben:
Portalscripts/ptpINVtmpl/ou.tmpl.ptpINV.callbacks.fileSearch.js
→ Genau prüfen ob das dazugehörige ou.cust.ptpINV.callbacks.fileSearch verwendet wird!
Portalscripts/ptpVENcust/Gadget_ou.cust.cfgBT.filetype.field.multiTable.js
→ Soll / Haben Kennzeichen hinzugefügt
Workflow-ext
Und schon sind wir im Workflow-ext Verzeichnis angekommen.
Workflow-ext/js/ou/cust/template-callbacks-file.js
→ Aus dem Standard raus geworfen ♻️
Workflow-ext/js/ou/cust/ptp/invoice/invoice-callbacks-file-functions.js
→ Behebt INV-384 - Funktion setCashDiscount in invoice-callbacks-file-functions: Jetzt wird's nochmal ungemütlich, wir kommen zur invoice-callbacks-file.js
Workflow-ext/js/ou/cust/ptp/invoice/invoice-callbacks-file.js
Folgende UserExits wurden angepasst:
- vendorSelection
- paymentTerm
- vendorBICNumber
Der Rest sind keine Änderungen, sondern nur Codeformatierungen.
Glückwunsch du hast es geschafft! Der schwierigste Teil ist geschafft!
Benutzer
Der oucadmin Benutzer wird NICHT mehr bei der Installation angelegt! Dieser muss nun vorher über das One Unity Documents installiert werden!
Bei der Installation werden folgende Zugriffsprofile dem oucadmin Benutzer zugewiesen:
- ptpInvoiceAdmin
- ptpVerificationGroup
- ptpPurchaseGroup
- ptpInvoiceUser
- ptpInvoiceManagement
- ptpInvoiceAccounting
- ptpIndexGroup
Bitte prüfen ob der oucadmin diese Zugriffsprofile auch hat.
EEX Archiv
Falls noch nicht geschehen bitte folgenden Punkt überprüfen: EASY+Archive#Weitere-Anpassungen
Mappenfelder
cfgBookingTemplate
Im Feld vendorFileId muss folgende Zeile recipient=%recipient% durch recipient=%recipient.key% ersetzt werden.
