Feste Zeile in Table Control

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Benutzeroberflächen in SAP®-Systemen.
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

Feste Zeile in Table Control

Beitrag von Helle ( / / 0 / 3 ) »
Hi leute,

es gibt zwar die möglichkeit feste Spalten einzustellen, doch wie kann man das gleiche für die oberste Zeile in einem TableControl erreichen??

gruß

helle

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von LoLo ( / / 0 / 3 ) »
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

Beitrag von Helle ( / / 0 / 3 ) »
naja sinn macht es zum Beispiel schon, und zwar für eine Summenzeile., die auch beim scrollen immer sichtbar sein sollte. in der transaktion "cats" lässt sich im zeitblatt eine summenzeile anzeigen doch kann ich leider nicht nachvollziehen, ob die feststeht, da ich noch keine daten eingeben konnte (stammdaten sind im entwicklungssystem sehr dürftig)

gruß

helle
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
:oops:

Beitrag von LoLo ( / / 0 / 3 ) »
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

Beitrag von Helle ( / / 0 / 3 ) »
oh, ich glaube ich habe mich anscheinend falsch ausgedrückt. Ich will nicht die Spaltenbreite für eine zeile festlegen, sondern z.b. die oberste zeile so feststellen, dass beim verticalen scrollen diese zeile an erster stelle auf dem table control bleibt.
danke, für deine bemühungen :D
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

Beitrag von black_adept (Top Expert / 4131 / 130 / 955 ) »
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.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Gast ( / / 0 / 3 ) »
danke black_adept,
aber leider kann ich bei deinem kommentar nicht alles nachvollziehen :oops: .
undzwar, die sache mit dem scrollen. wie du bereits schreibst, wird weder das systemfeld sy-comm noch der
ok_code gefüllt. wie soll ich dann diese blätterfunktion ausgleichen??

gruß

helle
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.

Beitrag von black_adept (Top Expert / 4131 / 130 / 955 ) »
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.



Programmcode

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
Ablauflogik

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.
Funktionscodebelegung
ENTR ( "ENTR" = grüner Haken )
BACK ( "F3" = Grüner Pfeil)
ABBR ( "F1" = Rotes Kreuz )
EXIT ( "UMSCH-F3" = Gelber Aufwärtspfeil )[/quote]
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Gast ( / / 0 / 3 ) »
danke für deine hilfe,
doch hab ich noch ein kleines problem.
im PAI-Modul user_command_9000 benutzt du die variable lastline. jedoch erkenne ich hier keinen zusammenhang zur fixen zeile, da die variable nie das Table Control beeinflusst, sondern eigentlich immer den wert aus tabctrl-top_line besitzt.
meine loop-schleife sieht ein wenig anders aus (kein "loop into") wodurch meine dynprofeld zuweisung immer explicit gemacht wird (siehe code-schnipsel). es gibt jedoch bei mir und bei dir einen fehler.
scrolle ich nur eine zeile funktioniert das wunderbar, jedoch scrolle ich eine ganze seite fehlt mir der wert, der von der summenzeile überschrieben wird. ich habe mir eine umständlich lösung ausgedacht:
man braucht zwei loop-schleifen. die erste schreibt nur die summenzeile (fixe zeile).
dann wird top_line um 1 addiert und die zweite loopschleife durchlaufen. danach wird top_line wieder zurück gesetzt. (denkste das klappt??)

-----------------------------------------
PROCESS BEFORE OUTPUT

MODULE init_9030.
loop at
itab WITH CONTROL tabctrl CURSOR tabctrl-current_line.
MODULE disp_itab. ENDLOOP.
MODULE init_9030 OUTPUT.
v_first = 'X'.
ENDMODULE.

MODULE DISP_ITAB OUTPUT.
if v_first = 'X'.
clear v_first.
"itab besitzt eine Kopfzeile
read table itab into itab index 1.
dynprofeld1 = itab-feld1.
else.
dynprofeld1 = itab-feld1.
endif.
ENDMODULE.
----------------------------------------------------

gruß helle
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.



Programmcode

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
Ablauflogik

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.
Funktionscodebelegung
ENTR ( "ENTR" = grüner Haken )
BACK ( "F3" = Grüner Pfeil)
ABBR ( "F1" = Rotes Kreuz )
EXIT ( "UMSCH-F3" = Gelber Aufwärtspfeil )
[/quote]

Beitrag von black_adept (Top Expert / 4131 / 130 / 955 ) »
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.
Dafür ist das "lastline" :P
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Gast ( / / 0 / 3 ) »
ohjee, ich trottel :oops: , vielen dank :D

naja, vieleicht hätte ich mir den code-teil mit "lastline" genauer anschauen sollen. :roll:

danke, für deine unterstützung, hast mir sehr geholfen. :idea:
black_adept hat geschrieben:
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.
Dafür ist das "lastline" :P

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1785
Views
Table Control + Zeile ausblenden
von jensschladitz » 17.05.2016 14:24 • Verfasst in ABAP® Core
3
Antw.
3455
Views
Table Control + F4 mit User Exit -> und aktuelle Zeile?
von mawi » 22.08.2007 13:11 • Verfasst in ABAP® Core
0
Antw.
1363
Views
Table Control: Nur eine Zeile und kein Scrollen
von MCMio » 04.08.2006 11:05 • Verfasst in Dialogprogrammierung
16
Antw.
9649
Views
Table Control in Custom Control?
von ralf.wenzel » 29.11.2013 21:21 • Verfasst in ABAP Objects®
2
Antw.
3647
Views
WD Table - selektierte Zeile editierbar machen
von eucherl » 10.03.2015 10:33 • Verfasst in Web-Dynpro, BSP + BHTML

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

SAP GUI Installation Probleme
Gestern von Romaniac gelöst 2 / 130
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 343
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 294
DIN Norm Klassifizierung
vor 5 Tagen von Radinator 2 / 3227

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

SAP GUI Installation Probleme
Gestern von Romaniac gelöst 2 / 130
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 343
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 294
DIN Norm Klassifizierung
vor 5 Tagen von Radinator 2 / 3227

Unbeantwortete Forenbeiträge

Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 343
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 294