[Gelöst] mehrere Mandanten prüfen

19. März 2007 15:37

Hallo wieder,
nachdem es für mich zwar noch immer mit der gleichen Aufgabe ist8 wie das Problem im Thema Artikeltabelle Datensatz hinzufügen),
habe ich mich dennoch entschieden, es hier in einem eigenen Thema zu posten, da es meines Denkes ein anderes Problem ist.

Ich möchte einen Artikel in mehrere Mandanten suchen:
Ich habe dies mal versucht:

Code:
Mandant.INIT;
Mandant.SETFILTER(Name,'<> %1',COMPANYNAME);

Mandant.SETRANGE("Unabhängiger Mandant", FALSE);

IF Mandant.FIND('-') THEN
  REPEAT
  //MESSAGE (Mandant.Name);
    MandantenArtikel.CHANGECOMPANY(Mandant.Name);
    MESSAGE(COMPANYNAME + ' ' +  Mandant.Name);

    IF  MandantenArtikel.GET(HW_Artikel.Artikelnr) = TRUE THEN
      HW_Artikel.VALIDATE(HW_Artikel.markiert, FALSE);
      ERROR('Datensatz ' + HW_Artikel.Artikelnr + ' existiert bereits in %1!',Mandant.Name);
  UNTIL Mandant.NEXT = 0;


Hier noch die Infos mit den Records:
Name DataType Subtype Length
MandantenArtikel Record Artikel
Mandant Record Mandant


Leider haut dies noch nicht wirklich hin. Er sagt zbsp. immer das der zu überprüfende Artikel immer im ersten Mandanten schon vorhanden ist, dabei ist das nicht war.

Bin ich da am falschen Weg?

Danke

lg. Andreas
Zuletzt geändert von NAV_Lehrling am 20. März 2007 12:04, insgesamt 1-mal geändert.

19. März 2007 16:06

Du filterst hier lediglich auf die Tabelle, die die vorhandenen Mandanten enthält. Damit du aber effektiv auf eine Tabelle eines anderen Mandanten zugreifen kannst, musst du den Befehl CHANGECOMANY verwenden (siehe online-Hilfe)

Ich würde mit einer Schleife über die Tabelle Mandanten laufen und jedesmal für die Item-Tabelle CHANGECOMPANY ausführen. Dann hast du jeweils die Artikel des gerade gewählten Mandanten im Zugriff.

Achtung: zwei Sachen gibt es zu beachten. CHANGECOMPANY gilt nur für jene Tabelle, auf welcher du sie ausführst. Und am Schluss der Verarbeitung musst du die Tabelle auf den ursrprünglichen Mandanten zurücksezten.

19. März 2007 16:19

Danke erstmals für deine Antwort,

Aber ist das hier nicht so?
IF Mandant.FIND('-') THEN
REPEAT
MandantenArtikel.CHANGECOMPANY(Mandant.Name);
MESSAGE(COMPANYNAME + ' ' + Mandant.Name);

IF MandantenArtikel.GET(HW_Artikel.Artikelnr) = TRUE THEN
HW_Artikel.VALIDATE(HW_Artikel.markiert, FALSE);
ERROR('Datensatz ' + HW_Artikel.Artikelnr + ' existiert bereits in %1!',Mandant.Name);
UNTIL Mandant.NEXT = 0;

oder muss ich es anders schreiben?
Und rücksetzen sag ich dann einfach: Mandanten.Name := Companyname?

Danke

Re: mehrere Mandanten prüfen

19. März 2007 16:25

Hi Andreas,

NAV_Lehrling hat geschrieben:
Code:
Mandant.SETFILTER(Name,'<> %1',COMPANYNAME);


Das Leerzeichen ist doch überflüssig, oder? Ich würde es so schreiben:

Code:
Mandant.SETFILTER(Name,'<>%1',COMPANYNAME);


Gruß, Marc

Re: mehrere Mandanten prüfen

19. März 2007 16:29

NAV_Lehrling hat geschrieben:Er sagt zbsp. immer das der zu überprüfende Artikel immer im ersten Mandanten schon vorhanden ist, dabei ist das nicht war.


Das die ERROR-Meldung immer kommt, liegt daran, weil diese nicht innerhalb der IF-Abfrage steht. Ich denke, dass der Code so aussehen müsste:

Code:
...
IF  MandantenArtikel.GET(HW_Artikel.Artikelnr) = TRUE THEN BEGIN
  HW_Artikel.VALIDATE(HW_Artikel.markiert, FALSE);
  ERROR('Datensatz ' + HW_Artikel.Artikelnr + ' existiert bereits in %1!',Mandant.Name);
END;


Also mit BEGIN und END.

Gruß, Marc

19. März 2007 16:59

OOps, Danke.
War das Problem ja, dass es nicht in IF Schleife war..
*schäm* :oops:

Muss ich noch noch die Tabelle zurücksetzen? Wenn ja so ok:
CHANGECOMPANY (COMPANYNAME); ??

Danke
Bin noch leichter Anfänger wie zu sehen ist.. :-?

19. März 2007 17:15

NAV_Lehrling hat geschrieben:Muss ich noch noch die Tabelle zurücksetzen? Wenn ja so ok:
CHANGECOMPANY (COMPANYNAME); ??

Meiner Meinung nach nicht. Wüsste nicht wofür das gut sein soll.

Gruß, Marc

19. März 2007 18:17

Danke

19. März 2007 19:22

NAV_Lehrling hat geschrieben:Aber ist das hier nicht so?
IF Mandant.FIND('-') THEN
REPEAT
MandantenArtikel.CHANGECOMPANY(Mandant.Name);


Ja, da habe ich in der Eile etwas überlesen, entschuldige. :oops:

20. März 2007 12:03

Danke trotzdem, kein Problem..:)

lg. Andreas