LoLo hat geschrieben:Moin,
das geht meines Wissens nach überhaupt nicht. Es würde ja auch etwas seltsam aussehen, wenn die erste Spalte fest wäre und mit dem Rest könnte man machen was man will.
Ciao, LoLo
LoLo hat geschrieben:Moin Helle,
sorry, wollte nicht in Abrede stellen, dass das keinen Sinn macht, aber ich habe leider bisher das noch nie gesehen, dass Du die Spaltenbreite für nur eine Zeile festlegen kannst (zumindest habe ich es bisher nicht bewusst wahrgenommen).
Ich schau auch mal in der CATS. Wenn ich was finde, melde ich mich nochmal. Vielleicht weiss ja jemand anderes noch etwas?!
Ciao, LoLo
black_adept hat geschrieben:Hi Helle,
da wirst do wohl ein paar kleine Zeilen Code einfügen müssen.
Einfachste Lösung:
Eine Leerzeile am Anfang deiner Tabelle vorhalten wo die Summensätze drin stehen.
Beim PBO-Loop in die 1. Zeile des Tabcontrols halt die Summendaten schieben statt der grade aktuell gelesenen Zeile. - Das wars dann auch schon dort.
Allerdings solltest du im PAI noch die internen Blätterfunktionen des Tabcontrols (die keinen SY-UCOMM oder OK_CODE auslösen) ausgleichen, da bei fixer ( oder fixen ) Topzeilen dann ja beim Blättern um soviel zu viel gescrollt wird wie fixe Zeilen da sind.
Code: Alles auswählen.
REPORT zss_test_tabctrl .
TYPES: BEGIN OF ty_itab,
matnr TYPE matnr,
werks TYPE werks_d,
marker(1) TYPE c,
END OF ty_itab,
tyt_itab TYPE STANDARD TABLE OF ty_itab
WITH NON-UNIQUE DEFAULT KEY.
DATA: itab TYPE tyt_itab,
wa LIKE LINE OF itab,
ok_code TYPE syucomm,
first.
CONTROLS: tabctrl TYPE TABLEVIEW USING SCREEN 9000.
DATA:lastline LIKE tabctrl-top_line.
END-OF-SELECTION.
SELECT * UP TO 30 ROWS
INTO CORRESPONDING FIELDS OF TABLE itab
FROM marc
WHERE matnr <> space.
tabctrl-lines = sy-dbcnt.
CALL SCREEN 9000.
*&---------------------------------------------------------------------*
*& Module status_9000 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS '9000'.
CLEAR ok_code.
ENDMODULE. " status_9000 OUTPUT
*&---------------------------------------------------------------------*
*& Module user_command_9000 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
CASE ok_code.
WHEN 'ABBR' OR 'EXIT' OR 'BACK'.
SET SCREEN 0.
WHEN space.
IF lastline < tabctrl-top_line.
ADD 1 TO lastline.
IF lastline <> tabctrl-top_line.
SUBTRACT 1 FROM tabctrl-top_line.
ENDIF.
ELSEIF lastline > tabctrl-top_line.
SUBTRACT 1 FROM lastline.
IF lastline <> tabctrl-top_line.
ADD 1 TO tabctrl-top_line.
ENDIF.
ENDIF.
WHEN OTHERS.
MESSAGE i398(00) WITH sy-ucomm
': Dieser Funktionscode ist nicht vorgesehen'.
ENDCASE.
lastline = tabctrl-top_line.
ENDMODULE. " user_command_9000 INPUT
*---------------------------------------------------------------------*
* MODULE TABCTRL_MARK INPUT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
MODULE tabctrl_mark INPUT.
MODIFY itab
FROM wa
INDEX tabctrl-current_line
TRANSPORTING marker.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module TABCTRL_CHANGE_FIELD_ATTR OUTPUT
*&---------------------------------------------------------------------*
MODULE tabctrl_change_field_attr OUTPUT.
CHECK first = 'X'.
CLEAR first.
READ TABLE itab INTO wa INDEX 1.
ENDMODULE. " TABCTRL_CHANGE_FIELD_ATTR OUTPUT
*&---------------------------------------------------------------------*
*& Module first OUTPUT
*&---------------------------------------------------------------------*
MODULE first OUTPUT.
first = 'X'.
ENDMODULE. " first OUTPUT
Code: Alles auswählen.
PROCESS BEFORE OUTPUT.
module first.
* PBO FLOW LOGIC FOR TABLECONTROL 'TABCTRL'
* MODULE TABCTRL_CHANGE_TC_ATTR.
* MODULE TABCTRL_CHANGE_COL_ATTR.
LOOP AT ITAB
INTO WA
WITH CONTROL TABCTRL
CURSOR TABCTRL-CURRENT_LINE.
MODULE TABCTRL_CHANGE_FIELD_ATTR.
ENDLOOP.
MODULE status_9000.
PROCESS AFTER INPUT.
* PAI FLOW LOGIC FOR TABLECONTROL 'TABCTRL'
LOOP AT ITAB.
FIELD WA-MARKER
MODULE TABCTRL_MARK ON REQUEST.
ENDLOOP.
* MODULE TABCTRL_CHANGE_TC_ATTR.
* MODULE TABCTRL_CHANGE_COL_ATTR.
MODULE user_command_9000.
[/quote]black_adept hat geschrieben:Hmmm - manchmal ist ein Codeschnippsel besser als 1000 Worte *lach*
Allerdings hält dieses Programm einfach die oberste zeile der Tabelle fix - das ist aber keine Summenzeile, aber der Effekt ist derselbe. Außerdem muss noch das Tabcontrol auf den Screen 9000 gepackt werden.
ProgrammcodeAblauflogikCode: Alles auswählen.
REPORT zss_test_tabctrl . TYPES: BEGIN OF ty_itab, matnr TYPE matnr, werks TYPE werks_d, marker(1) TYPE c, END OF ty_itab, tyt_itab TYPE STANDARD TABLE OF ty_itab WITH NON-UNIQUE DEFAULT KEY. DATA: itab TYPE tyt_itab, wa LIKE LINE OF itab, ok_code TYPE syucomm, first. CONTROLS: tabctrl TYPE TABLEVIEW USING SCREEN 9000. DATA:lastline LIKE tabctrl-top_line. END-OF-SELECTION. SELECT * UP TO 30 ROWS INTO CORRESPONDING FIELDS OF TABLE itab FROM marc WHERE matnr <> space. tabctrl-lines = sy-dbcnt. CALL SCREEN 9000. *&---------------------------------------------------------------------* *& Module status_9000 OUTPUT *&---------------------------------------------------------------------* MODULE status_9000 OUTPUT. SET PF-STATUS '9000'. CLEAR ok_code. ENDMODULE. " status_9000 OUTPUT *&---------------------------------------------------------------------* *& Module user_command_9000 INPUT *&---------------------------------------------------------------------* MODULE user_command_9000 INPUT. CASE ok_code. WHEN 'ABBR' OR 'EXIT' OR 'BACK'. SET SCREEN 0. WHEN space. IF lastline < tabctrl-top_line. ADD 1 TO lastline. IF lastline <> tabctrl-top_line. SUBTRACT 1 FROM tabctrl-top_line. ENDIF. ELSEIF lastline > tabctrl-top_line. SUBTRACT 1 FROM lastline. IF lastline <> tabctrl-top_line. ADD 1 TO tabctrl-top_line. ENDIF. ENDIF. WHEN OTHERS. MESSAGE i398(00) WITH sy-ucomm ': Dieser Funktionscode ist nicht vorgesehen'. ENDCASE. lastline = tabctrl-top_line. ENDMODULE. " user_command_9000 INPUT *---------------------------------------------------------------------* * MODULE TABCTRL_MARK INPUT * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* MODULE tabctrl_mark INPUT. MODIFY itab FROM wa INDEX tabctrl-current_line TRANSPORTING marker. ENDMODULE. *&---------------------------------------------------------------------* *& Module TABCTRL_CHANGE_FIELD_ATTR OUTPUT *&---------------------------------------------------------------------* MODULE tabctrl_change_field_attr OUTPUT. CHECK first = 'X'. CLEAR first. READ TABLE itab INTO wa INDEX 1. ENDMODULE. " TABCTRL_CHANGE_FIELD_ATTR OUTPUT *&---------------------------------------------------------------------* *& Module first OUTPUT *&---------------------------------------------------------------------* MODULE first OUTPUT. first = 'X'. ENDMODULE. " first OUTPUT
FunktionscodebelegungCode: Alles auswählen.
PROCESS BEFORE OUTPUT. module first. * PBO FLOW LOGIC FOR TABLECONTROL 'TABCTRL' * MODULE TABCTRL_CHANGE_TC_ATTR. * MODULE TABCTRL_CHANGE_COL_ATTR. LOOP AT ITAB INTO WA WITH CONTROL TABCTRL CURSOR TABCTRL-CURRENT_LINE. MODULE TABCTRL_CHANGE_FIELD_ATTR. ENDLOOP. MODULE status_9000. PROCESS AFTER INPUT. * PAI FLOW LOGIC FOR TABLECONTROL 'TABCTRL' LOOP AT ITAB. FIELD WA-MARKER MODULE TABCTRL_MARK ON REQUEST. ENDLOOP. * MODULE TABCTRL_CHANGE_TC_ATTR. * MODULE TABCTRL_CHANGE_COL_ATTR. MODULE user_command_9000.
ENTR ( "ENTR" = grüner Haken )
BACK ( "F3" = Grüner Pfeil)
ABBR ( "F1" = Rotes Kreuz )
EXIT ( "UMSCH-F3" = Gelber Aufwärtspfeil )
Dafür ist das "lastline"Anonymous hat geschrieben:scrolle ich nur eine zeile funktioniert das wunderbar, jedoch scrolle ich eine ganze seite fehlt mir der wert, der von der summenzeile überschrieben wird.
black_adept hat geschrieben:Dafür ist das "lastline"Anonymous hat geschrieben:scrolle ich nur eine zeile funktioniert das wunderbar, jedoch scrolle ich eine ganze seite fehlt mir der wert, der von der summenzeile überschrieben wird.