einzelen Zeilen aus SBO ansprechen und Artikelnummer prüfen
Manfred Prager
Hallo zusammen,ich bin gerade dabei einen dynamischen Beleg für einen Kunden zu erstellen. Anhand der Artikel (sind mehrere, also auch mehrere Zeilen in SBO) sollen bestimmte Texte ausgegeben werden ( an verschiedenen Stellen im Layout).
Ich würde gerne wissen welche Möglichkeiten ich habe, alle Zeilen in SBO zu durchlaufen.
(dafür müsste ich also auch eine funktion haben, die mir die maximale anzahl an zeilen wiedergibt)
und zusätzlich müsste ich für jede einzelne Zeile, die dazugehörige Artikelnummer ansprechen können.
Kann mir jemand einen Tip geben?
Manuel Marhold
Hi Manfred,befindest du dich in einem Dokument wie Angebot etc. oder eine selbsterstelle Abfrage?
Gruß
Manuel
Manfred Prager
in einem Dokument, ist zufällig sogar das Angebot :)Manuel Marhold
Hi Manfred,dann hast du Daten bereits im designer enthalten.
Unter Document.DocumentRow.RowRowItems hast du die Stammdaten des jeweiligen Artikel bzw. im AdvancedDataBand "DocumentRow" (B1_Data.Document.DocumentRow) wäre es dann unter Value "DocumentRow("RowRowItems.")"
Gruß
Manuel
Manfred Prager
danke für die hilfe, aber das ist noch nicht ganz was ich brauche. vielleicht hab ich mich auch bissle falsch ausgedrückt. ich formuliere es mal anders.ich möchte gezielt z.b. aus Zeile 3 in SBO die Artikelnummer ansprechen und sie im Beleg in einem speziellen Feld ausdrucken.
Der Rest , also Zeile 1 und 2 sollen nicht ausgedruckt werden.
Manuel Marhold
Hi Manfred,Hierzu könntest du über LD.QueryData() eine SQL-Query laufen lassen, die dir die Daten zurückgibt, die du brauchst.
Wenn das Feld innerhalb des advancedDataBands "DocumentRow" liegt, kannst du das Feld "VisOrder" aus DocumentRow auslesen. Dieses gibt die Reihenfolge im Beleg an. Wenn also dieser Wert=3 ist die dritte Zeile erreicht (das verhalten im Zusammenspielt mit Textzeilen und alterntivzeilen müsstest du selbst prüfen, da weiss ich nicht wie SAP das speichert), dann drucke Wert x aus.
Gruß
Manuel
Philipp Knecht
Hi Manfred, hi ManuelDazu gibt es verschiedene Ansätze.
Da es sich wahrscheinlich aber sowoeso um ein DoublePass Document (DoublePass Property auf true gesetzt) handelt könnten wir uns dies auch folgendermassen zunutze machen:
Im CommonScript:
Dim itemTable As System.Collections.Hashtable = New System.Collections.Hashtable()
Im GetDataScript vom DocumentRow - DataBand:
If Not Engine.IsDoublePass Then
itemTable.Add(DocumentRow("VisOrder").ToString(),DocumentRow("ItemCode"))
End If
Dann kannst du im Value Property imTextfeld schreiben:
itemTable("1")
um z.Bsp. die zweite anzuzeigen.
hth
Manfred Prager
ah danke, das hört sich schonmal gut an, werde ich gleich mal ausprobieren.was ich insgesamt vorhabe ist:
prüfen wie viele Positionen in dem SBO-Formular ist
dann per for-next schleife alle positionen durchlaufen und bei jeder position prüfen ob eine bestimmte artikelnummer vorhanden ist.
anhand dieser artikelnummer entscheidet das layout welcher zugehörige (indivuduelle) text ausgedruckt wird
die schwierigkeit liegt halt darin, dass das ganz nicht einfach in einer tabelle ausgedruckt wird. sondern die informationen komplett über das ganze layout (5 seiten) ausgedruckt wird.
Manfred Prager
so, script funktioniert.allerdings kann ich mit itemTable("...") nur den ersten eintrag in der sbo-liste ansprechen (also mit itemTable"0")
bei itemTable"1" (also eigentlich der 2te datensatz in meiner sbo-liste) wird nichts angezeigt.
Philipp Knecht
Hi ManfredHmm versteh ich nicht. Hier gehts. Bist du sicher dass du einen Auftrag testest mit mehr als 1 Zeile?
hth
Manfred Prager
ja, hab mir das angebot extra vollgeknallt mit artikeln.kann es vielleicht daran liegen, dass ich keine gewöhnliche datentabelle benutze, die sich zur runtime mit daten füllt ?
ich wollte das gleich mal an einem layout mit tabelle ausprobieren. ich melde mich dann nochmal
Manfred Prager
habs zum laufen bekommen, super. das war eine sehr große hilfe.danke dir vielmals.
mit dem script kann ich nun den rest der aufgabe bewältigen :D
0
Please sign in to leave a comment.
Comments
0 comments