Buerger Geschrieben 19. Oktober 2009 Geschrieben 19. Oktober 2009 Hi, ich habe ein Table Control erstellt, welches Daten einliest. Nun möchte ich diese Daten gerne in Bezug auf die Tabelle einfügen, bearbeiten oder löschen. Hierfür habe ich bereits 3 Button erstellt. Aber wie can ich jetzt Aktionen auf die einzelnen Knöpfe legen?? Dies funktioniert bei mir nämlich noch gar nicht.... Das ist mein Code für die interne Tabelle: BEGIN OF its OCCURS 0, mark TYPE C VALUE ' ', artikel_nr TYPE ZARTIKEL-ARTIKEL_NR, artikel_typ TYPE ZARTIKEL-TYPE, bezeichnung TYPE ZARTIKEL-BEZEICHNUNG, preis TYPE ZARTIKEL-PREIS, mwst TYPE ZARTIKEL-MWST, END OF its. und dies mein Code für die zu löschenden Zeilen im Table Control: WHEN 'DELETE'. LOOP AT its WHERE mark EQ 'X'. DELETE its WHERE mark = 'X'. MOVE its TO ZARTIKEL. ENDLOOP. ENDCASE. ENDMODULE: und mein PBO und PAI: PROCESS BEFORE OUTPUT. LOOP AT its INTO ZARTIKEL WITH CONTROL ARTIKEL. ENDLOOP. PROCESS AFTER INPUT. MODULE EXIT. LOOP AT its. MODULE V1. ENDLOOP. MODULE user_command_1060. Wenn ich nun den Table Control öffne und die Zeile markiere, welche ich löschen will und meinen Löschen-Button klicke, passiert gar nichts. Weder in meiner internen Tabelle noch in meiner eigentlichen Tabelle ZARTIKEL. Könnt Ihr mir sagen, was ich hier falsch mache?? Besten Dank schonmal im Voraus. Buerger Zitieren
grueni Geschrieben 19. Oktober 2009 Geschrieben 19. Oktober 2009 Und verrätst du uns auch mit welcher Programmiersprache du arbeitest? Zitieren
melleh Geschrieben 19. Oktober 2009 Geschrieben 19. Oktober 2009 Es handelt sich um ABAP (SAP). nehm mal die anweisung "DELETE its WHERE mark = 'X'." raus bzw schreibe nur delete its. an der stelle, wo das X ist, ist das programm ja bereits. wie kommsts du auf 'MOVE its TO ZARTIKEL' ? Hast du mal den debugger gestartet? kommt er überhaupt an die stelle? gruß Zitieren
Buerger Geschrieben 19. Oktober 2009 Autor Geschrieben 19. Oktober 2009 Vielen schonmal für die schnelle Rückmeldung. Das mit der DELETE-Anweisung werde ich gleich nach Feierabend um 19 Uhr ausprobieren, vielleicht hilft das ja schon weiter. "MOVE its TO ZARTIKEL" wollte ich nutzen, um ZARTIKEL dann auch zu realisieren, dass ein Datensatz gelöscht ist... Zitieren
melleh Geschrieben 19. Oktober 2009 Geschrieben 19. Oktober 2009 "MOVE its TO ZARTIKEL" wollte ich nutzen, um ZARTIKEL dann auch zu realisieren, dass ein Datensatz gelöscht ist... Aber mit 'Move to' weist du ja zartikel den eintrag der in der itab steh zu, schreibtst ihn also in die kopfzeile. gruß und schönen feierabend Zitieren
Buerger Geschrieben 19. Oktober 2009 Autor Geschrieben 19. Oktober 2009 Vielen Dank schon einmal!! Ich habe das ganze bei mir jetzt nochmal umgeschrieben und es sieht nun so aus: *&---------------------------------------------------------------------* REPORT ZARTIKELDATENVERWALTEN. TABLES ZARTIKEL. DATA: okcode TYPE sy-ucomm, saveok TYPE okcode. DATA: line TYPE i, step TYPE i, limit TYPE i, fill TYPE i, c TYPE i. DATA: wa TYPE TABLE OF ZARTIKEL, its TYPE TABLE OF ZARTIKEL, itartikel TYPE ZARTIKEL, waartikel TYPE ZARTIKEL. SELECT * FROM ZARTIKEL INT O TABLE its. DESCRIBE TABLE its LINES line. CONTROLS: ARTIKEL TYPE TABLEVIEW USING SCREEN 1060. CALL SCREEN 1060. MODULE V1 INPUT. CASE okcode. WHEN 'DELETE'. DELETE its WHERE PICK = 'X'. ENDCASE. ENDMODULE. MODULE EXIT INPUT. IF okcode = 'EXIT'. LEAVE TO TRANSACTION 'ZTRANS'. ENDIF. ENDMODULE. FORM bla. IF waartikel-ARTIKEL_NR IS INITIAL. CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING nr_range_nr = '01' object = 'ZNUMMERA' IMPORTING number = waartikel-ARTIKEL_NR. ENDIF. ENDFORM. module user_command_1060 input. CASE okcode. WHEN 'NEXT-LINE'. line = line + 1. limit = fill - step. IF line > limit. line = limit. ENDIF. WHEN 'PREV_LINE'. line = line - 1. IF line < 0. line = 0. ENDIF. WHEN 'NEXT_PAGE'. line = line + step. limit = fill - step. IF line > limit. line = limit. ENDIF. WHEN 'PREV_PAGE'. line = line - step. IF line < 0. line = 0. ENDIF. WHEN 'LAST_PAGE'. line = fill - step. WHEN 'FIRST_PAGE'. line = 0. WHEN 'NEXT'. c = line + 1. ENDCASE. ENDMODULE. module status_1060 output. DATA: line_count TYPE i. DESCRIBE TABLE its LINES line_count. ARTIKEL-lines = line_count + 5. endmodule. module pass_data output. READ TABLE its INTO ZARTIKEL INDEX artikel-current_line. endmodule. module modify_data INPUT. MODIFY ITS INDEX ARTIKEL-CURRENT_LINE FROM waartikel. endmodule. module function input. okcode = sy-ucomm. CASE okcode. WHEN 'DELETE'. DELETE FROM ZARTIKEL WHERE PICK = 'X'. ENDCASE. endmodule. dazu PAI/PBO: PROCESS BEFORE OUTPUT. MODULE status_1060. LOOP WITH CONTROL ARTIKEL. MODULE pass_data. ENDLOOP. PROCESS AFTER INPUT. module user_command_1060. LOOP WITH CONTROL ARTIKEL. MODULE modify_data. ENDLOOP. MODULE FUNCTION. Mein Table-Control wird dann auch gefüllt, klicke ich dann aber eine Zeile an, so und klicke auf DELETE, so läuscht er im TABLE CONTROL alle sichtbaren Zeilen raus. Ich möchte aber ja nur eine Zeile löschen, undzwar die, die ich angeklickt habe. Habt Ihr vielleicht eine Idee, wo mein Fehler liegt?? Zudem möchte ich dann natürlich auch, dass die Zeile, die ich im Table Control lösche, auch in der Tabelle ZARTIKEL gelöscht wird, hab Ihr dazu auch eine Idee?? Ich würde mich über so gute Antworten wie zuletzt wieder sehr freuen. Buerger Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.