Ich verwende in einem Programm die Hide-Funktion, um eine Tabelle (ZPRUECK) zu pflegen. Wenn ich aber einmal aus dem Programm herausgeh und nochmals hinein, wird immer ein anderer Datensatz wie eigentlich angeklickt ist geöffnet.
Ich hänge mal die Codierung an, vielleicht fällt jemand was auf!
Hoffe sehr auf eure Hilfe!
Danke schon mal für eure Mühe!
mfg Manuela
LOOP AT zplrueck_wa.
IF zplrueck_wa-zpernr = '00000000' AND zplrueck_wa-zplst = 0.
WRITE: 'Kostenstelle:', zplrueck_wa-zkstl,
zplrueck_wa-zla, zplrueck_wa-zpl, 'jährlich'.
HIDE: zplrueck_wa-zpernr, zplrueck_wa-zplst,
zplrueck_wa-zla, zplrueck_wa-zpl, zplrueck_wa-zbem.
ELSEIF zplrueck_wa-zpernr NE 0 OR zplrueck_wa-zplst NE 0.
READ TABLE pers_wa WITH KEY pernr = zplrueck_wa-zpernr
plst = zplrueck_wa-zplst.
WRITE:/ zplrueck_wa-zplst,
zplrueck_wa-zpernr,
pers_wa-sname,
zplrueck_wa-zla,
zplrueck_wa-zpl,
zplrueck_wa-zbem.
HIDE: zplrueck_wa-zpernr, zplrueck_wa-zplst,
zplrueck_wa-zla, zplrueck_wa-zpl.
CLEAR zplrueck_wa.
ENDIF.
ENDLOOP.
CLEAR zplrueck_wa.
ENDIF.
AT LINE-SELECTION.
vorhanden = 0.
SELECT SINGLE * FROM zplrueck WHERE zpernr = zplrueck_wa-zpernr
AND zplst = zplrueck_wa-zplst AND zla = zplrueck_wa-zla
AND zkstl = pkostl AND zbegda IN pdate AND zenda IN pdate.
IF sy-subrc NE 0.
SELECT SINGLE * FROM zplrueck WHERE zpernr = zplrueck_wa-zpernr
AND zplst = zplrueck_wa-zplst
AND zkstl = pkostl AND zbegda IN pdate AND zenda IN pdate AND zist =
zplrueck_wa-zist.
IF sy-subrc NE 0.
vorhanden = 1.
CLEAR zplrueck.
zplrueck-zpernr = zplrueck_wa-zpernr.
zplrueck-zplst = zplrueck_wa-zplst.
ENDIF.
ENDIF.
CALL SCREEN 100.
IF upd = 'X'.
LOOP AT zplrueck_it.
DELETE zplrueck_it.
ENDLOOP.
CLEAR zplrueck_it.
SELECT * FROM zplrueck INTO zplrueck_it
WHERE zpernr = zplrueck_wa-zpernr
AND zplst = zplrueck_wa-zplst
AND zkstl = pkostl AND zbegda IN pdate
AND zenda IN pdate
OR ( zpernr = zplrueck_wa-zpernr
AND zplst = zplrueck_wa-zplst
AND zkstl = pkostl AND zbegda IN pdate
AND zenda IN pdate ).
APPEND zplrueck_it.
ENDSELECT.
IF sy-subrc NE 0.
zplrueck_it-zpernr = zplrueck_wa-zpernr.
zplrueck_it-zplst = zplrueck_wa-zplst.
APPEND zplrueck_it.
ENDIF.
LOOP AT zplrueck_it.
MODIFY CURRENT LINE FIELD VALUE zplrueck_wa-zla FROM zplrueck_it-zla
zplrueck_wa-zpl FROM zplrueck_it-zpl
zplrueck_wa-zbem FROM zplrueck_it-zbem.
ENDLOOP.
ENDIF.
MODULE user_command_0100 INPUT.
upd = ' '.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'SAVE'.
IF vorhanden = 1.
IF zplrueck-zpernr = ' ' AND zplrueck-zplst = ' '
AND zplrueck-zla NE 'GK'.
MESSAGE e899(/bdl/d-) WITH 'Nur Leistungsart GK möglich'.
ELSE.
zplrueck-zenda = pdate-high.
zplrueck-zbegda = pdate-low.
zplrueck-zkstl = pkostl.
INSERT zplrueck.
ENDIF.
ELSE.
IF zplrueck-zpernr = ' ' AND zplrueck-zplst = ' '
AND zplrueck-zla NE 'GK'.
MESSAGE a899(/bdl/d-) WITH 'Nur Leistungsart GK möglich'.
ELSE.
MODIFY zplrueck.
ENDIF.
ENDIF.
MESSAGE s042(/bdl/d-).
* Daten gesichert
upd = 'X'.
LEAVE TO SCREEN 0.
WHEN 'DELE'.
DELETE zplrueck.
MESSAGE s328(01).
upd = 'X'.
* Daten wurden gelöscht.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
dankeschön, hab es gleich eingebaut, aber es ist total paradox. Im Testsystem macht mir das Programm keine Schwierigkeiten, nur im Produktivsystem. Wenn ich das Programm das 1. Mal starte funktioniert es. Ab den 2. Mal verutscht es immer um eine Zeile, echt faszinierend, ich kann es mit den gleichen Daten wie im Testsystem laufen lassen - im Produktiv funktionierts nicht.
Bin leider immernoch nicht darauf gekommen, aber ich umgehen den Hide-Bereich, da es eindeutig an ihm liegt.
Als Tipp für alle anderen.Ich lege eine interne Tabelle an, mit den Daten die ursprünglich in den Hide-bereich sollten und einem Feld für die Zeilennummer (sy-linno). bei einem Doppelklick lese ich das Systemfeld sy-lilli und suche in meiner internen TAbelle den zugehörigen Datensatz. Somit habe ich meinen eigenen funktionierenden Hide-Bereich geschaffen.