Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

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

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
Hallöchen,

ich möchte, wenn ich einen vorhandenen klinischen Auftrag (KLAT) öffne, automatisch und in Abhängigkeit diverser Parameter zwei ganz spezielle Leistungen A und B im Positionsbaustein laut Bild schon vorbelegt haben. Die Klassen, die hier weiterhelfen könnte, lauten CL_ISHMED_SERVICE mit dem Attribut G_NLEI und CL_ISHMED_SCR_CSRV_BASE mit den beiden Methoden SET_FIELDVAL_FROM_DATA und _APPEND_ROW_BY_ITEM sowie der Local Table lt_col_fieldval und der Zeilenstruktur ls_row_fieldval. Ich müsste also zur Laufzeit quasi in PBO zwei Leistungen in die interne Tabelle lt_col_fieldval einbauen, was sich als nicht einfach erweist. Sie besitzt standardmäßig 48 Zeilen, jede dieser Zeilen enthält den Fieldname einer Spalte der im KLAT angezeigten Leistungstabelle. Und zwei der 48 Zeilen sind auch noch Referenzen ... Hat das jemand schon mal gemacht und kann mir Tipps geben? Die Bildchen helfen vielleicht etws weiter.

Bild
Bild
Bild

Besten Dank und vG!

sapdepp

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


Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Hi!

In der SCREEN-Klasse des Bausteins bist du falsch. Du musst die neuen Leistungen über die zugehörige COMPONENT-Klasse einfügen.
Einfach in der Konfiguration nachschauen aus welchen Bausteinen der KLAT besteht und über die Tabelle N1COMP kriegst du raus, welche COMPONENT-Klasse dafür zuständig ist. Damit weist du dann welche Möglichkeiten zur Änderung der Daten dir zur Verfügung stehen.
Verändern von KLATs geht am Besten über die KLAT-BAdIs. (N1_CORDER_*)

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
Hallo, ADT,

danke für den Hinweis. Die Klasse müsste CL_ISHMED_COMP_SERVICES sein. Da muss ich jetzt "nur noch" geeignete Methoden finden, z. B. SET..., die mir in den Leistungspoitionsbaustein unter die vorhandene Leistung meine zwei Wunschleistungen reinsetzt. Ich müsste dazu allerdings den SAP-Standard ändern.

VG
sapdepp

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Ich glaub nicht, dass du da was im Standard ändern musst. Wir haben sowas ähnliches bei uns schon mal umgesetzt. Da ich aber versuche möglichst wenig im KLAT zu machen kann ich dir im Detail leider nicht weiter helfen.
So wie ich das ganze verstanden habe, müsstes du ein Objekt vom Typ CL_ISHMED_SERVICE mit den von dir benötigten Leistungsdaten erzeugen und dieses dann an den KLAT-Baustein "anhängen". Evtl. über die CONNECTIONs

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
Hallo, ADT,

das Thema ist noch aktuell, ruhte nur wegen anderer Projekte. Von CONNECTIONs habe ich noch nie was gehört ... Was'n das? Ich möchte nach wie vor die im oberen Bild mit dem Pfeil markierten Leistungen automatisch als Leistungen mit einfügen im KLAT.

VG + VD
sapdepp

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
Ergänzung, damit's einfacher wird:

Es handelt sich um ein Badi auf Grundlage von N1_CORDER_PREALLOC, dort die Interface-Methode PREALLOC mit dieser Signatur:

Bild

Mein Coding dazu sieht bisher so aus:

Code: Alles auswählen.

method IF_EX_N1_CORDER_PREALLOC~PREALLOC.

  DATA: lr_prc_corder   TYPE REF TO cl_ish_prc_corder,
        lr_corder       TYPE REF TO cl_ish_corder,
        lr_comp_order   TYPE REF TO CL_ISH_COMP_ORDER,
        lr_errorhandler TYPE REF TO cl_ishmed_errorhandling,
        l_vcode         TYPE tndym-vcode,
        l_rc            TYPE ish_method_rc.

  DATA: lt_component TYPE ISH_T_COMPONENT.

  DATA: lr_main_object        type REF TO if_ish_identify_object,
        lt_additional_objects TYPE ish_t_identify_object.

  data: lr_service type REF TO cl_ishmed_service,
        lr_environment TYPE REF TO cl_ish_environment,
        ls_nlei type nlei,
        ls_nlem type nlem,
        lt_objectlist type ish_objectlist,
        lr_objectlist type REF TO ish_object,
        l_leist type nlei-leist,
        lr_cordpos  TYPE REF TO CL_ISHMED_PREREG,
*        lr_corder type REF TO cl_ish_corder,
        l_posnr type N1CORDPOSNR.

  CALL METHOD cr_corder->IF_ISH_OBJECTBASE~GET_ENVIRONMENT
    IMPORTING
      E_ENVIRONMENT = lr_environment
      .

  CALL METHOD lr_environment->GET_DATA
*    EXPORTING
*      I_TYPE         =
*      IT_TYPES       =
    IMPORTING
      E_RC           = l_rc
      ET_OBJECTLIST  = lt_objectlist
    CHANGING
      C_ERRORHANDLER = lr_errorhandler
      .

  loop at lt_objectlist REFERENCE INTO lr_objectlist.

    try.
      lr_service ?= lr_objectlist->object.
      lr_service->get_leist( RECEIVING r_leist = l_leist ).
      lr_service->get_data( IMPORTING e_nlei = ls_nlei
                                      e_nlem = ls_nlem ).

      if l_leist eq 'FLNGEEDE'.

      " Zeilen an lt_services anhängen mit neuer BA- oder BU-Leistung, 
      " sodass im KLAT diese beiden Leistungen zusätzlich angezeigt werden.
        ... so in der Art hier ...
        APPEND lr_objectlist TO lt_objectlist. "BU-Leistung
        APPEND lr_objectlist TO lt_objectlist. "BA-Leistung
        ...

      endif.

      catch cx_root.

    ENDTRY.

  endloop.

endmethod.
Ich möchte erreichen, dass in Abhängigkeit einer bestimmten Leistung FLNGEEDE an die Ref-Tabelle LT_OBJECTLIST zwei zusätzliche Zeilen mit der Referenz auf CL_ISHMED_SERVICE und den Leistungen FLNGENZBU und FLNGENZBA angehängt werden analog der vorhandenen Leistung FLNGEEDE. Wie muss das Coding aussehen, um dort zwei Append-Zeilen ranzuhängen? Muss dort noch ein CREATE OBJECT lr_service ... rein oder so ein olles ASSIGN ... ->* TO <LT_OBJECTLIST>?

Grazie!

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Da gehts du leider etwas falsch vor:
Mit CL_ISH_CORDER=>GET_T_CORDPOS musst du die Position suchen, an die die Leistungen angebunden sind.
Innerhalb der Position (CL_ISHMED_PREREG) dann mit GET_T_COMPPOS musst du die richtige Komponente für die Leistungen suchen.
Diese Komponente musst du dann auf den korrekten Typ casten.
Dann solltests du Zugriff auf die vorhandenen Leistungen haben und auch neue hinzufügen können.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
OMG. Kannst du mal bitte, bitte ein Bsp.coding posten anhand meiner Codevorlage?

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »

Code: Alles auswählen.

DATA lt_cordpos TYPE ish_t_cordpos.

FIELD-SYMBOLS <lr_cordpos> TYPE REF TO CL_ISHMED_PREREG.

cr_corder->get_t_cordpos( IMPORTING et_cordpos = lt_cordpos
                                CHANGING  cr_errorhandler = cr_errorhandler ).

LOOP AT lt_cordpos ASSIGNING <lr_cordpos>.
* Hier die jeweilige Verarbeitung rein
ENDLOOP.
Variante 1 (nicht sicher ob das so geht)

Code: Alles auswählen.

*Auslesen der Leistungen
<lr_cordpos>->get_t_service( IMPORTING et_service  = lt_service
                                CHANGING  cr_errorhandler = cr_errorhandler ).
* Hinzufügen von Leistungen
<lr_cordpos>->ADD_SERVICE( ... )
*bzw.
<lr_cordpos>->ADD_NEW_SERVICE( ... )
Variante 2

Code: Alles auswählen.

*Bestimmen der korrekten Komponente
<lr_cordpos>->GET_T_COMPPOS( IMPORTING ET_COMPONENT = lt_component
                                CHANGING  cr_errorhandler = cr_errorhandler ).
LOOP AT lt_component ASSIGNING <lr_component>.
  try.
      lr_component_service ?= <lr_component>. "<-- lr_component_service muss dem gesuchten Typ der KLAT-Komponente entsprechen
    catch cx_root.
  endtry.
  if lr_component_service is bound.
* Aufrufen der nativen Methoden der Komponente zum Aulesen/Hinzufügen der Leistung.
* Da das je Komponente unterschiedlich sein kann, kann ich hier kein Beispiel angeben.
    exit.
  endif.
endloop.
Das Coding von Variante 2 dient grundsätzlich zum Veranschaulichen wie man innerhalb eines KLATs "navigieren" kann:
CORDER (Tabelle N1CODRDER) --> hat mehrere CORDPOS (Tabelle N1VKG) --> hat mehrere COMPONENTS (Tabelle je Componentn unterschiedlich)
Normalerweise gibt es in jeder dieser Klassen auch Methoden um das jeweils übergeordnete Objekt zu bekommen.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
Besten Dank!

Der gesuchte Typ der KLAT-Komponente lautet CL_ISHMED_COMP_SERVICES laut Tabelle N1COMP. Blöd dabei ist, dass dort keine Methode dabei ist, die Leistungen addiert. Das ist doch zum Haareraufen, Mensch.

Code: Alles auswählen.

data: lr_service type REF TO cl_ishmed_service,
      lt_service TYPE ishmed_t_service_object,
      lt_cordpos TYPE ish_t_cordpos,
      lr_errorhandler TYPE REF TO cl_ishmed_errorhandling,
      lr_component_service type REF TO CL_ISHMED_COMP_SERVICES,
      lt_component TYPE ISH_T_COMPONENT.

FIELD-SYMBOLS: <lr_cordpos> TYPE REF TO CL_ISHMED_PREREG,
               <lr_service> TYPE REF TO cl_ishmed_service,
               <lr_component> TYPE REF TO IF_ISH_COMPONENT.

Code: Alles auswählen.

  cr_corder->get_t_cordpos(
    IMPORTING et_cordpos = lt_cordpos
    CHANGING  cr_errorhandler = cr_errorhandler ).

  LOOP AT lt_cordpos ASSIGNING <lr_cordpos>.
* Hier die jeweilige Verarbeitung rein

* Auslesen der Leistungen
    <lr_cordpos>->get_t_service(
      IMPORTING et_service = lt_service
      CHANGING  cr_errorhandler = lr_errorhandler ).

* Bestimmen der korrekten Komponente
    <lr_cordpos>->GET_T_COMPPOS(
      IMPORTING ET_COMPONENT = lt_component
      CHANGING  cr_errorhandler = lr_errorhandler ).

    LOOP AT lt_component ASSIGNING <lr_component>.
      TRY.
        lr_component_service ?= <lr_component>.
"<-- lr_component_service muss dem gesuchten Typ der
"KLAT-Komponente entsprechen
      CATCH cx_root.
      ENDTRY.
      IF lr_component_service IS BOUND.
* Aufrufen der nativen Methoden der Komponente zum Aulesen/Hinzufügen
* der Leistung.
* Da das je Komponente unterschiedlich sein kann, kann ich hier kein
* Beispiel angeben.
        EXIT.
      ENDIF.
    ENDLOOP.
In der Klasse CL_ISHMED_COMP_SERVICES gibt es aber zwei verdächtige Interface-Methoden:
Bild

Hast du die schon mal für sowas verwendet?

FG
sapdepp

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Die TRANSPORT_TO_SCREEN ist für die "Übertragung" auf das Dynpro (genauer in die Screen-Klasse). Die SET_DATA kenne ich nicht.
Ich hab jetzt leider keinen Zugang zum System und kann daher nicht nachschauen, welche Methoden CL_ISHMED_COMP_SERVICES sonst noch bietet, aber die Interface-Methoden von IF_ISH_COMPONENT_BASE sind sicher die falschen.
Es sollte eher direkt in der Klasse definierte, Public-Methoden für das Hinzufügen/Auslesen geben.

Hast du alternativ die von mir vorgeschlagene Variante 1 schon ausprobiert?

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
Hallo, ADT,

sorry für die späte Rückmeldung, Projekte ...

Mit der Methode ADD_NEW_SERVICE aus Variante 1 klappt es mit paar Kniffen so, wie meine Anwender es wünschen. Hast mir wieder sehr geholfen! Es kann durchaus sein, dass jetzt neue Anfragen kommen, weil die Nutzer nun sehen, was so möglich ist. ;-)

Die Klasse CL_ISHMED_COMP_SERVICES hat keine PUBLIC-Methoden, die mir hätten weiterhelfen könnten.

Vielen, vielen Dank und liebe Grüße
sapdepp

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
sapdepp hat geschrieben:Es kann durchaus sein, dass jetzt neue Anfragen kommen, weil die Nutzer nun sehen, was so möglich ist. ;-)
Reicht man denen einmal den kleinen Finger, reißen die einem glatt den Arm aus :P
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Vorbelegen Table Control im Klinischen Auftrag i.s.h.med

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
off topic
a-dead-trousers hat geschrieben:
sapdepp hat geschrieben:Es kann durchaus sein, dass jetzt neue Anfragen kommen, weil die Nutzer nun sehen, was so möglich ist. ;-)
Reicht man denen einmal den kleinen Finger, reißen die einem glatt den Arm aus :P
Gut wenn man dann bereits im Krankenhaus arbeitet ;-)

Seite 1 von 1

Vergleichbare Themen

4
Antw.
2315
Views
Feld im Klinischen Auftrag vorfüllen per Coding
von sapdepp » 13.11.2017 10:19 • Verfasst in ABAP Objects®
2
Antw.
3479
Views
QM-Auftrag --> Abrechnungsvorschrift vorbelegen
von Google » 19.07.2007 08:56 • Verfasst in ABAP® Core
16
Antw.
8770
Views
Table Control in Custom Control?
von ralf.wenzel » 29.11.2013 21:21 • Verfasst in ABAP Objects®
1
Antw.
2128
Views
Table Control
von greenhorn-007 » 20.01.2006 10:45 • Verfasst in Dialogprogrammierung
1
Antw.
2079
Views
Table Control
von amjahid » 22.11.2007 13:57 • Verfasst in ABAP® für Anfänger

Ü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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 16 Stunden von Bright4.5 1 / 344
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1987
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8586