Felder mehrerer Tabellen zählen


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Re: Felder mehrerer Tabellen zählen

Beitragvon ralf.wenzel » 13.04.2017, 09:49

Kai999 hat geschrieben:Danke Ralf für die Antwort, aber wie gesagt, ich bin ein Anfänger und weiß jetzt nicht wie ich das als Coding eingeben soll. Kannst du ein Beispiel posten?


Du willst die Lösung und ich finde das das suboptimal. Du willst ja was lernen, ich lass mal die Implementierung weg.

Code: Alles auswählen
*----------------------------------------------------------------------*
*       CLASS lcl_abapforum DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_abapforum DEFINITION CREATE PUBLIC FINAL.

  PUBLIC SECTION.

    TYPES:
      BEGIN OF _list_entry,
        fieldname TYPE fieldname,
        counter TYPE i,
      END OF _list_entry,

      _list_table TYPE STANDARD TABLE OF _list_entry.

    CLASS-DATA:
      "! application object
      application TYPE REF TO lcl_abapforum.

    METHODS:
      "! object constructor
      "!
      "! @parameter tabname               | name of requested table
      "! @raising   cx_create_error       | Table does not exist
      constructor
        IMPORTING
          tabname TYPE tabname
        RAISING cx_create_error,

      "! count filled zz-fields
      "!
      count.

  PRIVATE SECTION.

    DATA:
      "! name of requested table
      "! (from user input)
      tabname    TYPE tabname,

      "! list of fieldnames, beginning with ZZ
      zz_fieldnames TYPE STANDARD TABLE OF fieldname,
 
     "! result list
      list_table TYPE _list_table.

    METHODS:
      "! check if table exists
      "!
      "! @parameter tabname               | name of requested table
      "! @parameter result                | indicator: table exists
      "! @raising   cx_dd_parameter_error | Table does not exist
      table_exists
        IMPORTING
          tabname TYPE tabname
        RETURNING
          value(result) TYPE abap_bool
        RAISING
          cx_dd_parameter_error,

      "! get fieldnames beginning with ZZ...
      "!
      get_zz_fieldnames.

ENDCLASS. " lcl_abapforum

*----------------------------------------------------------------------*
*       CLASS lcl_abapforum IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_abapforum IMPLEMENTATION.
*......
ENDCLASS. " lcl_abapforum

PARAMETERS:
  "! user input: requested table's name
  tabname TYPE tabname MATCHCODE OBJECT dd_tabl.

START-OF-SELECTION.

  TRY.
      " object creation
      CREATE OBJECT lcl_abapforum=>application
        EXPORTING
          tabname = tabname.

      lcl_abapforum=>application->count( ).

      " application result in lcl_abapforum->application->list_table
      " use for alv or whatever you want

    CATCH cx_create_error.
* Fehlermeldung....
  ENDTRY.
 


So, jetzt ist die Arbeit gemacht, jetzt brauchst du es wirklich nur noch zuzunähen.....


Ralf
Bild Ralf WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing

Für diese Nachricht hat ralf.wenzel einen Dank bekommen :
Kai999
ralf.wenzel
Top Expert
 
Beiträge: 2555
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 114 mal
Ich bin: Freiberufler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Felder mehrerer Tabellen zählen

Beitragvon Kai999 » 13.04.2017, 09:58

Vielen Dank Ralf!
Kai999
ForumUser
 
Beiträge: 33
Registriert: 12.04.2017, 08:23
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Felder mehrerer Tabellen zählen

Beitragvon PeterPaletti » 13.04.2017, 15:14

Ein Beispiel

Code: Alles auswählen
REPORT zz_test.

TYPES: BEGIN OF ty_counter,
         fieldname TYPE dd03l-fieldname,
         counter   TYPE i,
       END OF ty_counter,
       tt_counter TYPE STANDARD TABLE OF ty_counter.

DATA: gv_tabname TYPE dd02l-tabname,
      gt_dd03l   TYPE TABLE OF dd03l,
      gs_dd03l   TYPE dd03l,
      gt_counter TYPE tt_counter,
      gs_counter TYPE ty_counter,
      where_cond TYPE string.

PARAMETERS p_tab TYPE dd02l-tabname.

START-OF-SELECTION.

* 1. Prüfen, ob Tabelle überhaupt existiert.
  SELECT SINGLE tabname FROM dd02l INTO gv_tabname
    WHERE tabname EQ p_tab.
  IF sy-subrc NE 0.
    WRITE: / 'Tabelle', p_tab, 'unbekannt'.
    RETURN.
  ENDIF.

* 2. Felder mit ZZ besorgen
  SELECT * FROM dd03l INTO TABLE gt_dd03l
    WHERE tabname = p_tab
    AND   fieldname LIKE 'ZZ%'.

* wenn keine ZZ_Felder vorhanden, entpsrehcende Nachricht ausgeben
  IF gt_dd03l IS INITIAL.
    WRITE: / 'Keine ZZ_Felder vorhanden'.
  ENDIF.

* 3. Arbeitsvorrat abarbeiten und Ergebnis in eine Tabelle GT_COUNTER stellen
  LOOP AT gt_dd03l INTO gs_dd03l.
    gs_counter-fieldname = gs_dd03l-fieldname.
    "where Bedingung dynamisch aufbauen
    CLEAR where_cond.
    CONCATENATE gs_dd03l-fieldname 'ne space' INTO where_cond SEPARATED BY space.
   
    "Select Count Abfrage
    SELECT COUNT( * ) FROM (p_tab) INTO gs_counter-counter WHERE (where_cond).
   
    "Ergebnis wegschreiben
    APPEND gs_counter TO gt_counter.
    CLEAR gs_counter.
  ENDLOOP.

* Ergebnis ausgeben.
  LOOP AT gt_counter INTO gs_counter.
    WRITE: / gs_counter-fieldname, gs_counter-counter.
  ENDLOOP.

Für diese Nachricht hat PeterPaletti einen Dank bekommen :
Kai999
PeterPaletti
Specialist
 
Beiträge: 127
Registriert: 28.03.2014, 15:20
Dank erhalten: 25 mal
Ich bin: Entwickler/in

Re: Felder mehrerer Tabellen zählen

Beitragvon ralf.wenzel » 13.04.2017, 15:56

PeterPaletti hat geschrieben:Ein Beispiel


Super, nu muss er gar nix mehr selbst machen. Genau DAS wollte ich verhindern. Genau wie das Vermitteln schlechten Programmierstils.

Und wenn das Feld numerisch ist, gibt dein Programm falsche Ergebnisse aus.


Ralf

Edit: Falsches "nicht" gelöscht
Bild Ralf WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing

Für diese Nachricht hat ralf.wenzel einen Dank bekommen :
gtoXX
ralf.wenzel
Top Expert
 
Beiträge: 2555
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 114 mal
Ich bin: Freiberufler/in

Re: Felder mehrerer Tabellen zählen

Beitragvon Kai999 » 15.04.2017, 12:50

Hallo, ich weiß, dass du es nur gut meinst Ralf, aber mach dich mal locker. Ich habe mir dein Code genau angeschaut und fand es ehrlich gesagt für einen Anfänger zu kompliziert. Kannst mir glauben, dass ich bis eben selber an meinem Code dran war und die Nachricht vom Peter eben erst gesehen habe. Ich muss sagen, dass ich einen ähnlichen geschrieben habe und jetzt fast alles nachvollziehen kann. Jetzt kann ich die Codes vergleichen und anpassen.
Vielen Dank an dieser Stelle PeterPaletti!

Gruß
Kai
Kai999
ForumUser
 
Beiträge: 33
Registriert: 12.04.2017, 08:23
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Felder mehrerer Tabellen zählen

Beitragvon ralf.wenzel » 15.04.2017, 13:01

Wenn dein Code so aussieht wie seiner, ist das Kind schon im Brunnen. Prozedural, Ungarische Notation, programmlokale / "globale" Felder...

Das meinte ich mit Programmierstil - mein Ansatz sollte genau das verhindern.

Ralf
Bild Ralf WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing
ralf.wenzel
Top Expert
 
Beiträge: 2555
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 114 mal
Ich bin: Freiberufler/in

Re: Felder mehrerer Tabellen zählen

Beitragvon black_adept » 16.04.2017, 14:08

@Ralf: Deine letzten beiden Postings hier sind genau die Antworten, mit denen du dir immer wieder selbst in den Fuß schießt. Einzig die Kritik ob des Postings einer vollständigen Lösung lasse ich gelten. Aber alles andere ist deine persönliche Meinung und es ist eine Unverschämtheit Peters Code als schlechten Programmierstil zu bezeichnen. Deine Haltung bezüglich HN ist bekannt, aber nicht jeder der das anders sieht ist ein schlechter Programmierer. Und der ganze mit Sermon mit " Prozedural, Ungarische Notation, programmlokale / "globale Felder" ..." ist nur dadurch zu erklären dass du entweder schlechte Laune oder keinen Schimmer von Didaktik hast. Und ich fürchte es ist Letzteres, da dein Coding zwar technisch schöner und moderner ist als Peters, aber leider mit viel zu viel Brimborium das letztlich Gefragte versteckt
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept 2 Dankeschön bekommen :
Murdock, Unit605
black_adept
Top Expert
 
Beiträge: 2669
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 376 mal
Ich bin: Freiberufler/in

Re: Felder mehrerer Tabellen zählen

Beitragvon ralf.wenzel » 16.04.2017, 15:25

Natürlich poste ich hier meine Meinung - was auch sonst?

Prozedurale Programmierung ist lt. SAP ebenso obsolet wie "globale" Variablen. Demzufolge ist sowas schlechter Stil. Unabhängig davon, wer es macht. Bei Fünfzeilern ist sowas noch egal, aber wenn einer so anfängt, schreibt er nach meiner Erfahrung auch 3.000 Zeilen einfach untereinander. Dann bekommt man nie ein Gefühl für gutes OO-Design (fatal vor dem Hintergrund, dass S/4 vor der Tür steht). Und das wiederum führt dann dazu, dass eine Anwendung von mir, die extra fast prozedural ist und wirklich nur Factory und Vererbung nutzt (wofür es gute Gründe gibt, alles idiotensicher dokumentiert), gelöscht und prozedural neu geschrieben wird, weil von einem halben Dutzend Programmierern sich kein einziger findet, der das verstehen will. Was würdest du sagen, wenn du dein Auto in die Werkstatt bringst, um die Reifen wechseln zu lassen, und dort sagt man "der ist zu modern, der hat ABS, das pack ich nicht an".

Und diese Einstellung führt dann dazu, dass Anwendungen so komplex und unmodularisiert sind, dass selbst hier ein sehr erfahrener Programmierer sagt, dass man komplexe Programme eh neu schreiben muss,wenn sich signifikant etwas ändert (also: dass man sie nicht warten kann).

Kapselt man dagegen in unterschiedliche Einheiten, schreibt man eben nicht zwingend alles neu, weil man voneinander unabhängige Module hat, die über definierte Schnittstellen miteinander kommunizieren.

BTW: Ich schieße mir nicht in den Fuß - meine letzten beiden Kunden sind gerade von dem Umstand, dass ich diesen missionarischen Eifer habe und meinen Standpunkt mit Verve vertrete, sehr angetan.... Wollte ich Werbung machen für mich, müsste ich das genau SO machen. Ich mache aber keine Werbung, ich habe diese Woche drei Projekte in HH abgelehnt. Ein anderes war ein EWM-Projekt ca. 300km entfernt. "Das ist mir zu weit" -- "Wie hoch muss der Stundensatz sein, damit Ihnen das nicht mehr zu weit ist?"

Mir geht es um die Sache, um ordentliches Arbeiten, wie man es von einem Software-Ingenieur (denn nichts anderes ist ein Informatiker) erwarten kann. Beim neuen Pamama-Kanal (der zum großen Teil übrigens von deutschen Ingenieuren gebaut wird), wird auch nicht einfach gebuddelt. Jeder 1-€-Schokoriegel, den du kaufen kannst, unterliegt einer besseren Planung und einem besseren Qualitätsmanagement als viele SAP-Anwendungen, die jeweils fünfstellige Beträge kosten.

Das muss aufhören, DAS ist der Grund, warum ich da so hinterher bin. Weil "funktioniert doch auch so" einfach nicht gut genug ist.


Ralf
Bild Ralf WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing
ralf.wenzel
Top Expert
 
Beiträge: 2555
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 114 mal
Ich bin: Freiberufler/in

Re: Felder mehrerer Tabellen zählen

Beitragvon black_adept » 17.04.2017, 15:18

Lieber Ralf,
deine Erklärungen in allen Ehren. Ich stimme dir ja sogar in den meisten Sachen zu. Wenn du auf eine Frage hier im Forum geantwortet hättest, wo es darum ginge wie man sinnvoll ein Programm aufbaut wäre das ja auch alles angemessen. Aber du befindest dich hier im Noob-Forum und da ist das von dir abgelieferte Coding leider didaktisch - sagen wir mal - suboptimal. Deine Beweggründe keine fertige Lösung posten zu wollen zeigen immerhin, dass du dem Fragenden helfen willst selber eine Lösung zu erarbeiten. Aber ich habe gerade mal deinen Quelltext im Editor angeschaut - 98 Zeilen. Weißt du - früher in der Schule/Studium hat man die wichtigen Stellen eines Gedichts, Romans, Fachbuchs mit nem Textmarker markiert und das Wesentliche vom Beiwerk zu trennen. Und bei Goethe und Shakespeare ist das Beiwerk durchaus nicht nebensächlich, auch wenn die wesentlichen Aussagen kompakter gemacht werden könnten. Aber die literarische Qualität deines Postings kann sich leider nicht mit den alten Meistern messen, so dass ich mal lieber den Maßstab für Fachbücher anlege - und hier stellt man fest, dass der für die Fragestellung wichtige Inhalt leider untergeht. Man beginnt das Lernen einer Programmiersprache (oder evtl. gar Programmieren an sich) nicht damit sich mit den Metaeigenschaften von Programmen oder darüber liegenen Paradigmen zu beschäftigen, sondern indem man zunächst die Grundlagen lernt. Danach erst kommt der nicht nur von dir für wichtig erachtete Überbau.
Und genau hier kommt dann wieder dir prozedurale Programmierung zum Tragen - du brauchst einfach viel weniger Beiwerk um kurz! das Wesentliche zu erläutern.

Und ganz zum Schluss noch ein (angebliches) Zitat eines nicht ganz unbekannten Informatikers. Leider gibt es keine Quelle die das genau zitiert - aber es scheint die Ansicht desjenigen im Allgemeinen ganz gut wiederzuspiegeln und auch wenn das Zitat nicht von ihm oder nicht so von ihm sein sollte zeigt es doch ganz gut, dass OO nicht als Lösung aller Probleme von durchaus wegweisenden Personen angesehen wird.
Edsger W. Dijkstra hat geschrieben:Object-oriented programming is an exceptionally bad idea which could only have originated in California.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 2669
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 376 mal
Ich bin: Freiberufler/in

Re: Felder mehrerer Tabellen zählen

Beitragvon ralf.wenzel » 17.04.2017, 15:44

Aha, das Paradigma ist nicht Betandteil der Grundlagen.

Dann muss ich ja kein Physik mehr lernen, wenn ich Flugzeuge bauen will. Ich baue einfach ERST Flugzeuge und fange dann später an, die physikalischen Grundlagem zu lernen?

Ich persönlich (der diesen Vorzug nie hatte, ich habe IT autodidaktisch in den 80ern gelernt) halte viel davon, erst zu verstehen, wie Zahlen funktionieren, ehe ich Mathematik studiere. Und ja, ich habe Mathematik-Studenten erlebt, die erst im Studium das Wort Axiom zu, ersten Mal gehört haben.

Heute lernen Kinder erst "Frei Schnauze" zu schreiben und erst dann die Regeln dazu. Was dabei herauskommt, sehe ich jedem Tag.


Ralf
Bild Ralf WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing
ralf.wenzel
Top Expert
 
Beiträge: 2555
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 114 mal
Ich bin: Freiberufler/in

Vorherige

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
APICS Certified in Production and Inventory Management ?
Gestern von johnnyhenderson 0 Antw.
PRODUCTION PLANNING AND SCHEDULING?
Gestern von johnnyhenderson 0 Antw.
Manufacturing Planning and Control (MPC) system?
Gestern von johnnyhenderson 0 Antw.
Production Planning and Control?
Gestern von johnnyhenderson 0 Antw.
why do people complain about class balance
Gestern von johnnyhenderson 0 Antw.

  Ähnliche Beiträge beta
RFC Baustein zum Auslesen mehrerer Tabellen
22.02.2005, 15:18 von Gast 8 Antw.
gelöst Zählen in einer Tabellen
13.04.2016, 10:50 von Andaria 2 Antw.
Felder und Tabellen in Smartforms
07.03.2012, 16:19 von nicetoknow 3 Antw.
gelöst Eingabehilfe für Dynpro: zwei Felder aus versch. Tabellen
10.07.2017, 14:30 von DeathAndPain 4 Antw.
gelöst DB-Update wenn 2 Felder aus untersch. Tabellen gleich sind
07.02.2017, 17:38 von sazukii 3 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!