Anpassung der Suchfunktion auf Zeilenebene in Belegen
Meike Schlenker
Hallo zusammen,wenn man einen neuen Beleg hinzufügt, muss man zuerst den GP auswählen. Danach wird die Zeilenebene erst freigeschaltet - jedoch nur für ArtikelNr und Artikelbezeichnung.
Wir haben für jeden Artikel eine eigene Herstellernummer als UDF. Diese wird in den Stammdaten gepflegt.
Nun möchten wir aber nicht nach der ArtikelNr/Bezeichnung suchen, sondern nach der Herstellernummer.
Leider sind alle Felder außer den genannten gesperrrt, solange kein Artikel ausgewählt wurde.
Gibt es eine Möglichkeit dies zu ändern?
Gruß Meike
Manuel Marhold
Hi Meike,UDF's sind freigeschaltet, wenn das hilft.
sonst: formatierte Suche auf das Feld "Artikelnr.", eure HerstellerNummer eingeben, SCHIFT+F2 drücken, Query der FMS suchtnach den Artikelnummern (evtl. noch Text, falls mehrere gefunden werden, dann wird ein Fenster mit der Liste angezeigt) und dann wird die Artikelnr. (sofern diese in der Query als 1. Feld angegeben ist) in das Feld eingefügt.
Meike Schlenker
Hallo Manuel,vielen Dank für deine Hilfe. Folgende Abfrage habe ich für sie FS ersteltl:
SELECT T0.[ItemCode], T0.[U_manufacturer_id] FROM OITM T0 WHERE T0.[U_manufacturer_id] LIKE '%[%manid]%'
Jedoch öffnet er jedes Mal die Parameterangabe. Kann man das irgendwie umgehen?
Gruß
Meike
Manuel Marhold
Hi Meike,ja, anstatt [%manid] musst du $[$38.1] nehmen.
das ist Item 38 (matrix "Artikel") und Spalte "1" (Artikelnr)
Meike Schlenker
Hi Manuel,das hatte ich schon probiert. Wenn ich WHERE T0.[U_manufacturer_id] LIKE $[$38.1] nehme, dann passiert nichts, wenn ich die FS ausführe.
Wenn ich LIKE '%$[$38.1]%' nehme, dann findet er keine Ergebnisse (weil er den Teil als String ansieht).
Hab ich was vergessen?
Manuel Marhold
Hi Meike,versuche mal:
'%$[$38.1.STRING]%'
'*' anstatt '%'
Meike Schlenker
Hi Manuel,dabei bekomme ich immer eine Fehlermeldung: 'Interner Fehler (8180)'.
Noch eine andere Idee?
Gruß Meike
Manuel Marhold
Hi Meike,bei welcher Query?
hast du beides probiert? also mit '*' und mit '%' ?
Meike Schlenker
Ja, hab beides probiert:LIKE '*$[$38.1.STRING]*'
LIKE '%$[$38.1.STRING]%'
Bekomme bei beiden eine Fehlermeldung.
Manuel Marhold
Hi Meike,dann teste mal dies:
SELECT $[$38.1.STRING]
Meike Schlenker
Wenn ich einfach nur ein Select auf das Feld mache $[$38.1.STRING] und die FS ausführe, dann schreibt er mir den eingegebenen Inhalt in das Feld.Wenn ich in meiner oben genannten Abfrage das Like rausnehme und anstatt dessen ein = verwende, dann funktioniert es, aber eben nur, wenn ich die komplette Herstellernummer eingebe. Und das sollte nicht der Sinn der Sache sein.
Manuel Marhold
Hi Meike,was für einen DB-Server nutzt ihr?
versuche die Query mal in dessen Queryanalyzer mit einem möglichen Wert auszuführen, also z.B.
SELECT T0.[ItemCode], T0.[U_manufacturer_id] FROM OITM T0 WHERE T0.[U_manufacturer_id] LIKE '%test%'
Meike Schlenker
MSSQL 2005.Die Abfrage funktioniert.
Manuel Marhold
Hi Meike,dann teste mal diese FMS:
SELECT T0.[ItemCode], T0.[U_manufacturer_id] FROM OITM T0 WHERE T0.[U_manufacturer_id] LIKE '%' + '$[$38.1.STRING]' + '%'
Meike Schlenker
Hi Manuel,ergibt leider auch einen internen Fehler ;-(((((
Manuel Marhold
Hi Meike,ich weiss nicht warum, aber das fehlt was in meiner SQL-Anweisung, ich hoffe du hattest das gesehen und angepasst..
LIKE '%' + '$[$38.1.STRING]' + '%'
und dann lasse doch bitte mal den SQL Server Profiler mitlaufen, damit du die Query einmal mitscheidest, die SAP ausführt.
Meike Schlenker
Ja danke, das hatte ich gesehen ;-)Folgendes zeigt der Profiler bei Eingabe der Buchstaben 'CW' an:
declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,NULL,N'SELECT T0.[ItemCode], T0.[U_manufacturer_id] FROM OITM T0 WHERE T0.[U_manufacturer_id] LIKE LIKE ''%'' + ''N''CW '''' + ''%'' FOR BROWSE '
select @p1
Meike Schlenker
Kann es sein, dass ich den Feldinhalt noch mit rTrim bearbeiten muss?Manuel Marhold
Hi Meike,ja, das wäre hilfreich, mach das mal so:
DECLARE @ManufID AS nvarchar(MAX)
SET @ManufID = '$[$ 38.1.STRING]' --Leerstelle zwischen $ und 38 entfernen
SET @ManufID = LTRIM(RTRIM(@ManufID))
SELECT T0.[ItemCode], T0.[U_manufacturer_id] FROM OITM T0 WHERE T0.[U_manufacturer_id] LIKE '%' + @ManufID + '%'
Meike Schlenker
Habe das mal getestet und bekomme wieder die gleiche Fehlermeldung.Ich hab keine Idee mehr, wie es sonst gehen könnte.
Manuel Marhold
Hi Meike,die Query bitte mitloggen..
Meike Schlenker
Log-Ergebnis des SQL Profilers:
declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,NULL,N'DECLARE @ManufID AS nvarchar(MAX)
SET @ManufID = ''N''cw ''''
SET @ManufID = LTRIM(RTRIM(@ManufID))
SELECT T0.[ItemCode], T0.[U_manufacturer_id] FROM OITM T0 WHERE T0.[U_manufacturer_id] LIKE ''%'' + @ManufID + ''%'''
select @p1
Gruß Meike
Manuel Marhold
Hi Meike,kannst du die Query mal kopieren und in dem Studio ausführen?
also das komplette, was da steht. Was kommt dabei raus?
Manuel Marhold
Hi Meike,habe da noch eine Idee:
erstelle eine stored function im SQL-Server, an die du den Parameter $[ $38.1.STRING] übergibst.
In der function führst du dann deine Query damit aus und gibst diese zurück..
In der FMS gibst du dann an
SELECT * FRM dbo.(LTRIM(RTRIM('$[ $38.1.STRING]')))Meike Schlenker
Ähm, "SQL Management Studio hat ein Problem festgestellt und muss beendet werden...":bang:
Meike Schlenker
Im Studio wird die Abfrage eh nicht funktionieren, da ich ja quasi auf einen Feldinhalt im B1 zugreife. Aber auch, wenn ich diese durch Strings ersetze, stürzt mir das Programm ab.Manuel Marhold
Hi meike,okay, versuche nochmal diese FMS:
DECLARE @ManufID AS nvarchar(MAX)
SET @ManufID = $[$ 38.1.STRING] --Leerstelle zwischen $ und 38 entfernen
SET @ManufID = LTRIM(RTRIM(@ManufID))
SELECT T0.[ItemCode], T0.[U_manufacturer_id] FROM OITM T0 WHERE T0.[U_manufacturer_id] LIKE '%' + @ManufID + '%'
Meike Schlenker
Ich glaub es nicht, es funktioniert! :DSuper, ich danke dir für deine Zeit und Mühe!
Viele Grüße
Meike
Manuel Marhold
Hi Meike,endlich :D
womit denn nun? mit der letzten FMS oder mit der stored function?
Meike Schlenker
Mit der letzten:
DECLARE @ManufID AS nvarchar(MAX)
SET @ManufID = $[$ 38.1.STRING]--Leerstelle zwischen $ und 38 entfernen
SET @ManufID = LTRIM(RTRIM(@ManufID))
SELECT T0.[ItemCode], T0.[U_manufacturer_id] FROM OITM T0 WHERE T0.[U_manufacturer_id] LIKE '%' + @ManufID + '%'
0
Please sign in to leave a comment.
Comments
0 comments