ArtikelNr. - ZeichnungsNr.

Allgemeine Diskussionen um die ERP Software AvERP

Moderator: SYNERPY

Antworten
rheotest
Beiträge: 56
Registriert: Mo Mai 23, 2005 9:44 am
Wohnort: Ottendorf-Okrilla

ArtikelNr. - ZeichnungsNr.

Beitrag von rheotest »

Hallo,

Ich habe für die Artikel.Nr. die sprechende Form gewählt z.B.
BG-ZeichnungNr. oder KT-laufendeNr usw. Nun möchte ich aus der ArtikelNr. nur den Teil ZeichnungsNr. in das Feld Zeichnungs.Nr. übertragen.
Unsere Zeichnungsnr hat folgende Struktur 1111.2.33333
Wie kann man das ohne größeren Aufwand tun? und kann man im gleichem Atemzug diese Artikel.Nr. ändern in BG-laufendeNr. wobei die laufendeNr 6-stellig sein soll und hochgezählt wird.
Weil das umfangreich ist, sollte ein Skript erstellt werden. Mit welchem Programm kann man das tun und testen?

Wie man erkennt, habe ich wenig Ahnung zur Programmierung der Datenbank. Vielleicht hilft trotzdem jemand.

Danke

Harry
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Immer mit dem IBExpert arbeiten.

Aus Ihrem Post geht nicht so wirklich hervor, welchen Teil der Artikelnummer die Zeichnungsnummer bildet.

In den Triggern des Artikelstamms (BSA_BI2 bzw. BSA_BU0) könnten Sie beispielsweise eine Zeile

Code: Alles auswählen

  NEW.ZEICHNR = F_LEFT(NEW.MASKENKEY, 5);
bzw.

Code: Alles auswählen

  NEW.ZEICHNR = F_RIGHT(NEW.MASKENKEY, 5);
einfügen. Die "5" gibt die Anzahl der Stellen der Artikelnummer an, die die Zeichnungsnummer von rechts bzw. links gelesen ergibt (F_LEFT('123456789', 5) bringt daher '12345' als Ergebnis).

Ich würde das unter die Zeile

Code: Alles auswählen

    IF (NEW.AKTIV_JN = 'A') THEN
      NEW.BESTELLEN = :sNEIN;
schreiben.

Für das Generieren der Artikelnummer können Sie eine Warengruppe "BG" und eine Warengruppe "KT" anlegen und dann anhand dieser in den Nummernkreisen die entsprechende automatische Generierung einstellen (Direktaufruf: BNUM).

Noch eine kleine Anmerkung: Derart sprechende Artikelnummern sind übrigens nicht die beste Idee. Entscheidet man sich nach einer Zeit einen Artikel nicht mehr einzukaufen, sondern zu fertigen bzw. umgekehrt, dann läuft man in ein Problem...
rheotest
Beiträge: 56
Registriert: Mo Mai 23, 2005 9:44 am
Wohnort: Ottendorf-Okrilla

Beitrag von rheotest »

Das Handling ist mir nicht geläufig. Ich dachte eher an einen anderen Weg mit UPDATE für den bereits eingegebenen Artikelstamm. Eventuell auch in mehreren Teilschritten.

ZAHL AS INTEGER
NEUEZAHL AS STRING
ZAHL = 0

UPDATE BSA
SET ZEICHNR = RIGHT(TRIM(MASKENKEY),11)
NEUEZAHL = STRING(6 - LEN(CSTR(ZAHL)),"0") & ZAHL
SET MASKENKEY = LEFT(MASKENKEY,3) & NEUEZAHL
ZAHL = ZAHL + 1

WHERE LEFT(MASKENKEY,3) = "BG-"

Wenn das funktionieren könnte, wo und wie wird das umgesetzt?

Viele Grüße Harry
noswall
Beiträge: 62
Registriert: Sa Dez 03, 2005 11:04 am

Beitrag von noswall »

Mal eine andere Frage: geht das auch dynamisch? Das heißt: wenn man das Feld MASKENKEY im Artikelstamm verlässt soll die Zeichnungsnummer sofort übernommen werden, und nicht erst nach dem Speichern des Datensatzes.
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Das geht natürlich auch. Hier muss man im OnExit des Felds MASKENKEY den entsprechenden Eintrag machen.
rheotest
Beiträge: 56
Registriert: Mo Mai 23, 2005 9:44 am
Wohnort: Ottendorf-Okrilla

Beitrag von rheotest »

ich habe begonnen mich eingehender mit IBExpert zu beschäftigen, habe aber keine Möglichkeiten gefunden mit einem Update-Befehl Teile eines Feldeintrages >SubString(Maskenkey,4,11)< in ein anderes Feld zu übertragen. Wie formuliert man den Befehl, so dass es funktioniert?

Update BSA
Set ZEICHNR=Substring(MASKENKEY,4,11)
Where
MASKENKEY like 'R_-%'

wenn das nicht geht, wie kann ich in einem mit select ausgewälten Feld die ersten 3 Zeichen ändern(löschen)?

oder wie kann ich in IBExpert eine angelegte Tabelle auslesen, extern mit einem anderen Programm ändern und wieder einlesen?

Danke für die Tipps

Harry
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

Hier mal ein Vorschlag:

Code: Alles auswählen

UPDATE BSA A
SET A.ZEICHNR = F_MID(A.MASKENKEY,4,11)
WHERE A.MASKENKEY STARTING 'R_-'
Wenn Du es für Neuanlagen im Trigger machen willst würde ich den AFTER INSERT vorschlagen und hier folgenden Code einfügen

Code: Alles auswählen

NEW.ZEICHNR = F_MID(NEW.MASKENKEY,4,11)
Gruß
Michael
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Im AFTER-Trigger können keine NEW-Werte verändert werden.
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

Dann halt im Before Insert :oops: ... allerdings muß das dann definitiv hinter der Erzeugung des Maskenkey's stehen und der wird bei BSA ja nicht im Trigger sondern in der Maske erzeugt. Also doch in die Maske programmieren ...
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Ist doch egal, ob der Maskenkey im Trigger oder in der Maske besetzt wird. Die Zeichnungsnummer kann so oder so im Trigger gesetzt werden. Der Nachteil, wenn man das in der Maske macht, ist, dass ein Benutzer dann noch die Zeichnungsnummer verändern kann. Das ist hier nicht erlaubt, glaube ich.
Antworten