Code: Alles auswählen.
create OBJECT lc_pos.
select equnr heqnr submt
into (lc_pos->equnr,lv_heqnr,lc_pos->matnr)
from equz
where hequi = parent->equnr and datbi gt sy-datum.
lc_pos->posnr = lv_heqnr.
append lc_pos to me->poslist.
create OBJECT lc_pos.
endselect.
Code: Alles auswählen.
SELECT equnr, heqnr, submt
INTO @DATA(ls_equz2)
FROM equz
WHERE hequi = @parent->equnr AND datbi GT @sy-datum.
lc_pos->equnr = ls_equz2-equnr.
lc_pos->matnr = ls_equz2-submt.
lc_pos->posnr = ls_equz2-heqnr.
APPEND lc_pos TO me->poslist.
CREATE OBJECT lc_pos.
CLEAR ls_equz2.
ENDSELECT.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Murdock
Dachte ich mir eigentlich auch, aber leider funktioniert es so nicht.DeathAndPain hat geschrieben: ↑25.09.2019 09:48Eigentlich sollte es weiterhin funktionieren (auch wenn ich noch nie einen SELECT direkt in ein Objektattribut gemacht habe).
Ja, finde ich auch :-)
Das ist mir soweit klar, danke. Wie gesagt, dass Ursprungscoding ist nicht von mir sondern von einem externen Entwickler und ich musste jetzt erst mal schnell rauskriegen, warum das nicht mehr funktioniert (wir sind mit EHP8 bereits produktiv). Dass man dieses hier (und noch vieles andere) besser programmieren kann, ist jetzt erstmal zweitrangig, wichtig ist, dass es in der Produktion funktioniert.DeathAndPain hat geschrieben: ↑25.09.2019 09:48SELECT-ENDSELECT ist sowieso ziemlich oldschool und sollte möglichst vermieden werden, schon auch aus Performancegründen.
Mit Bezug zu dem was ich oben geschrieben habe: Dass ist mir momentan nicht so wichtig, ob der Entwickler das da mit Absicht so gemacht hat, oder nicht.DeathAndPain hat geschrieben: ↑25.09.2019 09:48Allerdings hast Du beim Verlassen der SELECT-Schleife eine leere Instanz vom letzten CREATE OBJECT innerhalb des SELECT übrig. Ist das so gewollt!?
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Murdock
Die lokale Variable wurde immer korrekt selektiert und befüllt. Egal ob alte oder neue Version.black_adept hat geschrieben: ↑25.09.2019 11:57ob sich das dann immer noch so verhält und ob auch die lokale Variable nur im 1. Durchlauf geändert wird.
Also nach dem inneren CREATE Object so was wie:
lc_pos->equnr = lc_pos->matnr = lv_hequnr = 'TEST'.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 4):
Murdock • DeathAndPain • Thomas R. • SaskuAc
Wieso soll das mehr Sinn machen? Wenn ein neuer Befehl create OBJECT lc_pos. kommt, dann muss danach lc_pos auf das neu erzeugte Objekt zeigen. Wenn man dann Attribute von lc_pos füllt, dann macht es nach meinem Verständnis überhaupt keinen Sinn, wenn die Werte dann in Attribute von Objektinstanzen gefüllt werden, auf die lc_pos früher mal gezeigt hat.Das Verhalten des neuen Systems macht für mich tatsächlich mehr Sinn als der des alten Systems
Lustigerweise mit dem letzten Wert des SELECT...
Weil bei Schleifen recht häufig ein Wert beim Start der Schleife gemerkt wird. Wenn du ein DO X TIMES machst und X zwischendurch änderst wird die Schleife so oft durchlaufen wie am Anfang angegeben.DeathAndPain hat geschrieben: ↑26.09.2019 15:44Wieso soll das mehr Sinn machen?Das Verhalten des neuen Systems macht für mich tatsächlich mehr Sinn als der des alten Systems
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
DeathAndPain • Legxis