ich habe einen ABAP geschrieben, der den Funktionsbaustein GRAPH_MATRIX_4D beinhaltet, welche durch eine interne Tabelle (gtab3) gefüllt wird.
Diese gtab3 widerum erhält ihre Daten von der internen Tabelle gtab2.
Mein Problem ist, dass in der List zwar die korrekten Daten (berechnete Durchlaufzeiten zu Aufträgen) zu bestimmten daten und/oder Werken angezeigt werden. In der Grafik aber, können zwar die Monate aus der internen Tablle dynamisch angezeigt werden, aber dann habe ich nur noch die Möglichkeit für das Werk einen manuellen Wert einzugeben, wobei dann, wenn mehrere bzw. andere Werke selektiert werden, die Beschriftung der grafik nicht mehr stimmt.
Bei dem Funktionsbaustein GRAPH_MATRIX_4D wird als erstes feld ein Typ C Feld übergeben, anschließend folgen die "Wertfelder" vom Typ F oder P. Also habe ich hier lediglich die Möglichkeit ein Textfeld (Monate) zu belegen, das in der Grafik als Beschriftungsfeld angezeigt werden kann.
Ich habe einen Hinweis gefunden, der besagt, dass für die Grafikaufbereitung keine "flachen internen Tabellen" verwendet werden sollten. Ich bin mir nicht sicher, ob ich eine "flache interne Tabelle" verwendet habe. Vielleicht könnten Ihr Euch das mal ansehen und habt eine Idee, wie ich diese Tabelle gtab3 als "tiefe interne Tabelle" anpassen kann....
CODE:
*--------------------------------------------------*
* Definition of data table gtab2 which is needed *
* for the graphical display; y1l1- y6l1 stand for * * 1 plant and 6 month. *
*--------------------------------------------------*
DATA: BEGIN OF gtab2 OCCURS 1,
mon(6) TYPE c,
werks LIKE mseg-werks, "Production Plant
y1l1 TYPE p DECIMALS 2, "Lead time A&P
y2l1 TYPE p DECIMALS 2, "Lead time CSD
y3l1 TYPE p DECIMALS 2, "Lead time Drawing
y4l1 TYPE p DECIMALS 2, "Lead time POP
y5l1 TYPE p DECIMALS 2, "Lead time PPW
y6l1 TYPE p DECIMALS 2, "Lead time PPP
y8l1 TYPE p DECIMALS 2, "Sum PPW + PPP
y7l1 TYPE p DECIMALS 2, "Lead time SH
END OF gtab2.
*-------------------------------------------------*
* Further internal table for graphical display *
* with Prod. Queue and Prod. Time summed up *
*-------------------------------------------------*
DATA: BEGIN OF gtab3 OCCURS 1,
mon(6) TYPE c,* werks LIKE mseg-werks, "ProductionPlant
* "does not work
y1l1 TYPE p DECIMALS 2, "Lead time A&P
y2l1 TYPE p DECIMALS 2, "Lead time CSD
y3l1 TYPE p DECIMALS 2, "Lead time Drawing
y4l1 TYPE p DECIMALS 2, "Lead time POP
y8l1 TYPE p DECIMALS 2, "Sum of PPP/
"Queue
y7l1 TYPE p DECIMALS 2, "Lead time SH
END OF gtab3.
[...]
MOVE itab2-mon TO gtab2-mon.
MOVE itab2-werks TO gtab2-werks.
MOVE ap_avg TO gtab2-y1l1.
MOVE csd_avg TO gtab2-y2l1.
MOVE dr_avg TO gtab2-y3l1.
MOVE pop_avg TO gtab2-y4l1.
MOVE ppw_avg TO gtab2-y5l1.
MOVE ppp_avg TO gtab2-y6l1.
MOVE sh_avg TO gtab2-y7l1.
gtab2-y8l1 = ppw_avg + ppp_avg.
APPEND gtab2.
CLEAR: ap_avg, csd_avg, dr_avg, pop_avg, ppw_avg, ppp_avg, sh_avg.
CLEAR: ap_tnd, csd_tnd, dr_tnd, pop_tnd, ppw_tnd, ppp_tnd, sh_tnd.
CLEAR gtab2.
* Sum up Prod. Time and Prod. Queue for graphical
* display MOVE itab2-mon TO gtab3-mon.
* MOVE gtab2-werks TO gtab3-werks. "does not work MOVE g_ap_avg TO gtab3-y1l1.
MOVE g_csd_avg TO gtab3-y2l1.
MOVE g_dr_avg TO gtab3-y3l1.
MOVE g_pop_avg TO gtab3-y4l1.
MOVE g_sh_avg TO gtab3-y7l1.
gtab3-y8l1 = g_ppw_avg + g_ppp_avg.
APPEND gtab3.
CLEAR gtab3.
[...]
*------------------------------------------------*
* Graphical Display of Lead Times for 1 plant, *
* selected months, 7 single steps *
*------------------------------------------------*
DATA: t1_mara type table of mara. " flache Tabelle
Types: " eigener Strukturtyp
begin of tiefe_tab_typ,
tab1 type table of mara,
* weitere felder ...
* z.b.
* name type c,
* tab2 like t1_mara,
end of tiefe_tab_typ.
DATA: tiefe_tabelle type table of tiefe_tab_typ. " tiefe Tab
Data: tt_struktur like line of tiefe_tabelle. " zugehörige Struktur
*hier wäre nun folgendes möglich:
tt_struktur-tab1[] = t1_mara[].
append tt_struktur to tiefe_tabelle.
erst einmal vielen Dank für Deine Antwort. Das Programm GRBUSG_3 habe ich mir bereits angesehen und habe auch mein Programm weitesgehend versucht daran zu orientieren.
Das Problem war allerdings, dass die Werte, die im Demoprogramm hardgecodet sind, in meinem Programm alle variabel sind und über die Selektionsmaske eingegeben werden. Deswegen habe ich den Aufbau der Tabellen nicht exakt so hinbekommen, wie es im Demoprogramm ist.
Habe ich es richtig verstanden, dass ich zunächst mehrere interne Tabellen definiere, die alle Daten beinhalten, die ich später verwenden möchte. Anschließend definiere ich eine weitere Tabelle, die eine Struktur darstellt und übergebe die vorher definierten internen Tabellen komplett als einzelne Felder dieser Struktur?
Ich werde das auf jeden fall mal so ausprobieren, vielleicht klappts ja sogar, selbst mit diesem FUBA.