diff --git a/BKK Faber Castell/BKKFC_zeich_nr_aendern.jpl b/BKK Faber Castell/BKKFC_zeich_nr_aendern.jpl new file mode 100644 index 0000000..0c03c04 --- /dev/null +++ b/BKK Faber Castell/BKKFC_zeich_nr_aendern.jpl @@ -0,0 +1,183 @@ + + + + +////////////////////////////////// +// +// Zeichnungs-Nummern ändern +// +// geschrieben von calb / 2018.06.15 +// +// (c) d.velop AG 2018 +// +////////////////////////////////// + + +////////////////////////////////// +// +// Dieses Skript passt die Zeichnungs-Nummern von Verträgen an. +// +vars vers = "0.1 calb d.AG/PS 2018.06.15 Initialversion" +// +////////////////////////////////// + +// Konfiguration + + +// debug = 1 => es werden keine Änderungen an der DB durchgeführt +// debug = 0 => es werden Änderungen an der DB durchgeführt +vars debug = 0 + +////////////////////////////////// + + +call bkklog( 4, "*********************************************" ) +call bkklog( 4, "* BKKFC_zeich_nr_aendern.jpl *" ) +call bkklog( 4, "* calb/d.velop AG 15.06.2018 *" ) +call bkklog( 4, "*********************************************" ) +call bkklog( 4, "* " ## vers ) +call bkklog( 4, "* DEBUG : " ## debug ) + +// Los geht's ...... + +call bkklog( 4, "*********************************************" ) +/////////////////////////////////////////////////////////////////////// + + + +vars l_doku_id[ 1000 ] +vars anzahl, i +vars vertragsnr, ergebnis + +dbms alias l_doku_id +dbms sql select p.doku_id doku_id from phys_datei p, firmen_spezifisch f where f.kue_dokuart = 'EVERT' and p.zeich_nr like 'P%' and f.doku_id = p.doku_id order by p.doku_id +anzahl = @dmrowcount +dbms alias + +for i = 1 while i <= anzahl step 1 +{ + call bkklog( 4, i ## " bearbeite Doku-ID " ## l_doku_id[ i ] ) + + ergebnis = api_function( "attribute_get_single", 1, 0, l_doku_id[ i ] ) + + vertragsnr = api_single_info + + call bkklog( 4, i ## " setze Zeichnungs-Nummer des Dokuments " ## l_doku_id[ i ] ## " auf den Wert " ## vertragsnr ) + + if ( debug == 0 ) + { + call set_doc_property( l_doku_id[ i ], "doc_number", vertragsnr ) + + ergebnis = upd_doc_db_data( l_doku_id[ i ] ) + + if ( ergebnis == "1" ) + { + call bkklog( 4, i ## " Die Änderung wurde durchgeführt." ) + } + else + { + call bkklog( 2, i ## " Es ist ein Fehler aufgetreten, dbi_retcode: " ## dbi_retcode ) + } + + // Kontrolle + ergebnis = api_function( "attribute_get_single", "doc_no", 0, l_doku_id[ i ] ) + + call bkklog( 4, i ## " Ergebnis des Updates: " ## api_single_info ) + + } + else + { + call bkklog( 4, i ## " debug ist eingeschaltet - es wurden keine Änderungen durchgeführt.") + + // Kontrolle + ergebnis = api_function( "attribute_get_single", "doc_no", 0, l_doku_id[ i ] ) + + call bkklog( 4, i ## " Ergebnis des Updates: " ## api_single_info ) + } + + call bkklog( 4, "--------------------------------------" ) +} + + + + + + + + + + + + + + + + + + + + + + + + +proc bkklog( loglevel, message ) +{ + vars l_logdirect = "BEIDE" + vars l_logdatei = "D\:\\d3\\apps\\log.txt" + vars l_loglevel = 5 + + vars zeitstempel, loglevel_lang, d3loglevel, logmessage + + if ( loglevel == 5 ) + { + loglevel_lang = "DEBUG" + // Da die d.3 Server i.d.R. nicht im Debug-Modus laufen, erscheinen DEBUG-Meldungen nicht im Log. + d3loglevel = 9 + } + + if ( loglevel == 4 ) + { + loglevel_lang = "INFO." + d3loglevel = 6 + } + + if ( loglevel == 3 ) + { + loglevel_lang = "WARN." + d3loglevel = 6 + } + + if ( loglevel == 2 ) + { + loglevel_lang = "ERROR" + d3loglevel = 0 + } + + if ( loglevel == 1 ) + { + loglevel_lang = "FATAL" + d3loglevel = 0 + } + + if ( loglevel <= l_loglevel ) + { + + + if ( ( l_logdirect == "DATEI" ) || ( l_logdirect == "BEIDE" ) ) + { + // Ausgabe in Datei + zeitstempel = sm_sdtime( "n%4y.%0m.%0d %0h\:%0M\:%0s" ) + logmessage = zeitstempel ## " " ## loglevel_lang ## " " ## message + call api_function( "file_add_line", l_logdatei, logmessage, "APPEND" ) + } + + if ( ( l_logdirect == "D3LOG" ) || ( l_logdirect == "BEIDE" ) ) + { + // Ausgabe im d.3 Log + logmessage = loglevel_lang ## " " ## message + call api_log( d3loglevel, logmessage ) + } + } + +} \ No newline at end of file diff --git a/BKK Faber Castell/readme.txt b/BKK Faber Castell/readme.txt new file mode 100644 index 0000000..3ecef54 --- /dev/null +++ b/BKK Faber Castell/readme.txt @@ -0,0 +1,41 @@ +Es soll eine Zeichnungs-Nr. geändert werden. + + +2601 (SQL-Server-Fehlermeldung/Returncode) bedeutet Index-Verletzung: Die Zeich-Nr. existiert bereits im System. + +Kernfunktionen siehe Hook-Doku, Kapitel "Massenverarbeitung von Dokument-Metadaten". + +Logauszug: + +2018.06.15 13:00:33 INFO. ********************************************* +2018.06.15 13:00:33 INFO. * BKKFC_zeich_nr_aendern.jpl * +2018.06.15 13:00:33 INFO. * calb/d.velop AG 15.06.2018 * +2018.06.15 13:00:33 INFO. ********************************************* +2018.06.15 13:00:33 INFO. * 0.1 calb d.AG/PS 2018.06.15 Initialversion +2018.06.15 13:00:33 INFO. * DEBUG : 0 +2018.06.15 13:00:33 INFO. ********************************************* +2018.06.15 13:00:33 INFO. 1 bearbeite Doku-ID P000500991 +2018.06.15 13:00:33 INFO. 1 setze Zeichnungs-Nummer des Dokuments P000500991 auf den Wert DV-2018-00001 +2018.06.15 13:00:33 ERROR 1 Es ist ein Fehler aufgetreten, dbi_retcode: 2601 +2018.06.15 13:00:33 INFO. 1 Ergebnis des Updates: P000500991 +2018.06.15 13:00:33 INFO. -------------------------------------- +2018.06.15 13:00:33 INFO. 2 bearbeite Doku-ID P000500992 +2018.06.15 13:00:33 INFO. 2 setze Zeichnungs-Nummer des Dokuments P000500992 auf den Wert DV-2018-00010 +2018.06.15 13:00:33 INFO. 2 Die Änderung wurde durchgeführt. +2018.06.15 13:00:33 INFO. 2 Ergebnis des Updates: DV-2018-00010 +2018.06.15 13:00:33 INFO. -------------------------------------- +2018.06.15 13:00:33 INFO. 3 bearbeite Doku-ID P000500993 +2018.06.15 13:00:33 INFO. 3 setze Zeichnungs-Nummer des Dokuments P000500993 auf den Wert DV-2018-00002 +2018.06.15 13:00:33 INFO. 3 Die Änderung wurde durchgeführt. +2018.06.15 13:00:33 INFO. 3 Ergebnis des Updates: DV-2018-00002 +2018.06.15 13:00:33 INFO. -------------------------------------- +2018.06.15 13:00:33 INFO. 4 bearbeite Doku-ID P000500994 +2018.06.15 13:00:33 INFO. 4 setze Zeichnungs-Nummer des Dokuments P000500994 auf den Wert DV-2018-00003 +2018.06.15 13:00:33 INFO. 4 Die Änderung wurde durchgeführt. +2018.06.15 13:00:33 INFO. 4 Ergebnis des Updates: DV-2018-00003 +2018.06.15 13:00:33 INFO. -------------------------------------- +2018.06.15 13:00:33 INFO. 5 bearbeite Doku-ID P000500995 +2018.06.15 13:00:33 INFO. 5 setze Zeichnungs-Nummer des Dokuments P000500995 auf den Wert DV-2018-00004 +2018.06.15 13:00:33 INFO. 5 Die Änderung wurde durchgeführt. +2018.06.15 13:00:33 INFO. 5 Ergebnis des Updates: DV-2018-00004 +2018.06.15 13:00:33 INFO. -------------------------------------- \ No newline at end of file diff --git a/BuW/korrigiere_DVREC.jpl b/BuW/korrigiere_DVREC.jpl new file mode 100644 index 0000000..d616038 --- /dev/null +++ b/BuW/korrigiere_DVREC.jpl @@ -0,0 +1,227 @@ +// +// korrigiere_DVREC.jpl +// +// 2012.02.24 alch +// +// V0.1 initiale Version + +// +// Dieses Skript soll Kostenstellen nach Innenaufträge zuordnen. +// Normalerweise wird dies von einem Hook während des Imports erledigt; dieser war aber offenbar nicht in "the condition to make". :-( +// + +// +// Kunde: BuW, Fr. Luther +// + + +call korrigiere_DVREC() + +proc korrigiere_DVREC() +{ + call xlog( 4, "*******************************************************" ) + call xlog( 4, "* korrigiere_DVREC.jpl " ) + call xlog( 4, "* von Christian Albers " ) + call xlog( 4, "* (c) 2012 d.velop process Solutions GmbH " ) + call xlog( 4, "*******************************************************" ) + //call xlog( 4, "" ) + //call xlog( 4, "*******************************************************" ) + + vars DVREC[4000] + vars ergebnis + vars doku_id, P_doc_id + vars zaehler = 0 + vars v_kostenstelle, tmp_innenauftrag, v_retVal, v_changed, v_pos_counter, i, db_pos_innenauftrag + + + + + dbms declare cursor work for \ + select f.doku_id from firmen_spezifisch f, phys_datei p where f.doku_id = p.doku_id and f.kue_dokuart = 'DVREC' and p.datum_einbring > '10.01.2011' and p.datum_einbring < '02.24.2012' order by doku_id + dbms with cursor work alias doku_id + dbms WITH CURSOR work EXECUTE + + while ( @dmrowcount > 0 ) + { + zaehler = zaehler + 1 + + + + DVREC[ zaehler ] = doku_id + + dbms with cursor work continue + + } + + dbms alias + + // Jetzt stehen alle möglicherweise zu bearbeitenden Doku-IDs in DVREC[] + // + + for i = 1 while i <= zaehler step 1 + { + P_doc_id = DVREC[ i ] + db_pos_innenauftrag = "65" + + call xlog( 4, "bearbeite Zeile :i - Doku-ID : :P_doc_id " ) + call api_clear_document_context() + + // Merken, ob Attribute geaendert wurden + v_changed = 0 + + // Aktuelle Attribute ermitteln + v_retVal = api_function( "attribute_get_all", P_doc_id, "" ) + if ( v_retVal == 0 ) + { + if ( @length(db_pos_innenauftrag) == 2) + { + for v_pos_counter = 1 while ( v_pos_counter <= 100 ) step 1 + { + if ( api_doc_field_:(db_pos_innenauftrag)[v_pos_counter] != "" && api_doc_field_64[v_pos_counter] == "") + { + tmp_innenauftrag = AddiereFuehrendeNullen( api_doc_field_:(db_pos_innenauftrag)[v_pos_counter] , 12 ) + //call xlog( 4, " 5 hook_upd_attrib_exit_20_dps P_doc_id: :P_doc_id tmp_innenauftrag :tmp_innenauftrag " ) + DBMS ALIAS v_kostenstelle + DBMS SQL \ + SELECT kst \ + FROM dos_ia_kst (NOLOCK) \ + WHERE ia = :+tmp_innenauftrag + //call xlog( 4, " 6 hook_upd_attrib_exit_20_dps P_doc_id: :P_doc_id v_kostenstelle :v_kostenstelle " ) + if ( @dmrowcount > 0 ) + { + api_doc_field_64[v_pos_counter] = EntferneFuehrendeNullen( v_kostenstelle ) + call xlog( 4, "P_doc_id: :P_doc_id api_doc_field_64[ :v_pos_counter ] :api_doc_field_64[v_pos_counter] " ) + v_changed = 1 + } + else + { + //call api_log_error("Keine Kostenstelle zum Innenauftrag :tmp_innenauftrag gefunden" ) + call xlog( 2, "P_doc_id: :P_doc_id Keine Kostenstelle zum Innenauftrag :tmp_innenauftrag gefunden" ) + } + DBMS ALIAS + } + else + { + //call xlog( 4, "Kostenstelle bereits gefüllt." ) + } + } + + } + + + // Nur wenn Attribute geaendert wurden, dann alle speichern + if ( v_changed == 1 ) + { + //v_retVal = api_function( "attribute_update_all", P_doc_id, "" ) + v_retVal = 0 + if ( v_retVal != 0 ) + { + api_doc_field[70] = FormatiereGeld( api_doc_field[70] ) + + + call xlog( 3, "Noch mal (:P_doc_id) mit Betrag :api_doc_field[70]") + //v_retVal = api_function( "attribute_update_all", P_doc_id, "" ) + v_retVal = 0 + if ( v_retVal != 0 ) + { + call xlog( 2, "Dokumentattribute zu :P_doc_id konnten nicht gespeichert werden") + } + else + { + call xlog( 4, "Attribute zu :P_doc_id wurden gespeichert." ) + } + } + else + { + call xlog( 4, "Attribute zu :P_doc_id wurden gespeichert." ) + } + } + else + { + call xlog( 4, "keine Änderungen, keine Speicherungen." ) + } + } + else + { + call xlog( 2, "Dokumentattribute zu :P_doc_id konnten nicht ermittelt werden") + } + + call xlog( 4, "*******************************************************" ) + + + } + + + + call xlog( 4, "korrigiere_DVREC.jpl beendet sich ..." ) +} + + + + +global vars g_loglevel = 5 +global vars g_logdatei = "D\:\\d3\\apps\\korrigiere_DVREC\\korrigiere_DVREC.log" + +// Legt fest, wohin geloggt werden soll: DATEI => nur Datei, D3LOG => d.3 Log, BEIDE => sowohl FILE als auch D3LOG +global vars g_logdirect = "DATEI" + +// call xlog( 4, "Hello World!" ) + +proc xlog( loglevel, message ) +{ + + vars zeitstempel, loglevel_lang, d3loglevel, logmessage + + if ( loglevel == 5 ) + { + loglevel_lang = "DEBUG" + // Da die d.3 Server i.d.R. nicht im Debug-Modus laufen, erscheinen DEBUG-Meldungen nicht im Log. + d3loglevel = 9 + } + + if ( loglevel == 4 ) + { + loglevel_lang = "INFO." + d3loglevel = 6 + } + + if ( loglevel == 3 ) + { + loglevel_lang = "WARN." + d3loglevel = 6 + } + + if ( loglevel == 2 ) + { + loglevel_lang = "ERROR" + d3loglevel = 0 + } + + if ( loglevel == 1 ) + { + loglevel_lang = "FATAL" + d3loglevel = 0 + } + + if ( loglevel <= g_loglevel ) + { + + + if ( ( g_logdirect == "DATEI" ) || ( g_logdirect == "BEIDE" ) ) + { + // Ausgabe in Datei + zeitstempel = sm_sdtime( "n%4y.%0m.%0d %0h\:%0M\:%0s" ) + logmessage = zeitstempel ## " " ## loglevel_lang ## " " ## message + call api_function( "file_add_line", g_logdatei, logmessage, "APPEND" ) + } + + if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) ) + { + // Ausgabe im d.3 Log + logmessage = loglevel_lang ## " " ## message + call api_log( d3loglevel, logmessage ) + } + } + +} + diff --git a/Cramer/hook.jpl b/Cramer/hook.jpl new file mode 100644 index 0000000..1c1c300 --- /dev/null +++ b/Cramer/hook.jpl @@ -0,0 +1,87 @@ + if ( P_doctype == "D95") // Eingangslieferschein + { + vars DDF3[5000] // LiefNr + vars DDF16[5000] // Lieferant + vars DDF33[5000] // externe BelegNr + vars DDF50[5000] // Datum + vars DDF60[5000] // Charge + vars DDF61[5000] // Artikelnummer + vars DDF62[5000] // interne BelegNr + vars ergebnis + vars i // Zähler + vars anzahl // Anzahl der Treffer + + // Führende Nullen im Barcode entfernen + ergebnis = api_function( "string_cut_leading_char", dok_dat_feld[ 41 ], "0" ) + + if ( ergebnis >= 0 ) + { + // Nullen wurden aus dem Barcode entfernt + dok_dat_feld[ 41 ] = api_converted_string + + + // Ermittlung der Eigenschaftswerte aus der Datenbank + DBMS DECLARE TA_Session CONNECTION FOR USER 'informix' PASSWORD 'informix' DATASOURCE 'Firma1' + + DBMS WITH CONNECTION TA_Session ALIAS DDF3, DDF16, DDF50, DDF33, DDF62, DDF60, DDF61 + DBMS WITH CONNECTION TA_Session SQL \ + SELECT wei_liefnr, kr1_nam, wei_liefdat, wei_liefsnr, wei_bestnr, wei_charge, wei_artikel \ + FROM v2_flwein \ + WHERE wei_lbarcode = :dok_dat_feld[ 41 ] + anzahl = @dmrowcount + DBMS WITH CONNECTION TA_Session ALIAS + + + DBMS CLOSE CONNECTION TA_Session + + + if ( anzahl > 0 ) + { + // Jeder Datensatz muss vollständige Eigenschaftswerte enthalten - die DDF-Zuweisung basiert dann auf dem ersten DB-Treffer + + // LiefNr + dok_dat_feld[ 3 ] = DDF3[ 1 ] + + // Lieferant + dok_dat_feld[ 16 ] = DDF16[ 1 ] + + // interne BelegNr + // fällt weg wg. Umstellung auf Mehrfachindexfeld DDF62 + //dok_dat_feld[ 29 ] = DDF29[ 1 ] + + // externe BelegNr + dok_dat_feld[ 33 ] = DDF33[ 1 ] + + // Datum + if ( @length( DDF50[ 1 ] ) > 0 ) + { + dok_dat_feld[ 50 ] = DDF50[ 1 ]( 7, 2 ) ## "." ## DDF50[ 1 ]( 5, 2 ) ## "." ## DDF50[ 1 ]( 1, 4 ) + } + + // Charge und Artikelnummer + // CUR_60ER_FIELD_NR = 500 + for i = 1 while i <= 500 + { + // Artikelnummer und Charge müssen immer beide gefüllt sein; daher darf die folgende Abfrage ausschließlich auf der Charge basieren + if ( DDF60 != "" ) + { + dok_dat_feld_60[ i ] = DDF60[ i ] + dok_dat_feld_61[ i ] = DDF61[ i ] + dok_dat_feld_62[ i ] = DDF62[ i ] + } + else + { + dok_dat_feld_60[ i ] = "" + dok_dat_feld_61[ i ] = "" + dok_dat_feld_62[ i ] = "" + } + + } + } + + } + else + { + call api_log_error( "Es ist ein Fehler beim Entfernen der führenden Nullen aus dem Barcode aufgetreten. RC:" ## ergebnis ) + } + } \ No newline at end of file