*---------------------------------------------------------------------*
* Z _ B J H _ G R A P H I C S *
* *
* Autor: Bernd Haase (BJH Software) *
*---------------------------------------------------------------------*
* Import von Grafiken für SmartForms oder SapScript *
* Laden von BMP (oder TIF) Grafiken für die Benutzung dieser Grafiken *
* in SmartForms oder SapScript-Formularen (Tabelle STXBITMAPS). Es *
* könnte zwar auch der Baustein genutzt werden, jedoch bietet sich mit*
* diesem Programm die Möglichkeit, ohne Batch-Input einen Schwung von *
* Grafiken anlegen zu können. *
*---------------------------------------------------------------------*
* (TX) FB Input-Datei, Excel_in *
*---------------------------------------------------------------------*
* 16.02.2005 BHaa: Programm erstellt *
* 18.02.2005 BHaa: Einleseroutine für Excel eingefügt V1.0*
*---------------------------------------------------------------------*
REPORT z_bjh_graphics .
INCLUDE .
TABLES:
stxbitmaps.
DATA:
anzahl(6) TYPE n,
anzahl_fehler LIKE anzahl,
anzahl_geloescht LIKE anzahl,
anzahl_loeschfehler LIKE anzahl,
anzahl_nicht_ersetzt LIKE anzahl,
fb_ftp(1) TYPE c,
grafik_anlegen(1) TYPE c.
DATA:
wa_dateiname LIKE rlgrap-filename,
wa_bild_titel LIKE bapisignat-prop_value,
wa_stxbitmaps-tdname LIKE stxbitmaps-tdname,
wa_stxbitmaps-tdbtype LIKE stxbitmaps-tdbtype,
wa_stxbitmaps-resolution LIKE stxbitmaps-resolution,
wa_stxbitmaps-resident LIKE stxbitmaps-resident,
wa_stxbitmaps-autoheight LIKE stxbitmaps-autoheight,
wa_bildweite LIKE stxbitmaps-widthpix,
wa_bildhoehe LIKE stxbitmaps-heightpix.
DATA:
BEGIN OF wa_in,
grafik(30) TYPE c, "maximal 70 STXBITMAPS-Name
dateiname(100) TYPE c, "maximal 128 rlgrap-filename
titel(60) TYPE c,
END OF wa_in,
BEGIN OF ds_in,
satz LIKE wa_in,
END OF ds_in,
dstab_in LIKE TABLE OF ds_in.
*---------------------------------------------------------------------*
* *
* A u s w a h l b i l d s c h i r m *
* *
*---------------------------------------------------------------------*
* Parameter zum Einlesen und Überschreiben der Grafiken
SELECTION-SCREEN: BEGIN OF BLOCK a1 WITH FRAME TITLE text-901.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-920 FOR FIELD pmxexcel.
* Daten einlesen aus Excel-Tabelle (nur bei lokal möglich)
PARAMETERS pmxexcel TYPE c DEFAULT ' ' AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-922 FOR FIELD pmersetz.
* soll bereits vorhandene Grafik mit gleichen Namen ersetzt werden
* vorhandene Grafik ersetzen
PARAMETERS pmersetz TYPE c DEFAULT ' ' AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN: END OF BLOCK a1.
* Steuerung, wohin Datei geschrieben werden soll (Plattform und Name)
* B01=V1.0 Datentransfer. Quellsystem und Quelldatei
* S01=WS-Download=X / FTP=blank
* S02=Titelleiste übertragen J/N
* S05=Datei auf AL11 nach FTP löschen
* S06=Meldungen am Bildschirm
INCLUDE zmgl_bjh_ftp_data.
INITIALIZATION.
* Ein-/Ausgabedefinition für FTP-Datentransfer
MOVE 'EK_STRAT_GET' TO ftp_key.
MOVE ' ' TO pm_titel.
IF sy-batch = 'X'.
* Hintergrundprogramm, muß über FTP laufen
MOVE ' ' TO pm_ftp.
MOVE 'bmp_grafik.txt' TO pmout.
ELSE.
* Sichtprogramm, Speichern standardmäßig auf PC
MOVE 'X' TO pm_ftp.
CASE sy-uname.
WHEN 'RRENAE'.
MOVE 'd:\haase\sap\daten\bmp_grafik.txt' TO pmout.
WHEN OTHERS.
MOVE 'd:\bmp_grafik.txt' TO pmout.
ENDCASE.
ENDIF.
***********************************************************************
* *
* P R O G R A M M S T A R T *
* *
***********************************************************************
START-OF-SELECTION.
CLEAR: anzahl_nicht_ersetzt, anzahl_loeschfehler.
* Daten einlesen aus einer txt-Tabelle oder einer Excel-Datei
IF pmxexcel = 'X'.
PERFORM upro-excel_einlesen.
ELSE.
PERFORM upro-ftp_datei_in
TABLES dstab_in
USING ds_in.
ENDIF.
* konnten Daten eingelesen werden
DESCRIBE TABLE dstab_in LINES anzahl.
IF anzahl < 1.
WRITE: / icon_red_light, 'Keine Datensätze eingelesen.'.
ELSE.
WRITE: / icon_green_light,
anzahl, 'Datensätze eingelesen.'.
MOVE 'X' TO wa_stxbitmaps-autoheight.
CLEAR: anzahl, anzahl_fehler, anzahl_geloescht,
anzahl_nicht_ersetzt, anzahl_loeschfehler.
LOOP AT dstab_in INTO ds_in.
* Bild generell in Großbuchstaben ablegen
TRANSLATE ds_in-satz-grafik TO UPPER CASE.
* um Typenkonflikte zu vermeiden
MOVE ds_in-satz-grafik TO wa_stxbitmaps-tdname.
MOVE ds_in-satz-dateiname TO wa_dateiname.
MOVE ds_in-satz-titel TO wa_bild_titel.
* prüfen, ob Datei bereits angelegt ist
SELECT SINGLE widthpix heightpix FROM stxbitmaps
INTO (wa_bildweite, wa_bildhoehe)
WHERE tdobject = 'GRAPHICS'
AND tdname = wa_stxbitmaps-tdname
AND tdid = 'BMAP'
AND tdbtype = 'BCOL'. "Grafik ist farbig
IF sy-subrc = 0.
* Grafik bereits vorhanden
IF pmersetz = 'X'.
* Grafik kann ersetzt werden, diese dazu vorher löschen
DELETE FROM stxbitmaps
WHERE tdobject = 'GRAPHICS'
AND tdname = wa_stxbitmaps-tdname
AND tdid = 'BMAP'
AND tdbtype = 'BCOL'.
IF sy-subrc = 0.
* Grafik erfolgreich gelöscht, erneutes Anlegen erlaubt
MOVE 'X' TO grafik_anlegen.
ADD 1 TO anzahl_geloescht.
ELSE.
* Grafik konnte nicht gelöscht werden, dieses sich merken
MOVE 'F' TO grafik_anlegen.
ADD 1 TO anzahl_loeschfehler.
ENDIF.
ELSE.
* Grafiken sollen nicht überschrieben werden
MOVE ' ' TO grafik_anlegen.
ADD 1 TO anzahl_nicht_ersetzt.
ENDIF.
ELSE.
* Grafik ist noch nicht angelegt, Anlegen ohne Probleme möglich
MOVE 'X' TO grafik_anlegen.
ENDIF.
IF grafik_anlegen = 'X'.
* neue Grafik einfügen oder vorhandene Grafik überschreiben.
* nicht den Funktionsbaustein nutzen, da dort die Eingabe eines
* Dateinamen von außen her nicht steuerbar ist. Die Einleseroutine ist
* jedoch ein Unterprogramm in diesem Funktionsbaustein
PERFORM graphic_import_bds(saplstxbitmaps)
USING wa_dateiname
wa_stxbitmaps-tdname
'GRAPHICS'
'BMAP'
'BCOL'
wa_bild_titel
wa_stxbitmaps-resident
wa_stxbitmaps-autoheight
CHANGING wa_stxbitmaps-resolution.
*CALL FUNCTION 'SAPSCRIPT_IMPORT_GRAPHIC_BDS'
* EXPORTING
* i_object = 'GRAPHICS'
* i_name = wa_stxbitmaps-tdname
* i_id = 'BMAP'
* i_btype = 'BCOL'
* i_resident = ' '
* i_autoheight = 'X'
* IMPORTING
* e_name = wa_stxbitmaps-tdname
* e_btype = wa_stxbitmaps-tdbtype
* e_resolution = wa_stxbitmaps-resolution
* e_resident = wa_stxbitmaps-resident
* e_autoheight = wa_stxbitmaps-autoheight
* EXCEPTIONS
* invalid_object = 1
* invalid_id = 2
* invalid_btype = 3
* conversion_failed = 4
* enqueue_failed = 5
* canceled = 6
* OTHERS = 7.
IF sy-subrc = 0.
ADD 1 TO anzahl.
ELSE.
ADD 1 TO anzahl_fehler.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
* statistische Übersicht
IF pmmeld = 'X'.
IF anzahl_geloescht > 0
OR anzahl_loeschfehler > 0.
* Probleme beim Löschen aufgetreten
IF anzahl_loeschfehler > 0.
WRITE: / icon_red_light, anzahl_loeschfehler,
'Grafiken konnten nicht gelöscht werden'.
ELSE.
WRITE: / icon_green_light,
'Alle Grafiken ohne Probleme gelöscht'.
ENDIF.
* wieviele Bilder konnten gelöscht werden. Waren alle Löschungen
* erfolgreich ohne Probleme, grüne Ampel, sonst gelb
IF anzahl_geloescht > 0.
IF anzahl_loeschfehler = 0.
WRITE: / icon_green_light.
ELSE.
WRITE: / icon_yellow_light.
ENDIF.
WRITE: anzahl_geloescht, 'Grafiken sind gelöscht worden'.
ELSE.
WRITE: / icon_red_light,
'Es wurden keine Grafiken gelöscht !'.
ENDIF.
ENDIF.
* sollen vorhandene Grafiken nicht ersetzt / überschrieben werden
IF pmersetz = ' '.
IF anzahl_nicht_ersetzt = 0.
WRITE : / icon_green_light,
'Alle Grafiken sind neue Bilder'.
ELSE.
WRITE : / icon_yellow_light,
anzahl_nicht_ersetzt, 'Grafiken sind schon vorhanden.'.
ENDIF.
ENDIF.
* Statistik über das Anlegen von Grafiken
IF anzahl < 1.
WRITE: / icon_yellow_light,
'Es wurden keine Grafiken angelegt'.
ELSE.
IF anzahl_fehler = 0.
WRITE: / icon_green_light.
ELSE.
WRITE: / icon_yellow_light.
ENDIF.
WRITE: anzahl, 'Grafiken wurden angelegt'.
IF anzahl_fehler = 0.
WRITE: / icon_green_light,
'Alle Grafiken ohne Probleme angelegt'.
ELSE.
WRITE: / icon_red_light, anzahl_fehler,
'Grafiken konnten nicht angelegt werden'.
ENDIF.
ENDIF.
ENDIF.
END-OF-SELECTION.
EXIT.
*---------------------------------------------------------------------*
* E X C E L _ E I N L E S E N *
*---------------------------------------------------------------------*
* einlesen der Excel-Tabelle. Da diese Aktion nicht so häufig ist, *
* wird der Standarddateiname verwendet, der im Einstiegsbild vorgege- *
* ben wird. Nur die Extension wird gegen xls abgetauscht. *
*---------------------------------------------------------------------*
* ]=> dstab_in: Tabelle mit eingelesenen Daten. *
*---------------------------------------------------------------------*
FORM upro-excel_einlesen.
DATA:
quelldatei LIKE rlgrap-filename,
zw_row LIKE alsmex_tabline-row,
wa_excel LIKE alsmex_tabline,
BEGIN OF itab_excel OCCURS 0.
INCLUDE STRUCTURE alsmex_tabline.
DATA:
END OF itab_excel.
MOVE pmout TO quelldatei.
REPLACE '.txt' WITH '.xls' INTO quelldatei.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = quelldatei
i_begin_col = 1
i_begin_row = 1
i_end_col = 11
i_end_row = 50000
TABLES
intern = itab_excel
* EXCEPTIONS
* INCONSISTENT_PARAMETERS = 1
* UPLOAD_OLE = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SORT itab_excel BY row col.
CLEAR: dstab_in, ds_in, zw_row. REFRESH: dstab_in.
* Excel-Datei hat festes Format, dieses mit dem Aufbau hier abgleichen
LOOP AT itab_excel INTO wa_excel.
IF wa_excel-row <> zw_row.
IF NOT zw_row IS INITIAL
AND NOT ds_in-satz-grafik IS INITIAL.
* nur Sätze anlegen, wo der Iata-Flughafencode gefüllt ist
APPEND ds_in TO dstab_in.
ENDIF.
MOVE wa_excel-row TO zw_row.
CLEAR ds_in-satz.
ENDIF.
CASE wa_excel-col.
WHEN 1.
MOVE wa_excel-value TO ds_in-satz-dateiname.
WHEN 2.
MOVE wa_excel-value TO ds_in-satz-grafik.
WHEN 3.
MOVE wa_excel-value TO ds_in-satz-titel.
ENDCASE.
ENDLOOP.
IF NOT zw_row IS INITIAL.
* es wurde mindestens 1 Datensatz gefunden, nun noch die Tabelle für
* die Anzeige um Grafiken ergänzen
APPEND ds_in TO dstab_in.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* F T P _ D A T E I _ I N *
*---------------------------------------------------------------------*
* Datei einlesen *
*---------------------------------------------------------------------*
* ]=> ptab_in: Tabelle mit den eingelesenen Daten *
* =>] wa_in: Struktur für die Tabelle (wird bei Unix benötigt) *
*---------------------------------------------------------------------*
FORM upro-ftp_datei_in
TABLES ptab_in
USING wa_in.
* gedrehte Logik für das Schreiben auf FTP. Schreiben auf Unix nicht
* über Oberflächensteuerung möglich
IF pm_ftp = 'X'.
MOVE ' ' TO fb_ftp.
ELSE.
MOVE 'X' TO fb_ftp.
ENDIF.
CALL FUNCTION 'Z_F_DATEI_IN'
EXPORTING
ds_in = wa_in
p_ftp_transfer = fb_ftp
p_ftp_key = ftp_key
p_dateiname = pmout
p_datei_ext = pmdattyp
* P_DATEI_ERSETZ =
* P_TITEL = ' '
p_meld = pmmeld
p_al11_del = i_ad_del
* IMPORTING
p_anzahl = anzahl
p_anzahl_fehler = anzahl_fehler
* UEB_IN =
TABLES
dstab_in = ptab_in.
ENDFORM.
***** Ende *****
* Copyright BJH Software, Datei überarbeitet am: 21.5.2005