Prozedur P_SUCHANFANG

Allgemeine Diskussionen um die ERP Software AvERP

Moderator: SYNERPY

Antworten
va
Beiträge: 21
Registriert: Mi Sep 03, 2008 5:35 pm

Prozedur P_SUCHANFANG

Beitrag von va »

Hallo!

Der Nummerkreis der Tabelle BAUF hat sich bei uns von 4 auf 5 Stellen geändert (von 9999 auf nächste Nummer 10000).

Die Prozedur P_Suchanfang für diese Tabelle zeigt jedoch weiterhin nur die letzten 200 Datensätze bis Maskenkey 9999 an.

Kann ich das auf die neue Situation anpassen - wenn ja wie?

Vielen Dank.

va
Software-Version 4.2.5.106
GDB-Version AvERP2013.05
NPLADMIN
Beiträge: 163
Registriert: Di Okt 07, 2008 7:54 am
Wohnort: Oxbüll / Wees

Beitrag von NPLADMIN »

Nur zum Verständnis:

- Nummernkreis für BAUF in BNUM angepasst
- Angezeigt Suchbedingung >='200.Auftragsnummer'

zeigt die um eine Stelle erweiterte Nummer(@00000 statt @0000) bei mir mit an.

Wie sieht denn die Formel aus, was wurde angepasst und ist die Hinterlegung bei BAUF oder BAUF.B oder BAUF.A?
Gruß
KTS

AvERP-Exe: 4.2.1.6
Datenbank: AvERP2009-A.01
_________________________
Suchen heißt finden und je mehr man sucht um so mehr findet man. ;-)
va
Beiträge: 21
Registriert: Mi Sep 03, 2008 5:35 pm

Beitrag von va »

Hallo NPLADMIN.

Ich habe die Nummernkreise für BAUF und BAUF.A bereits auf 5 Stellen erweitert - neue Aufträge werden somit auch richtig hochgezählt nur die Prozedur selektiert nur bis 9999.

Der Code sieht bei mir so aus:

BEGIN
/* letzter Stand: 18.11.2002 HB */
/* Protokollieren, das Aktion hier durchgelaufen ist */
IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_SUCHANFANG_BAUF');

/* Gibt kleinsten Feldinhalt wieder für Grundsuche */
MEINZEICHEN = '@++@';
IF (ANZAHL IS NULL) THEN ANZAHL = 200;
WHEREBEDINGUNG = 'MASKENKEY >= ';
MASKENKEY = '';
I = 0;
FOR SELECT MASKENKEY
FROM BAUF
ORDER BY MASKENKEY DESC
INTO :MASKENKEY
DO
BEGIN
I = I + 1;
IF (I >= ANZAHL) THEN
BEGIN
WHEREBEDINGUNG = WHEREBEDINGUNG || MEINZEICHEN || MASKENKEY || MEINZEICHEN;
SUSPEND;
EXIT;
END
END
IF (I < ANZAHL) THEN
WHEREBEDINGUNG = WHEREBEDINGUNG || MEINZEICHEN || MASKENKEY || MEINZEICHEN;
SUSPEND;
END

Die angezeigte Suchbedingung in der Maske BAUF im Feld MASKENKEY
lautet: >= '9801'

Gruß

va
Software-Version 4.2.5.106
GDB-Version AvERP2013.05
NPLADMIN
Beiträge: 163
Registriert: Di Okt 07, 2008 7:54 am
Wohnort: Oxbüll / Wees

Beitrag von NPLADMIN »

Da liegt das Problem.
Ich poste mal unseren Code, habe den 2009er etwas erweitert mit 2010er Komponenten.
In der Version2008 kann ich derzeit nicht testen, da nicht installiert.
Testen Sie die Variante mal in einer Testumgebung.

Code: Alles auswählen

BEGIN
  -- Letzter Stand 07.04.2010 11:10:04 GK 
  -- Protokollieren, dass Aktion hier durchgelaufen ist 
  IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
    INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_SUCHANFANG');

  -- Suchvorbelegung des MASKENKEY-Felds erstellen
     Gibt kleinsten Feldinhalt wieder für Grundsuche 

  MEINZEICHEN = '@++@';
  IF (ANZAHL IS NULL) THEN ANZAHL = 200;
  WHEREBEDINGUNG = 'MASKENKEY >= ';
  MASKENKEY = '';
  SBAUFWHERE = '';
  I = 0;

  -- Wenn View, dann Tabelle daraus machen
  IF (F_LEFT(TABELLE, 2) = 'V_') THEN
  BEGIN
    IF (TABELLE = 'V_BAUF_A_') THEN
      SBAUFWHERE = ' AND AUFTRAG = ' || '''' || 'N' || '''';
    ELSE
    IF (TABELLE = 'V_BAUF_B_') THEN
      SBAUFWHERE = ' AND AUFTRAG = ' || '''' || 'J' || '''';

    TABELLE = F_RIGHT(TABELLE, F_STRINGLENGTH(TABELLE) - 2);
    TABELLE = F_REPLACESTRING(TABELLE, 'BAUF_A_', 'BAUF',1,1);    
    TABELLE = F_REPLACESTRING(TABELLE, 'BAUF_B_', 'BAUF',1,1);     

    IF ((TABELLE = 'BFAINFO') OR (TABELLE = 'BFAAUFG'))  THEN
      TABELLE = 'BFA';
  END

  EXECUTE PROCEDURE P_BMAND_CHECK RETURNING_VALUES (:BMAND_ID);

  -- Suchanfangsexklusionen durchlaufen und zusammenbauen
  MKEY_ANFANG = '';
  MKEY_ANFANG_MASKE = '';
  FOR SELECT A.SUCHANFANG
  FROM A_TABELLEN_SUCHANF A, A_TABELLEN B
  WHERE B.MASKENKEY = :TABELLE AND
        A.BMAND_ID = :BMAND_ID AND
        A.A_TABELLEN_ID_LINKKEY = B.ID
  INTO :A_SUCHANF
  DO
  BEGIN
    A_SUCHANF = F_LRTRIM (A_SUCHANF);
    -- Prüfen, dass String nicht zu lange wird
    IF (F_STRINGLENGTH4(MKEY_ANFANG) < 920) THEN
    BEGIN
      MKEY_ANFANG = MKEY_ANFANG || ' AND MASKENKEY NOT STARTING WITH (''' || :A_SUCHANF || ''') ';
      MKEY_ANFANG_MASKE = MKEY_ANFANG_MASKE || ' AND V_' || :TABELLE ||  '.MASKENKEY NOT STARTING WITH (''' || :A_SUCHANF || ''') ';
    END
  END

  -- Suchstring für die Input-Tabelle zusammenbauen
  IF (TABELLE IN ('BSA8D')) THEN
    MyQUERY = 'SELECT MASKENKEY ' ||
              'FROM ' || TABELLE || ' ' ||
              'ORDER BY MASKENKEY DESC';
  ELSE
    MyQUERY = 'SELECT MASKENKEY ' ||
              'FROM ' || TABELLE || ' ' ||
              'WHERE ((BMAND_ID = ' || CAST(BMAND_ID AS VARCHAR(16)) || ') OR  (BMAND_ID IS NULL)) ' ||
              '      ' || MKEY_ANFANG || ' ' ||
              '      ' || SBAUFWHERE || ' ' ||
              'ORDER BY MASKENKEY DESC';

  -- Tabelle bis zum n-ten Datensatz durchlaufen
  FOR EXECUTE STATEMENT MyQUERY
  INTO :MASKENKEY
  DO
  BEGIN
    I = I + 1;
    -- Wenn Anzahl erreicht wurde, dann abbrechen
    IF (I >= ANZAHL) THEN
    BEGIN
      IF (MKEY_ANFANG_MASKE = '') THEN
        WHEREBEDINGUNG = WHEREBEDINGUNG || MEINZEICHEN || MASKENKEY || MEINZEICHEN;
      ELSE
        WHEREBEDINGUNG = 'MASKENKEY BETWEEN ''0'' AND ''Z'' AND '|| WHEREBEDINGUNG || MEINZEICHEN || MASKENKEY || MEINZEICHEN || MKEY_ANFANG_MASKE;

      SUSPEND;
      EXIT;
    END
  END

  -- Suchbedingung ausgeben, wenn weniger als n Datensätze in der Tabelle sind
  IF (MKEY_ANFANG_MASKE = '') THEN
    WHEREBEDINGUNG = WHEREBEDINGUNG || MEINZEICHEN || MASKENKEY || MEINZEICHEN;
  ELSE
    WHEREBEDINGUNG = 'MASKENKEY BETWEEN ''0'' AND ''Z'' AND '|| WHEREBEDINGUNG || MEINZEICHEN || MASKENKEY || MEINZEICHEN || MKEY_ANFANG_MASKE;

  SUSPEND;
END
Gruß
KTS

AvERP-Exe: 4.2.1.6
Datenbank: AvERP2009-A.01
_________________________
Suchen heißt finden und je mehr man sucht um so mehr findet man. ;-)
va
Beiträge: 21
Registriert: Mi Sep 03, 2008 5:35 pm

Beitrag von va »

Hallo NPLADMIN.

Danke für Unterstützung. Funktioniert bei unserer Version leider nicht 1:1. Für eine Anpassung fehlen mir dann doch die Programmierkenntnisse.

Habs jetzt erstmal so hingebogen:

- Prozedur aus der GrundsuchSQL entfernt
- Query q_1 ergänzt -> ORDER BY ID DESC

Die Maske lädt dann eben alle Datensätze.

Falls jemand noch einen Lösungsansatz hat - gerne.

Gruß

va
Software-Version 4.2.5.106
GDB-Version AvERP2013.05
NPLADMIN
Beiträge: 163
Registriert: Di Okt 07, 2008 7:54 am
Wohnort: Oxbüll / Wees

Beitrag von NPLADMIN »

Guten Morgen va,

entschuldigen Sie bitte, hatte ganz vergessen das es in der 2008er
noch keine getrennte Angebots - und Auftragsverwaltung gab.
Hab mal unsere alte 2008er rausgekramt und den Nummernkreis um eine Stelle erweitert.
Das System ruft mir die letzten 200 inkl. der neuen längeren Nummer auf.

Änderungen hatte ich damals dort nicht vorgenommen.
Daher fehlt mir momentan auch der Ansatz woran es liegen könnte.
Vielleicht hat ein "SYN" ne Idee.
Gruß
KTS

AvERP-Exe: 4.2.1.6
Datenbank: AvERP2009-A.01
_________________________
Suchen heißt finden und je mehr man sucht um so mehr findet man. ;-)
Antworten