Buch Dienstleistungen Downloads Diverses Forum Impressum

nicht-UND Verknüpfung von Selektionskriterien

Diskussionen zur SapQuery

nicht-UND Verknüpfung von Selektionskriterien

Beitragvon kiem » 05.01.2005, 09:09

Nachdem ich mich nun seit etwa einem Jahr mit SAP-Query rumquäle, bin ich auf Ihr Buch gestossen. Schön ist, das vieles "offiziell" auch so gemacht wird, wie ich das herausgefunden habe :). Dennoch konnte ich aber von dem einen oder anderen Tipp provitieren. Schade finde ich etwas, dass auf die ABAP-Ergänzungen und die Datenbeschaffungsprogramme nicht etwas ausführlicher eingegangen wird. - Ich arbeite mich nun aber gerade durch das empfohlene ABAP Übungsbuch :roll: .
Nun aber zu meinem Problem:
Konkret geht es darum, dass ich zu Fehlteilen den zuständigen Montageleiter anzeigen möchte. Gibt es keinen soll der Sachbearbeiter aufgeführt werden.
Falls es also bei den Partnerrollen (Tab VBPA) ein "Z2" (Montageleiter) gibt dann zeige mir diesen, gibt es keinen dann zeige den "Z1" (Sachbearbeiter - immer vorhanden). Bis jetzt krieg ich doppelte Einträge da normal UND verknüpft. Jetzt bräuchte ich eine nicht-UND Verknüpfung. Keine Ahnung wie das geht, bin aber (fast) überzeugt, das es geht. Irgendwie erhoffe ich mir etwas von einem modifizierten Listing 7-1 s.180.
Für Denkanstösse danke ich schon im Voraus.
Gruss
Emanuel Kissling
kiem
 
Beiträge: 9
Registriert: 05.01.2005, 08:04
Wohnort: Bronschhofen

nicht-UND Verknüpfung von Selektionskriterien

Google Werbung

Google Werbung
 

Re: nicht-UND Verknüpfung von Selektionskriterien

Beitragvon NicoManicone » 08.01.2005, 23:36

Hallo,

Nachdem ich mich nun seit etwa einem Jahr mit SAP-Query rumquäle


Willkommen im Club! :twisted:

Schade finde ich etwas, dass auf die ABAP-Ergänzungen und die Datenbeschaffungsprogramme nicht etwas ausführlicher eingegangen wird.


Analog zu einem Werkzeugkasten, in dem Hammer, Schaubenzieher ... liegen, bevorzuge ich spezialisierte Bücher. Also lieber zwei Bücher als das Eierlegende Wollmichschwein.
Falls Sie in ABAP einsteigen wollen, sind Übungen sowie eine Besprechung der ABAP Workbench notwendig. Dies didatisch sinnvoll in 50 Seiten abzuhandeln halte ich für unmöglich.
Ein kleines ABAP-Zusatzkapitel hätte nur den Inhalt aufgebläht (und den Preis), würde dem Leser aber wenig bringen.

...Konkret geht es darum, dass ich zu Fehlteilen den zuständigen Montageleiter anzeigen möchte. Gibt es keinen soll der Sachbearbeiter aufgeführt werden.
Falls es also bei den Partnerrollen (Tab VBPA) ein "Z2" (Montageleiter) gibt dann zeige mir diesen, gibt es keinen dann zeige den "Z1" (Sachbearbeiter - immer vorhanden).

Sie wollen Datensätze aus der Tabelle VBPA selektieren, bei denen im Feld PARVW entweder Z2 oder falls nicht alternativ Z1 steht?
Bis jetzt krieg ich doppelte Einträge da normal UND verknüpft. Jetzt bräuchte ich eine nicht-UND Verknüpfung.


Wenn ich Ihr Problem richtig verstehe, dann hier ein Lösungsvorschlag:

Schreiben Sie ein Datenbeschaffungsprogramm. Führen Sie einen select mit VBPA-PARVW='Z2' (sowie den Rest des Primärschlüssels) durch. Falls ein Datensatz gefunden wurde, append in die Interne Liste. Falls nicht, dann select mit VBPA-PARVW='Z1' und append.

Der SELECT-OPTIONS auf Seite 180 hilft Ihnen nicht weiter.

Grüße,
Nico Manicone.
NicoManicone
Administrator
 
Beiträge: 99
Registriert: 29.05.2004, 20:06

Re: nicht-UND Verknüpfung von Selektionskriterien

Beitragvon kiem » 11.01.2005, 08:04

Besten Dank für die Antwort - das ist es was ich befürchtet habe :(.
Da das Query aus einem Join mit sechs Tabellen besteht, glaub ich wird das DVP etwas aufwendiger. Werde mich etwas intensiver mit ABAP befassen, und dann nochmals einen Anlauf nehmen.
Zwei Fragen hab ich aber jetzt schon:
1. Geschieht die Überprüfung, ob ein Datensatz gefunden wurde mit Systemfeld SY-SUBRC <> 0?
2. Ist der Ansatz, den Quellcode des bestehenden Querys als Basis für das DVP zu nehmen schlau, oder sind da so viele Anpassungen nötig, dass man besser von Null beginnt? Funktioniert das überhaupt?

Gruss
Emanuel Kissling

P.S. Die Argumentation mit den spezialisierten Büchern, kann ich durchaus nachvollziehen. Nur wünscht man sich halt immer genau das was man gerade braucht - 1:1 aufgeschrieben und pfannenfertig :) :). Aber wie heisst es so schön: Wünschen darf man immer und alles. Aber wenn man es dann bekommen würde, wäre einem danach nur langweilig... :)
kiem
 
Beiträge: 9
Registriert: 05.01.2005, 08:04
Wohnort: Bronschhofen

nicht-UND Verknüpfung für Normalanwender

Beitragvon Klaus » 21.01.2005, 10:15

Hallo,
Sie haben es offenbar gut, da Sie sich mit der Datenversorgung quälen 'dürfen'. Dem Normalanwender steht diese Option i.d.R. nicht zur Verfügung. Aber auch dann kämpft man teils mit solchen Problemen.

Ich würde in diesem Fall die Partnertabelle 2mal über Alias einbinden und auf die jeweilige Partnerrolle abgrenzen. Ggf. über Left-Outer, falls eine Rolle nicht immer verfügbar. In der Query selbst hätte ich dann je ein Feld pro Datensatz (und nicht zwei Datensätze) für den Montageleiter und für den Sachbearbeiter. Wenn nicht beide interessieren, würde ich ein lokales Zusatzfeld definieren, dass nach der Logik funktioniert: ist Feld Montageleiter <> '', dann nimm Montageleiter - ansonsten nimm Sachbearbeiter.

Ist sicher nicht die eleganteste Lösung, dürfte aber auch zum gewünschten Ergebnis führen. Alternativ könnte man die Daten auch per RFC abholen und dann die Freiheiten von VBA ausleben. 8)

Grüsse
Klaus
Klaus
 
Beiträge: 10
Registriert: 14.10.2004, 08:51

Beitragvon kiem » 24.01.2005, 08:42

Hallo
diese Idee hatte ich auch schon und habe es auch probiert. Funktioniert aber leider nicht. Das Problem ist meinen Überlegungen nach folgendes:
In der Tabelle VBPA gibt es lediglich einen Datensatz mit der Partnerrolle, wenn eine solche definiert worden ist. D.h. wenn kein Montageleiter (Z2) eingegeben wurde, gibt es keinen Datensatz mit Z2 und dem Feld Personalnummer 000 oder leer. Folglich kann ich da auch nix finden.
Versuche, erst alle Sachbearbeiter (Z1) zu suchen und dann in der Alias-Tabelle die Z2 scheiterten daran, weil dann ein Right-Outer nötig wäre den es bekanntlich nicht gibt. Das auf Seite 24 beschriebene Vertauschen der Tabellen ist bei sechs Tabellen nicht mehr ganz so einfach. Ich habe das in einem anderen Query probiert und dieses wurde durch die Umstellung sehr, sehr langsam. Evtl. hab ich da ja auch etwas falsch verstanden.
Bin nun mit ABAP dran - das Schreiben in die int. Tab will aber noch nicht so recht klappen. Hat wahrscheinlich mit der selbstdefinierten Tab zu tun. Brachte das Beispiel-DVP aus dem Buch schon nicht zum Funktionieren.
Naja Ausdauer ist gefragt...

Gruss Emanuel
Gruss
Emanuel Kissling
kiem
 
Beiträge: 9
Registriert: 05.01.2005, 08:04
Wohnort: Bronschhofen

Beitragvon Klaus » 24.01.2005, 08:50

Hallo,
hängt natürlich immer von der Situation ab, welche Datenlage man hat. So ist das eben bei Standardsoftware. :wink:
Viel Erfolg aber beim ABAP. Da kann ich leider nichts zu sagen.
Grüsse
Klaus
Klaus
 
Beiträge: 10
Registriert: 14.10.2004, 08:51

Beitragvon kiem » 21.02.2005, 09:16

Hallo
hab seit einiger Zeit eine Lösung gefunden und möchte sie Euch nicht vorenthalten - vielleicht nutzt sie dem einen oder anderen.
Zu meiner Überraschung funktioniert es auch ohne DVP - jedoch nicht ohne ABAP.

Als erstes defniert man im Coding unter "1 DATA" eine Alias-Tabelle:

tables *vbpa.
* *vbpa ist Alias-Tab von vbpa

Dann definiert man unter "Zusätze" ein Zusatzfeld. In Meinem Fall pernr.
Im Coding zu diesem Feld schreibt man dann folgendes rein:

clear : pernr.
*
SELECT * FROM *VBPA CLIENT SPECIFIED
WHERE MANDT = sy-mandt
AND VBELN = vbap-vbeln
AND POSNR = '000000'.

if sy-subrc eq 0 and *vbpa-parvw eq 'Z1'.
move *vbpa-pernr to pernr.
move *vbpa-parvw to pernr+8(2).
endif.
*
if sy-subrc eq 0 and *vbpa-parvw eq 'Z2'.
move *vbpa-pernr to pernr.
move *vbpa-parvw to pernr+8(2).
exit.
endif.
*
ENDSELECT.

Die Idee ist ziemlich simpel. Erst soll er das Feld pernr mit Personennummer und Partnerrolle Z1 füllen (gibt es ja immer) und dann noch nach Z2 suchen und wenn es das gibt, soll er den Z1 wieder überschreiben.
Darauf bin ich natürlich nicht selber gekommen - den Tipp hab ich von einem SAP-Berater bekommen;-) Nur um mich nicht fremden Federn zu schmücken...
Gruss
Emanuel Kissling
kiem
 
Beiträge: 9
Registriert: 05.01.2005, 08:04
Wohnort: Bronschhofen

Beitragvon NicoManicone » 04.03.2005, 15:16

Hallo,

war leider die letzten Tage etwas "busy".

kiem hat geschrieben:hab seit einiger Zeit eine Lösung gefunden und möchte sie Euch nicht vorenthalten - vielleicht nutzt sie dem einen oder anderen.

Freue mich über jedes interessante Posting.:)
Im Coding zu diesem Feld schreibt man dann folgendes rein:

clear : pernr.
*
SELECT * FROM *VBPA CLIENT SPECIFIED
....

Welcher ABAP Zeitpunkt ist das?

Grüße,
Nico.
NicoManicone
Administrator
 
Beiträge: 99
Registriert: 29.05.2004, 20:06

Beitragvon kiem » 21.03.2005, 08:30

Tut mir leid, dass das so lange gedauert hat. War wieder einmal in den Ferien ;-)
Also wenn man unter "Zusätze" auf den Coding-Button drückt, wird das Codingfenster mit dem Codingabschnitt "10 Zusatzfeld/-struktur" geöffnet. Da hab ich's dann auch reingeklopft.
In der SE38 erscheint dann das Coding nach den Select single Anweisungen.
Hoffe damit gedient zu haben.
Gruss
Emanuel
Gruss
Emanuel Kissling
kiem
 
Beiträge: 9
Registriert: 05.01.2005, 08:04
Wohnort: Bronschhofen


Zurück zu SapQuery

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron