Das ist ziemlich klar: Du hättest die Zeilen 413 bis 418 nicht löschen dürfen!Marc K. hat geschrieben: Das ganze funktionierte anwandfrei bis ich einige Schönheitsarbeiten im Code durchgeführt hatte, wahrscheinlich habe ich was gelöscht, was doch wichtig war!
Kann mir jemand erklären woran dies liegt?
ewx hat geschrieben:Das ist ziemlich klar: Du hättest die Zeilen 413 bis 418 nicht löschen dürfen!Marc K. hat geschrieben: Das ganze funktionierte anwandfrei bis ich einige Schönheitsarbeiten im Code durchgeführt hatte, wahrscheinlich habe ich was gelöscht, was doch wichtig war!
Kann mir jemand erklären woran dies liegt?
Code: Alles auswählen.
process before output.
*Dynpro initialisieren
module STATUS_0110.
*Equipmentdaten lesen
module READ_DATA_0110.
Code: Alles auswählen.
module read_data_0110.
* Equipmentnummer bereitstellen
check EQUI-EQUNR is not initial.
check *EQUI-EQUNR ne EQUI-EQUNR.
select single * into *EQUI
from EQUI
where EQUNR = EQUI-EQUNR.
if SY-SUBRC is initial.
EQUI = *EQUI.
endif.
endmodule.
Code: Alles auswählen.
process after input.
module EXIT_0110 at exit-command.
* Prüfen, ob Equi.Nummer existiert bereits
chain.
field EQUI-EQUNR.
module SPERR_EQUIPMENT_0110.
endchain.
module USER_COMMAND_0110.
Code: Alles auswählen.
module USER_COMMAND_0110 input.
G_CODE = OK_CODE.
clear OK_CODE.
case G_CODE.
when 'CREATE'.
LS_DATA_GENERAL-OBJECTTYPE = EQUI-EQART.
LS_DATA_GENERAL-INVENTORY = EQUI-INVNR.
LS_DATA_GENERAL-MANFACTURE = EQUI-HERST.
call function 'BAPI_EQUI_CREATE'
exporting
EXTERNAL_NUMBER = LV_EXTERNAL_NUMBER
DATA_GENERAL = LS_DATA_GENERAL
DATA_SPECIFIC = LS_DATA_SPECIFIC
* DATA_FLEET =
VALID_DATE = LV_VALID_DATE
DATA_INSTALL = LS_DATA_INSTALL
importing
EQUIPMENT = LV_EQUIPMENT
DATA_GENERAL_EXP = LS_DATA_GENERAL_EXP
DATA_SPECIFIC_EXP = LS_DATA_SPECIFIC_EXP
** DATA_FLEET_EXP =
RETURN = LS_RETURN.
if LV_EQUIPMENT is not initial.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
WAIT = 'X'.
endif.
endcase.
endmodule.
Du liest doch aber auch EQUI, also den "alten Inhalt".Marc K. hat geschrieben:Und zu dem Zeitpunkt sind die Felder schon mit dem 'alten' Inhalt gefüllt!
Also so kommen wir nicht weiter!Marc K. hat geschrieben:Bei CHANGE ist das gleiche Problem, die Felder werden nicht überschrieben bzw. geändert.
Code: Alles auswählen.
module SPERR_EQUIPMENT_0110 input.
select single * from EQUI where EQUNR = EQUI-EQUNR.
*Equipment gefunden
if SY-SUBRC = 0.
**Equipment sperren
* call function 'ENQUEUE_EIEQUI'
* exporting
* MODE_EQUI = 'E'
* MANDT = SY-MANDT
* EQUNR = EQUI-EQUNR
** X_EQUNR = ' '
** _SCOPE = '2'
** _WAIT = ' '
** _COLLECT = ' '
* exceptions
* FOREIGN_LOCK = 1
* SYSTEM_FAILURE = 2
* others = 3
* .
* if SY-SUBRC <> 0.
** Equipment kann nicht gesperrt werden
* message E005.
* endif.
*Equipment existiert nicht
else.
*Beim Ändern und Anzeigen muss Equipment vorhanden sein
if SY-TCODE = 'ZIE02' or SY-TCODE = 'ZIE03'.
message E002 with EQUI-EQUNR.
endif.
endif.
endmodule.
Code: Alles auswählen.
process after input.
* Prüfen, ob Equi.Nummer existiert bereits
chain.
field EQUI-EQUNR.
module SPERR_EQUIPMENT_0110.
endchain.
ewx hat geschrieben:Wahrscheinlich ist der Verbucher noch nicht durch und du liest einfach die alten Daten erneut von der DB.
Der Zusatz "AND WAIT" beim Commit funktioniert nicht so, wie du es wahrscheinlich erwartest. Frag mich nicht warum...
Setze vor dem Update den Befehl SET UPDATE TASK LOCAL. Dann wird tatsächlich synchron verbucht.