{"id":5515,"date":"2018-12-03T22:14:17","date_gmt":"2018-12-03T21:14:17","guid":{"rendered":"http:\/\/archivista.ch\/cms\/?page_id=5515"},"modified":"2019-01-07T17:06:54","modified_gmt":"2019-01-07T16:06:54","slug":"archivistabox-2018xi","status":"publish","type":"page","link":"https:\/\/archivista.ch\/cms\/de\/aktuell-blog\/jahre-2008-2019\/blogs-2018\/archivistabox-2018xi\/","title":{"rendered":"ArchivistaBox 2018\/XI"},"content":{"rendered":"<h1>Kreditoren-Managment mit ArchivistaDMS<\/h1>\n<p><em><strong>Egg, 3. Dezember 2018:<\/strong> Die letzten Monate waren von satter Arbeit bei Kunden gepr\u00e4gt. Viel Zeit, um die ArchivistaBox zu erweitern, blieb dabei nicht. Seit einigen Tagen steht das Release 2018\/XI zur Verf\u00fcgung. An erster Linie steht optional ein neues Kreditoren-Managment-Modul bei ArchivistaDMS zur Verf\u00fcgung. Weiter werden neu die Fujitsu fi-7140 und fi-7240 unterst\u00fctzt. Nicht zuletzt wurden aber einige Bugs bei ArchivistaERP und ArchivistaDMS gel\u00f6st, auch dies geh\u00f6rt zur Produktpflege. Nachfolgend wird das Kreditoren-Management vorgestellt.<\/em><\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5518\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren.jpg\" alt=\"\" width=\"600\" height=\"300\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren-300x150.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<h2>Schritt 1: Skript aktivieren<\/h2>\n<p>Im Rahmen eines neuen Projektes ging es darum, dass alle eingehenden Kreditoren-Rechnungen elektronisch verarbeitet werden k\u00f6nnen. Dabei gab es mehrere Rechtestufen zu implementieren. Das Sekretariat erfasst die Rechnungen (Scannen oder Datei-Upload) und weist diese den Abteilungen zu. Dort k\u00f6nnen diese begutachten und elektronisch visiert werden. Die Gesch\u00e4ftsleitung sieht beim Anmelden alle visierten Posten und autorisiert diese f\u00fcr die Buchhaltung, womit die Rechnungen zur Zahlung freigegeben sind.<\/p>\n<p>T\u00f6nt einfach, und ist es auch. Mit dem nachfolgenden Code wird ArchivistaDMS um ein komplettes Kreditoren-Management erweitert:<\/p>\n<pre>#!\/usr\/bin\/perl\r\n\r\nuse lib qw(\/home\/cvs\/archivista\/jobs);\r\nuse AVJobs;\r\nmy $host = shift;\r\nmy $db = shift;\r\nmy $user = shift;\r\nmy $pw = shift;\r\nmy $doc = shift;\r\nmy $dbh=MySQLOpen($host,$db,$user,$pw);\r\ncheckChange($dbh,$doc,$user);\r\n$dbh-&gt;disconnect();\r\n\r\nsub checkChange {\r\n  my ($dbh,$doc,$user) = @_;\r\n  my $docit = \"where Laufnummer=$doc \".\r\n    \"and DokTyp2Nr=4 and (Gesperrt='' or Gesperrt is null)\";\r\n  my $sql = \"select Laufnummer from archiv $docit\";\r\n  my ($lnr)=$dbh-&gt;selectrow_array($sql);\r\n  if ($lnr&gt;0) { \r\n    if ($user eq \"buha\") {\r\n      $sql = \"select Sachbearbeiter,SachbearbeiterHidden,\".\r\n        \"GeschaeftsleitungVisum from archiv $docit\";\r\n      my ($sach,$hidden,$visum) = $dbh-&gt;selectrow_array($sql);\r\n      if ($visum==0) {\r\n        if ($sach ne $hidden) {\r\n          $sql = \"update $db.archiv set Sachbearbeiter=\".$dbh-&gt;quote($sach).\r\n            \",SachbearbeiterHidden=\".$dbh-&gt;quote($sach).\r\n            \",SachbearbeiterVisum=0,SachbearbeiterDatum=Null \".\r\n            \"where Laufnummer=$doc\";\r\n          $dbh-&gt;do($sql);\r\n        }\r\n      } else {\r\n        if ($sach ne $hidden) {\r\n          $sql=\"update archiv set Sachbearbeiter=\".$dbh-&gt;quote($hidden).\" $docit\";\r\n          $dbh-&gt;do($sql);\r\n        }\r\n      }\r\n      $sql = \"select BuchhaltungVisum,BuchhaltungDatum,\".\r\n        \"GeschaeftsleitungVisum from archiv $docit\";\r\n      my ($vis,$dat,$gl) = $dbh-&gt;selectrow_array($sql);\r\n      if ($gl==1) {\r\n        if ($vis==1 &amp;&amp; $dat==0) {\r\n          $sql = \"update archiv set BuchhaltungDatum='\".SQLStamp1().\r\n            \"' where Laufnummer=$doc\";\r\n          $dbh-&gt;do($sql);\r\n        } elsif ($vis==0 &amp;&amp; $dat&gt;0) {\r\n          $sql = \"update archiv set BuchhaltungVisum=1 where Laufnummer=$doc\";\r\n          $dbh-&gt;do($sql);\r\n        }\r\n      } else {\r\n        if ($vis==1) {\r\n          $sql = \"update archiv set BuchhaltungVisum=0 where Laufnummer=$doc\";\r\n          $dbh-&gt;do($sql);\r\n        }\r\n      }\r\n    } elsif ($user eq \"gl\") {\r\n      my $sql = \"select GeschaeftsleitungDatum from archiv $docit\".\r\n        \" and GeschaeftsleitungVisum=1 and BuchhaltungVisum=0\";\r\n      my @row = $dbh-&gt;selectrow_array($sql);\r\n      if (int($row[0])==0) { \r\n        $sql = \"update archiv set GeschaeftsleitungDatum='\".SQLStamp1().\r\n          \"' where Laufnummer=$doc\";\r\n        $dbh-&gt;do($sql);\r\n      }\r\n    } else { # Sachbearbeiter\r\n      my $sql = \"select Sachbearbeiter from archiv $docit\";\r\n      my @row = $dbh-&gt;selectrow_array($sql);\r\n      if ($row[0] eq \"$user\") {\r\n        my $sql = \"select SachbearbeiterVisum,SachbearbeiterDatum \".\r\n          \"from archiv $docit and GeschaeftsleitungVisum=0 and \".\r\n          \"BuchhaltungVisum=0\";\r\n        my ($vis,$dat) = $dbh-&gt;selectrow_array($sql);\r\n        if ($vis==1 &amp;&amp; $dat==0) {\r\n          $sql = \"update archiv set SachbearbeiterDatum='\".SQLStamp1().\r\n            \"' where Laufnummer=$doc\";\r\n          $dbh-&gt;do($sql);\r\n        } elsif ($vis==0 &amp;&amp; $dat&gt;0) {\r\n          $sql=\"update archiv set SachbearbeiterVisum=1 where Laufnummer=$doc\";\r\n          $dbh-&gt;do($sql);\r\n        }\r\n      } else {\r\n        $sql=\"update archiv set SachbearbeiterVisum=0 where Laufnummer=$doc\";\r\n        $dbh-&gt;do($sql);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nsub SQLStamp1 {\r\n  my @t = localtime( time() );\r\n  my ( $stamp, $y, $m, $d, $h, $mi, $s );\r\n  $y = $t[5] + 1900;\r\n  $m = $t[4] + 1;\r\n  $m = sprintf( \"%02d\", $m );\r\n  $d = sprintf( \"%02d\", $t[3] );\r\n  $stamp = $y . \"-\" . $m . \"-\" . $d . \" 00:00:00\";\r\n  return $stamp;\r\n}<\/pre>\n<p>Das Skript ist unter dem Namen der Datenbank (z.B. archivista.pl) in WebAdmin unter &#8218;Jobs administrieren zu aktivieren. Damit das Skript arbeitet, ist plus\/minus die folgende Maske zu erstellen:<\/p>\n<h2>Schritt 2: Maske anpassen<\/h2>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5516\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren.png\" width=\"600\" height=\"218\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren.png 924w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren-300x109.png 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren-768x279.png 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren-600x218.png 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2018\/12\/kreditoren-624x227.png 624w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<h2>Schritt 3: SQL-Definitionen erstellen und zuweisen<\/h2>\n<p>Damit die einzelnen Benutzer\/innen beim Einstieg in ArchivistaDMS die korrekten Dokumente vorfinden, m\u00fcssen in WebAdmin entsprechende SQL-Definitionen erfasst werden:<\/p>\n<p><strong>Sekretariat\/Buchhaltung:<\/strong> DokTyp2Nr=4 and BuchhaltungVisum=0 and (((Sachbearbeiter is Null or Sachbearbeiter=&#8220;) or (GeschaeftsleitungVisum=1 and BuchhaltungVisum=0))) order by Datum desc, Laufnummer desc<\/p>\n<p><strong>Sachbearbeiter:<\/strong> DokTyp2Nr=4 and SachbearbeiterVisum=0 and GeschaeftsleitungVisum=0 and Sachbearbeiter='[user}&#8216; order by Datum asc<\/p>\n<p><strong>Gesch\u00e4ftsleitung:<\/strong> DokTyp2Nr=4 and ((Sachbearbeiter&lt;&gt;&#8220;&#8220; and GeschaeftsleitungVisum=0)) order by Datum asc<\/p>\n<p>Die entsprechenden SQL-Definitionen sind den Benutzer\/innen zuzuweisen &#8212; und schon ist ArchivistaDMS um ein vollwertiges Kreditoren-Management erweitert.<\/p>\n<h2>Fazit: Automatisierung leicht gemacht<\/h2>\n<p>ArchivistaDMS l\u00e4sst sich mit &#8218;Jobs administrieren&#8216; einfach \u00fcber WebAdmin automatisieren. Im obenstehendem Beispiel wurde die Programmiersprache Perl verwendet. Ebenfalls verwendet werden k\u00f6nnen die Skriptsprachen PHP und Python. Weitere Sprachen k\u00f6nnen optional ebenfalls eingebunden werden.<\/p>\n<p>Wem die obenstehenden Zeilen &#8217;spanisch&#8216; vorkommen, darf sich gerne an uns wenden, entsprechende Module werden f\u00fcr Kunden gerne auf jeder ArchivistaBox implementiert.<\/p>\n\n\n\n\t<div class=\"dkpdf-button-container\" style=\"            text-align:right \">\n\n\t\t<a class=\"dkpdf-button\" href=\"\/cms\/wp-json\/wp\/v2\/pages\/5515?pdf=5515\" target=\"_blank\"><span class=\"dkpdf-button-icon\"><i class=\"fa fa-file-pdf-o\"><\/i><\/span> PDF Button<\/a>\n\n\t<\/div>\n\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Kreditoren-Managment mit ArchivistaDMS Egg, 3. Dezember 2018: Die letzten Monate waren von satter Arbeit bei Kunden gepr\u00e4gt. Viel Zeit, um die ArchivistaBox zu erweitern, blieb dabei nicht. Seit einigen Tagen steht das Release 2018\/XI zur Verf\u00fcgung. An erster Linie steht optional ein neues Kreditoren-Managment-Modul bei ArchivistaDMS zur Verf\u00fcgung. Weiter werden neu die Fujitsu fi-7140 und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":5556,"menu_order":189,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-5515","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/5515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/comments?post=5515"}],"version-history":[{"count":5,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/5515\/revisions"}],"predecessor-version":[{"id":5523,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/5515\/revisions\/5523"}],"up":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/5556"}],"wp:attachment":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/media?parent=5515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}