Текущее время: Ср, июн 18 2025, 20:52

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Программа BC430_CHECK
СообщениеДобавлено: Сб, окт 30 2004, 12:25 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, сен 17 2004, 08:10
Сообщения: 1024
Господа!

У кого есть исходник программы BC430_CHECK? Скиньте, плз, если не сложно!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 01 2004, 12:18 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, ноя 01 2004, 12:17
Сообщения: 298
Пол: Мужской
REPORT BC430_CHECK.

CALL SCREEN 1100.

* Includes f№r das Image Control
INCLUDE SIMAGECONTROLCLASSDEF.
INCLUDE SIMAGECONTROLCLASSIMPL.
* Include f№r die Icons
INCLUDE <ICON>.

***********************************************************************
* Das Programm pr№ft f№r die ?bungen 2 - 6 die von den Teilnehmern des*
* BC430 (ABAP Dictionary) angelegten Objekte auf Korrektheit. Die *
* angelegten Tabellen werden mit Beispieldaten gef№llt. *
***********************************************************************

TABLES: BC430_DS, BC430_FEEDBACK, BC430_ERROR, BC430_PROT.
TABLES: X030L.

TYPES: BEGIN OF FB_TAB,
COLOR(1),
TEXT(100),
END OF FB_TAB.

TYPES: FLAG(1) TYPE C.

DATA: FB_TAB TYPE FB_TAB OCCURS 20 WITH HEADER LINE.
DATA: TEXT_VAR(50) TYPE C,
TEXT_VAR2(50) TYPE C.

DATA: NAME_EMPLOY TYPE TABNAME, "Employee table
NAME_CREW TYPE TABNAME, "Crew table
NAME_DEPMENT TYPE TABNAME, "Department table
NAME_DEPMENTT TYPE TABNAME, "Text table for departments
NAME_CHANGE TYPE TABNAME, "Include for change info
NAME_AIRP_APP TYPE TABNAME, "Append Airport
INDX_EMPNAME TYPE INDEXID, "Name-Index for emp. table
INDX_EMPAREA TYPE INDEXID, "Area-Index for emp. table
DOMA_AREA TYPE DOMNAME. "Domain for area


DATA: ERRORS TYPE BC430_ERROR OCCURS 20 WITH HEADER LINE,
TEMP_ERRORS TYPE BC430_ERROR OCCURS 20 WITH HEADER LINE,
NAMES_WA TYPE BC430_NAMES,
SUCCESS_WA TYPE BC430_SUCCESS.

DATA: TCODE LIKE SY-TCODE,
SUBRC LIKE SY-SUBRC.

DATA: COURSE_NAME(6),
COURSE_GROUP(2).

DATA: KAP2(1),
KAP3(1),
KAP4(1),
KAP5(1),
KAP6(1).

DATA: JUST_STARTED TYPE FLAG VALUE ' '.

DATA: BEGIN OF FIELD_TEXTS OCCURS 20,
FIELD TYPE FIELDNAME,
TEXT(30) TYPE C,
END OF FIELD_TEXTS.

* Deklarationen f№r das Image Control
DATA: PICTURE1 TYPE REF TO C_IMAGE_CONTROL.
DATA: PICTURE2 TYPE REF TO C_IMAGE_CONTROL.

DATA URL(255) TYPE C. " URL-field
DATA URL2(255) TYPE C.
DATA FB_CONT_CRE(1) TYPE C VALUE 'N'. "Control for FB already created?

* Makros
DEFINE WRITE_FB.
FB_TAB-COLOR = &1.
FB_TAB-TEXT = &2.
APPEND FB_TAB.
END-OF-DEFINITION.

DEFINE WRITE_FB_VAR.
CLEAR TEXT_VAR.
FB_TAB-COLOR = &1.
TEXT_VAR = &2.
CONCATENATE TEXT_VAR &3 INTO FB_TAB-TEXT SEPARATED BY ' '.
APPEND FB_TAB.
END-OF-DEFINITION.

DEFINE WRITE_FB_TWO_VAR.
CLEAR TEXT_VAR.
CLEAR TEXT_VAR2.
FB_TAB-COLOR = &1.
TEXT_VAR = &2.
TEXT_VAR2 = &4.
CONCATENATE TEXT_VAR &3 TEXT_VAR2 &5 INTO FB_TAB-TEXT
SEPARATED BY ' '.
APPEND FB_TAB.
END-OF-DEFINITION.

DEFINE WRITE_EMPTY_LINE.
WRITE_FB 'N' ' '.
END-OF-DEFINITION.

DEFINE WRITE_FB_EXERCISE.
FB_TAB-COLOR = 'U'.
CLEAR TEXT_VAR.
TEXT_VAR = '?bung'(001).
CONCATENATE TEXT_VAR &1 INTO FB_TAB-TEXT SEPARATED BY ' '.
APPEND FB_TAB.
END-OF-DEFINITION.

* Makros f№r das Schreiben des Feedback
DEFINE PREDEFINED_OBJ_NOT_ACTIVE.
WRITE_FB 'E' '?bungsumgebung nicht korrekt eingerichtet!'(010).
WRITE_FB 'E' 'Verstфndigen Sie bitte den Referenten!'(011).
WRITE_FB 'E' 'Ursache: Vorlagen nicht aktiv!!'(013).
END-OF-DEFINITION.

DEFINE UNKNOWN_ERROR.
WRITE_FB 'E' '?bungsumgebung nicht korrekt eingerichtet!'(010).
WRITE_FB 'E' 'Verstфndigen Sie bitte den Referenten!'(011).
WRITE_FB 'E' 'Ursache: Kann nicht ermittelt werden!!'(014).
END-OF-DEFINITION.

DEFINE DDIC_INTERFACE_ERROR.
WRITE_FB 'E' '?bungsumgebung nicht korrekt eingerichtet!'(010).
WRITE_FB 'E' 'Verstфndigen Sie bitte den Referenten!'(011).
WRITE_FB 'E' 'Ursache: Problem in DD-Schnittstellen!!'(012).
END-OF-DEFINITION.

DEFINE FILL_TEXT.
FIELD_TEXTS-FIELD = &1.
FIELD_TEXTS-TEXT = &2.
APPEND FIELD_TEXTS.
END-OF-DEFINITION.

* Makros zur Modifikation der Screen Attribute
DEFINE SET_SCREEN_INP_REQUIRED.
LOOP AT SCREEN.
IF SCREEN-NAME = &1.
SCREEN-REQUIRED = '1'.
SCREEN-INPUT = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
END-OF-DEFINITION.

DEFINE SET_SCREEN_INP.
LOOP AT SCREEN.
IF SCREEN-NAME = &1.
SCREEN-INPUT = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
END-OF-DEFINITION.

DEFINE SET_SCREEN_NO_INP.
LOOP AT SCREEN.
IF SCREEN-NAME = &1.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
END-OF-DEFINITION.

* Makros zum Handling der Bilder
DEFINE LOAD_GIF_PICTURE.
PERFORM LOAD_PIC_FROM_DB
TABLES PIC_DATA_FB
USING &1
CHANGING PIC_SIZE_FB.
END-OF-DEFINITION.

***********************************************************************
* MODULE STATUS_1100 *
***********************************************************************

MODULE STATUS_1100 OUTPUT.

SET TITLEBAR 'CHECK_TITLE'.
SET PF-STATUS 'CHECK'.
* Hole die bereits bekannten Namen f№r die Teilnehmerobjekte
PERFORM GET_NAMES.
* Lese die Infos zu den bisherigen Interaktionen mit dem Report
PERFORM GET_STATE_INFO.
IF JUST_STARTED = ' '.
PERFORM DETERMINE_ACTIVE_CHAPTER.
PERFORM FILL_FIELD_TEXTS.
JUST_STARTED = 'X'.
ENDIF.
* Pr№fe, ob die Vorlagen aktuelle Daten enthalten. Vorlagen sind die
* Tabellen SEMPLOYES, SDEPMENT, SDEPMENTT und SFLCREW.
PERFORM CHECK_PREREQUISITES.
* Modifiziere die Screen Attribute anhand des aktiven Kapitels
PERFORM MODIFY_SCREEN_1100.

* Baue das Einstiegsbild auf
CREATE OBJECT PICTURE1.
CALL METHOD PICTURE1->CREATE_CONTROL
EXPORTING DYNNR = '1100'
REPID = 'BC430_CHECK'
STYLE = WS_BORDER
CONTAINER = 'PICTURE1'.
* Setze den Display Mode
CALL METHOD PICTURE1->SET_DISPLAY_MODE
EXPORTING DISPLAY_MODE = DISPLAY_MODE_STRETCH.
* Lade das Bild aus der R/3 Databank
DATA PIC_DATA LIKE W3MIME OCCURS 0.
DATA PIC_SIZE TYPE I.
* Lade das Bild aus der WebRFC Datenbank in die interne
* Tabelle pic_data.
PERFORM LOAD_PIC_FROM_DB
TABLES PIC_DATA
USING 'BC430_GRAFIK'
CHANGING PIC_SIZE.
* Hole eine URL vom Data Provider durch Export der pic_data.
CLEAR URL.
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
TYPE = 'image'
SUBTYPE = CNDP_SAP_TAB_UNKNOWN
SIZE = PIC_SIZE
LIFETIME = CNDP_LIFETIME_TRANSACTION
TABLES
DATA = PIC_DATA
CHANGING
URL = URL
EXCEPTIONS
OTHERS = 1.
* Lade das Bild №ber die vom Data Provider generierte URL
IF SY-SUBRC = 0.
CALL METHOD PICTURE1->LOAD_IMAGE_FROM_URL
EXPORTING URL = URL.
ENDIF.

ENDMODULE.

***********************************************************************
* MODULE USER_COMMAND_1100 *
***********************************************************************

MODULE USER_COMMAND_1100.

CASE TCODE.
WHEN 'ABBR'.
LEAVE. SET SCREEN 0. LEAVE SCREEN.
CALL METHOD PICTURE1->DESTROY_CONTROL.
WHEN 'BACK'.
LEAVE. SET SCREEN 0. LEAVE SCREEN.
CALL METHOD PICTURE1->DESTROY_CONTROL.
WHEN 'AUSF'.
PERFORM PUT_NAMES.
REFRESH FB_TAB.
ERRORS = ' '.
LEAVE TO LIST-PROCESSING.
IF KAP2 = 'X'.
PERFORM CHECK_KAP_2.
ENDIF.
IF KAP3 = 'X'.
PERFORM CHECK_KAP_3.
ENDIF.
IF KAP4 = 'X'.
PERFORM CHECK_KAP_4.
ENDIF.
IF KAP5 = 'X'.
PERFORM CHECK_KAP_5.
ENDIF.
IF KAP6 = 'X'.
PERFORM CHECK_KAP_6.
ENDIF.
WHEN 'CHAP'.
PERFORM MODIFY_SCREEN_1100.
ENDCASE.

ENDMODULE.

***********************************************************************
* MODULE CANCEL: Verlassen des Bildes ohne Pr№fungen *
***********************************************************************

MODULE CANCEL INPUT.

LEAVE PROGRAM.

ENDMODULE.


***********************************************************************
* FORM GET_NAMES *
* Liest die Namen der Objekte, die die Teilnehmer in vorhergehenden *
* ?bungen schon eingegeben haben aus der BC430_NAMES. *
* In der ersten ?bung sind noch keine Namen vorhanden. F№r die *
* Standard-User BC430-xx werden die vorgegebenen Namen ermittelt. *
***********************************************************************

FORM GET_NAMES.

SELECT SINGLE * FROM BC430_NAMES INTO NAMES_WA
WHERE COURSE_USER = SY-UNAME.

IF SY-SUBRC NE 0.
MOVE SY-UNAME(6) TO COURSE_NAME.
IF COURSE_NAME = 'BC430-'.
PERFORM GET_DEFAULT_NAMES.
ENDIF.
ELSE.
NAME_EMPLOY = NAMES_WA-SEMPLOYES.
NAME_CREW = NAMES_WA-SFLCREW.
NAME_DEPMENT = NAMES_WA-SDEPMENT.
NAME_DEPMENTT = NAMES_WA-SDEPMENTT.
NAME_CHANGE = NAMES_WA-INCL_CHANGE.
NAME_AIRP_APP = NAMES_WA-APP_AIRPORT.
INDX_EMPNAME = NAMES_WA-NAME_INDX.
INDX_EMPAREA = NAMES_WA-AREA_INDX.
DOMA_AREA = NAMES_WA-DOMA_AREA.
ENDIF.

ENDFORM.

***********************************************************************
* FORM PUT_NAMES *
* Sichert die eingegebenen Namen in BC430_NAMES. *
***********************************************************************

FORM PUT_NAMES.

NAMES_WA-COURSE_USER = SY-UNAME.
NAMES_WA-SEMPLOYES = NAME_EMPLOY.
NAMES_WA-SFLCREW = NAME_CREW.
NAMES_WA-SDEPMENT = NAME_DEPMENT.
NAMES_WA-SDEPMENTT = NAME_DEPMENTT.
NAMES_WA-INCL_CHANGE = NAME_CHANGE.
NAMES_WA-APP_AIRPORT = NAME_AIRP_APP.
NAMES_WA-NAME_INDX = INDX_EMPNAME.
NAMES_WA-AREA_INDX = INDX_EMPAREA.
NAMES_WA-DOMA_AREA = DOMA_AREA.

INSERT INTO BC430_NAMES VALUES NAMES_WA.
IF SY-SUBRC NE 0.
UPDATE BC430_NAMES FROM NAMES_WA.
ENDIF.
COMMIT WORK.

ENDFORM.

***********************************************************************
* FORM GET_DEFAULT_NAMES *
* Falls der User ein Standard-User ist (User-Id BC430-xx) sind die *
* Namen der anzulegenden Objekte schon bekannt. Diese Defaultnamen *
* werden in dieser Form aus dem User ermittelt. *
***********************************************************************

FORM GET_DEFAULT_NAMES.

MOVE SY-UNAME+6(2) TO COURSE_GROUP.

MOVE 'ZEMPLOY' TO NAME_EMPLOY.
MOVE COURSE_GROUP TO NAME_EMPLOY+7.

MOVE 'ZDEPMENT' TO NAME_DEPMENT.
MOVE COURSE_GROUP TO NAME_DEPMENT+8.

MOVE 'ZDEPMENTT' TO NAME_DEPMENTT.
MOVE COURSE_GROUP TO NAME_DEPMENTT+9.

MOVE 'ZFLCREW' TO NAME_CREW.
MOVE COURSE_GROUP TO NAME_CREW+7.

MOVE 'ZCHANGE' TO NAME_CHANGE.
MOVE COURSE_GROUP TO NAME_CHANGE+7.

ENDFORM.

***********************************************************************
* FORM GET_STATE_INFO *
* Liest Infos №ber Erfolg in bisherigen ?bungen aus BC430_SUCCESS. *
***********************************************************************

FORM GET_STATE_INFO.

SELECT SINGLE * FROM BC430_SUCCESS INTO SUCCESS_WA
WHERE COURSE_USER = SY-UNAME.

IF SY-SUBRC NE 0. "Set default if nothing is found
SUCCESS_WA-COURSE_USER = SY-UNAME.
SUCCESS_WA-CHAPTER2 = 'N'.
SUCCESS_WA-CHAPTER3 = 'N'.
SUCCESS_WA-CHAPTER4 = 'N'.
SUCCESS_WA-CHAPTER5 = 'N'.
SUCCESS_WA-CHAPTER6 = 'N'.
SUCCESS_WA-EMPLOY_FILLED = 'N'.
SUCCESS_WA-DEPMENT_FILLED = 'N'.
SUCCESS_WA-DEPMENTT_FILLED = 'N'.
SUCCESS_WA-SFLCREW_FILLED = 'N'.
ENDIF.

ENDFORM.

***********************************************************************
* FORM PUT_STATE_INFO *
* Schreibt Infos №ber Erfolg bzw. Mi?erfolg in BC430_SUCCESS *
***********************************************************************

FORM PUT_STATE_INFO.

INSERT INTO BC430_SUCCESS VALUES SUCCESS_WA.
IF SY-SUBRC NE 0.
UPDATE BC430_SUCCESS FROM SUCCESS_WA.
ENDIF.
COMMIT WORK.

ENDFORM.

************************************************************************
* FORM DETERMINE_ACTIVE_CHAP *
* Bestimmt das gerade bearbeitete Kapitel. *
************************************************************************

FORM DETERMINE_ACTIVE_CHAPTER.

KAP2 = 'X'.
KAP3 = ' '.
KAP4 = ' '.
KAP5 = ' '.
KAP6 = ' '.

IF SUCCESS_WA-CHAPTER2 = 'Y'.
KAP2 = ' '.
KAP3 = 'X'.
IF SUCCESS_WA-CHAPTER3 = 'Y'.
KAP3 = ' '.
KAP4 = 'X'.
IF SUCCESS_WA-CHAPTER4 = 'Y'.
KAP4 = ' '.
KAP5 = 'X'.
IF SUCCESS_WA-CHAPTER5 = 'Y'.
KAP5 = ' '.
KAP6 = 'X'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.


ENDFORM.

************************************************************************
* FORM CHECK_PREREQUISITES *
* Der Report kopiert die Daten aus SEMPLOYES, SDEPMENT, SDEPMENTT, *
* und SFLCREW in die entsprechenden Tabellen der Teilnehmer. *
* Damit dies korrekt funktioniert sind zwei Pr№fungen erforderlich: *
* 1) Falls eine der Tabellen leer ist, werden die Daten aufgebaut *
* 2) Falls der Aufbau der Daten zu lange zur№ckliegt, kann es sein das*
* sie nicht zu den anderen Daten im Flugmodell (SPFLI, SFLIGHT) *
* passen. Falls die Daten nicht an diesem oder dem Vortag aufgebaut*
* wurden, werden sie erneut aufgebaut. *
************************************************************************

FORM CHECK_PREREQUISITES.

DATA: START_FILL_REPORT(1) VALUE '0',
NEWEST_CR_DATE TYPE SY-DATUM,
ENTR_EMPLOYES TYPE I,
ENTR_DEPMENT TYPE I,
ENTR_DEPMENTT TYPE I,
ENTR_CREW TYPE I.

* Erste Pr№fung: Enthalten die Tabellen Daten
* BC430_FILL wird gestartet falls eine Tabelle leer ist.
SELECT COUNT(*) FROM SEMPLOYES INTO ENTR_EMPLOYES UP TO 2 ROWS.
SELECT COUNT(*) FROM SDEPMENT INTO ENTR_DEPMENT UP TO 2 ROWS.
SELECT COUNT(*) FROM SDEPMENTT INTO ENTR_DEPMENTT UP TO 2 ROWS.
SELECT COUNT(*) FROM SFLCREW INTO ENTR_CREW UP TO 2 ROWS.

IF ENTR_EMPLOYES = 0 OR ENTR_DEPMENT = 0 OR
ENTR_DEPMENTT = 0 OR ENTR_CREW = 0.
START_FILL_REPORT = '1'.
ENDIF.

* Zweite Pr№fung: Wann wurden Daten zuletzt aufgebaut
* Info №ber letzten Aufbau steht in BC430_DS
SELECT * FROM BC430_DS.
IF BC430_DS-CR_DATE GT NEWEST_CR_DATE.
NEWEST_CR_DATE = BC430_DS-CR_DATE.
ENDIF.
ENDSELECT.

* Falls BC430_DS leer ist, wird BC430_FILL gestartet
IF SY-SUBRC > 0.
START_FILL_REPORT = '1'.
ENDIF.

* Falls BC430_FILL nicht an diesem oder dem vorhergehenden
* Tag lief, wird er erneut aufgerufen
NEWEST_CR_DATE = NEWEST_CR_DATE + 1.
IF NEWEST_CR_DATE LT SY-DATUM.
START_FILL_REPORT = '1'.
ENDIF.

* Starte BC430_FILL
IF START_FILL_REPORT = '1'.
SUBMIT BC430_FILL AND RETURN.
ENDIF.

ENDFORM.

***********************************************************************
* FORM MODIFY_SCREEN_1100 *
* ?ndere die Attribute des Screens in Abhфngigkeit vom Kapitel. *
***********************************************************************

FORM MODIFY_SCREEN_1100.

IF KAP2 = 'X'.
SET_SCREEN_INP_REQUIRED 'NAME_EMPLOY'.
SET_SCREEN_INP_REQUIRED 'NAME_DEPMENT'.
SET_SCREEN_INP_REQUIRED 'NAME_CHANGE'.
SET_SCREEN_NO_INP 'NAME_CREW'.
SET_SCREEN_NO_INP 'NAME_DEPMENTT'.
SET_SCREEN_NO_INP 'NAME_AIRP_APP'.
SET_SCREEN_NO_INP 'INDX_EMPNAME'.
SET_SCREEN_NO_INP 'INDX_EMPAREA'.
SET_SCREEN_NO_INP 'DOMA_AREA'.
ENDIF.
IF KAP3 = 'X'.
SET_SCREEN_INP_REQUIRED 'NAME_EMPLOY'.
SET_SCREEN_INP_REQUIRED 'NAME_DEPMENT'.
SET_SCREEN_INP_REQUIRED 'NAME_CHANGE'.
SET_SCREEN_INP_REQUIRED 'NAME_CREW'.
SET_SCREEN_NO_INP 'NAME_DEPMENTT'.
SET_SCREEN_NO_INP 'NAME_AIRP_APP'.
SET_SCREEN_INP_REQUIRED 'INDX_EMPNAME'.
SET_SCREEN_INP 'INDX_EMPAREA'.
SET_SCREEN_NO_INP 'DOMA_AREA'.
ENDIF.
IF KAP4 = 'X'.
SET_SCREEN_INP_REQUIRED 'NAME_EMPLOY'.
SET_SCREEN_INP_REQUIRED 'NAME_DEPMENT'.
SET_SCREEN_NO_INP 'NAME_CHANGE'.
SET_SCREEN_INP_REQUIRED 'NAME_CREW'.
SET_SCREEN_INP 'NAME_DEPMENTT'.
SET_SCREEN_NO_INP 'NAME_AIRP_APP'.
SET_SCREEN_NO_INP 'INDX_EMPNAME'.
SET_SCREEN_NO_INP 'INDX_EMPAREA'.
SET_SCREEN_INP_REQUIRED 'DOMA_AREA'.
ENDIF.
IF KAP5 = 'X'.
SET_SCREEN_INP_REQUIRED 'NAME_EMPLOY'.
SET_SCREEN_NO_INP 'NAME_DEPMENT'.
SET_SCREEN_NO_INP 'NAME_CHANGE'.
SET_SCREEN_INP_REQUIRED 'NAME_CREW'.
SET_SCREEN_NO_INP 'NAME_DEPMENTT'.
SET_SCREEN_NO_INP 'NAME_AIRP_APP'.
SET_SCREEN_NO_INP 'INDX_EMPNAME'.
SET_SCREEN_NO_INP 'INDX_EMPAREA'.
SET_SCREEN_NO_INP 'DOMA_AREA'.
ENDIF.
IF KAP6 = 'X'.
SET_SCREEN_INP_REQUIRED 'NAME_EMPLOY'.
SET_SCREEN_NO_INP 'NAME_DEPMENT'.
SET_SCREEN_NO_INP 'NAME_CHANGE'.
SET_SCREEN_INP_REQUIRED 'NAME_CREW'.
SET_SCREEN_NO_INP 'NAME_DEPMENTT'.
SET_SCREEN_INP_REQUIRED 'NAME_AIRP_APP'.
SET_SCREEN_NO_INP 'INDX_EMPNAME'.
SET_SCREEN_NO_INP 'INDX_EMPAREA'.
SET_SCREEN_NO_INP 'DOMA_AREA'.
ENDIF.

ENDFORM.

***********************************************************************
* FORM CHECK_KAP_2 *
* Pr№fe Korrektheit der LЎsung f№r Kapitel 2. *
***********************************************************************

FORM CHECK_KAP_2.

* Lokale Daten Deklarationen
DATA: SUCCESS TYPE FLAG,
EMP_FILL TYPE FLAG VALUE 'N',
DEP_FILL TYPE FLAG VALUE 'N',
GLOBAL_SUCCESS TYPE FLAG VALUE 'Y',
FILL_INFO_EMP TYPE FLAG VALUE 'Y',
FILL_INFO_DEP TYPE FLAG VALUE 'Y'.

* Finde heraus, ob ZEMPLOYxx und ZDEPMENTxx schon gef№llt waren
IF SUCCESS_WA-EMPLOY_FILLED = 'Y'.
FILL_INFO_EMP = 'A'.
ENDIF.
IF SUCCESS_WA-DEPMENT_FILLED = 'Y'.
FILL_INFO_DEP = 'A'.
ENDIF.

* Pr№fe Feldstruktur ZEMPLOYxx, ?bung 2-1-1
WRITE_FB_EXERCISE '2-1-1'.

WRITE_FB_VAR 'I' 'Pr№fen der Tabelle'(050) NAME_EMPLOY.

PERFORM CHECK_TABLE USING NAME_EMPLOY 'SEMPLOYES' FILL_INFO_EMP
CHANGING FB_TAB SUCCESS.

EMP_FILL = SUCCESS.
IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Pr№fe Feldstruktur ZDEPMENTxx, ?bung 2-1-2
WRITE_FB_EXERCISE '2-1-2'.

WRITE_FB_VAR 'I' 'Pr№fen der Tabelle'(050) NAME_DEPMENT.

PERFORM CHECK_TABLE USING NAME_DEPMENT 'SDEPMENT' FILL_INFO_DEP
CHANGING FB_TAB SUCCESS.

DEP_FILL = SUCCESS.
IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Pr№fe Include ZCHANGExx, ?bung 2-3
WRITE_FB_EXERCISE '2-3'.

* Pr№fe Inclusion in ZEMPLOYxx
PERFORM CHECK_INCLUDE USING NAME_CHANGE 'SCHANGED' NAME_EMPLOY
'INCLUDE'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* Pr№fe Inclusion in ZDEPMENTxx
PERFORM CHECK_INCLUDE USING NAME_CHANGE 'SCHANGED' NAME_DEPMENT
'INCLUDE'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Resultate in DB-Tabelle BC430_SUCCESS schreiben. Falls alle ?bungen
* erfolgreich gelЎst sind, kann diese Info nicht mehr verфndert werden
IF SUCCESS_WA-CHAPTER2 = 'N'.
SUCCESS_WA-CHAPTER2 = GLOBAL_SUCCESS.
ENDIF.
SUCCESS_WA-EMPLOY_FILLED = EMP_FILL.
SUCCESS_WA-DEPMENT_FILLED = DEP_FILL.
PERFORM PUT_STATE_INFO.

* Feedback ausgeben
PERFORM WRITE_FEEDBACK USING GLOBAL_SUCCESS.

ENDFORM.

***********************************************************************
* FORM CHECK_KAP_3 *
* Pr№fe die Korrektheit der LЎsung f№r Kapitel 3. *
***********************************************************************

FORM CHECK_KAP_3.

* Lokale Datendeklarationen
DATA: SUCCESS TYPE FLAG,
GLOBAL_SUCCESS TYPE FLAG VALUE 'Y',
CRE_FILL TYPE FLAG VALUE 'N',
FILL_INFO_CRE TYPE FLAG VALUE 'Y'.

* Finde heraus, ob ZFLCREWxx vorher schon gef№llt war
IF SUCCESS_WA-SFLCREW_FILLED = 'Y'.
FILL_INFO_CRE = 'A'.
ENDIF.

* Pr№fe den Namensindex zu ZEMPLOYxx, ?bung 3-1
WRITE_FB_EXERCISE '3-1'.

PERFORM CHECK_INDEX USING NAME_EMPLOY INDX_EMPNAME 'SEMPLOYES' 'NAM'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Pr№fe die Tabelle ZFLCREWxx, ?bung 3-2
WRITE_FB_EXERCISE '3-2'.

WRITE_FB_VAR 'I' 'Pr№fen der Tabelle'(050) NAME_CREW.

PERFORM CHECK_TABLE USING NAME_CREW 'SFLCREW' FILL_INFO_CRE
CHANGING FB_TAB SUCCESS.

CRE_FILL = SUCCESS.
IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Pr№fe die technischen Einst. zu ZDEPMENTxx und ZFLCREWxx, ?bung 3-3
WRITE_FB_EXERCISE '3-3'.

PERFORM CHECK_TECHN_SETTINGS USING NAME_DEPMENT 'SDEPMENT'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

*{ REPLACE KP7K007605 1
*\ PERFORM CHECK_TECHN_SETTINGS USING NAME_CREW 'SFLCREW'
*\ CHANGING FB_TAB SUCCESS.

* Replaced on Nov 25, 2002 by Michael Fry
* Reason: SFLCREW is the original table, without the correct buffer
* settings, so a new table, SFLCREW_BUFF, was created which has the
* correct technical settings and is being used for the check

PERFORM CHECK_TECHN_SETTINGS USING NAME_CREW 'SFLCREW_BUFF'
CHANGING FB_TAB SUCCESS.
*} REPLACE

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Pr№fe den Bereichsindex, falls Zusatz№bung bearbeitet, ?bung 3-4
IF NOT INDX_EMPAREA IS INITIAL.
WRITE_FB_EXERCISE '3-4'.

PERFORM CHECK_INDEX USING NAME_EMPLOY INDX_EMPAREA 'SEMPLOYES' 'ARE'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

ENDIF.

* Resultate in DB-Tabelle BC430_SUCCESS schreiben. Falls alle ?bungen
* erfolgreich gelЎst sind, kann diese Info nicht mehr verфndert werden
IF SUCCESS_WA-CHAPTER3 = 'N'.
SUCCESS_WA-CHAPTER3 = GLOBAL_SUCCESS.
SUCCESS_WA-SFLCREW_FILLED = CRE_FILL.
ENDIF.
PERFORM PUT_STATE_INFO.

* Feedback ausgeben
PERFORM WRITE_FEEDBACK USING GLOBAL_SUCCESS.

ENDFORM.

***********************************************************************
* FORM CHECK_KAP_4 *
* Pr№fe die Korrektheit der LЎsung f№r Kapitel 4. *
***********************************************************************

FORM CHECK_KAP_4.

* Lokale Daten Deklarationen
DATA: SUCCESS TYPE FLAG,
GLOBAL_SUCCESS TYPE FLAG VALUE 'Y',
DPT_FILL TYPE FLAG VALUE 'N',
FILL_INFO_DPT TYPE FLAG VALUE 'Y'.

* Finde heraus, ob ZFLCREWxx vorher schon gef№llt war
IF SUCCESS_WA-DEPMENTT_FILLED = 'Y'.
FILL_INFO_DPT = 'A'.
ENDIF.

* Pr№fe die Domфne, ?bung 4-1
WRITE_FB_EXERCISE '4-1'.

PERFORM CHECK_DOMAIN USING DOMA_AREA 'S_AREA'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile

* Pr№fe die Fremdschl№ssel von ZEMPLOYxx, ?bung 4-2
WRITE_FB_EXERCISE '4-2'.

WRITE_FB_VAR 'I' 'Pr№fen der Tabelle'(050) NAME_EMPLOY.
* 1) zu T000
PERFORM CHECK_FOREIGN_KEY USING NAME_EMPLOY 'T000'
'SEMPLOYES' 'T000'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* 2)zu SCARR
PERFORM CHECK_FOREIGN_KEY USING NAME_EMPLOY 'SCARR'
'SEMPLOYES' 'SCARR'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* 3) zu ZDEPMENTxx
PERFORM CHECK_FOREIGN_KEY USING NAME_EMPLOY NAME_DEPMENT
'SEMPLOYES' 'SDEPMENT'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* 4) zu SCURX
PERFORM CHECK_FOREIGN_KEY USING NAME_EMPLOY 'SCURX'
'SEMPLOYES' 'SCURX'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* 5) Ende der Pr№fungen f№r ZEMPLOYxx, gebe Leerzeile aus
WRITE_EMPTY_LINE. "Leerzeile

* Pr№fe die Fremdschl№ssel von ZDEPMENTxx, ?bung 4-2
WRITE_FB_VAR 'I' 'Pr№fen der Tabelle'(050) NAME_DEPMENT.
* 1) zu T000
PERFORM CHECK_FOREIGN_KEY USING NAME_DEPMENT 'T000'
'SDEPMENT' 'T000'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* 2) zu SCARR
PERFORM CHECK_FOREIGN_KEY USING NAME_DEPMENT 'SCARR'
'SDEPMENT' 'SCARR'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* 3) Ende der Pr№fungen von ZDEPMENTxx, gebe Leerzeile aus
WRITE_EMPTY_LINE. "Leerzeile

* Pr№fe, ob das neue Feld an ZEMPLOYxx angehфngt ist, ?bung 4-3
WRITE_FB_EXERCISE '4-3'.

WRITE_FB_VAR 'I' 'Pr№fen der Tabelle'(050) NAME_EMPLOY.

PERFORM CHECK_TABLE USING NAME_EMPLOY 'SEMPLOYES_RB' 'N'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* Pr№fe FS f№r neues Feld zw. ZEMPLOYxx und STRAVELAG
PERFORM CHECK_FOREIGN_KEY USING NAME_EMPLOY 'STRAVELAG'
'SEMPLOYES_RB' 'STRAVELAG'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Pr№fe die Feldstruktur der Texttabelle ZDEPMENTTxx, ?bung 4-4
WRITE_FB_EXERCISE '4-4'.

WRITE_FB_VAR 'I' 'Pr№fen der Tabelle'(050) NAME_DEPMENTT.

PERFORM CHECK_TABLE USING NAME_DEPMENTT 'SDEPMENTT' FILL_INFO_DPT
CHANGING FB_TAB SUCCESS.

DPT_FILL = SUCCESS.
IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* Pr№fe den Fremdschl№ssel zw. ZDEPMENTxx und ZDEPMENTTxx
PERFORM CHECK_FOREIGN_KEY USING NAME_DEPMENTT NAME_DEPMENT
'SDEPMENTT' 'SDEPMENT'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Resultate in DB-Tabelle BC430_SUCCESS schreiben. Falls alle ?bungen
* erfolgreich gelЎst sind, kann diese Info nicht mehr verфndert werden
IF SUCCESS_WA-CHAPTER4 = 'N'.
SUCCESS_WA-CHAPTER4 = GLOBAL_SUCCESS.
SUCCESS_WA-DEPMENT_FILLED = DPT_FILL.
ENDIF.
PERFORM PUT_STATE_INFO.

* Feedback ausgeben
PERFORM WRITE_FEEDBACK USING GLOBAL_SUCCESS.

ENDFORM.

***********************************************************************
* FORM CHECK_KAP_5 *
* Pr№fe die Korrektheit der LЎsung f№r Kapitel 5. *
***********************************************************************

FORM CHECK_KAP_5.

* Lokale Daten Deklarationen
DATA: SUCCESS TYPE FLAG,
GLOBAL_SUCCESS TYPE FLAG VALUE 'Y'.

* Pr№fe, ob Feld f№r Chef an ZDEPMENTxx angehфngt ist, ?bung 5-1
WRITE_FB_EXERCISE '5-1'.

WRITE_FB_VAR 'I' 'Pr№fen der Tabelle'(050) NAME_DEPMENT.

PERFORM CHECK_TABLE USING NAME_DEPMENT 'SDEPMENT_CH' 'N'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

* Pr№fe FS f№r das neue Feld
PERFORM CHECK_FOREIGN_KEY USING NAME_DEPMENT NAME_EMPLOY
'SDEPMENT_CH' 'SEMPLOYES_RB'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Pr№fe, ob neues Feld in ZCHANGExx eingef№gt ist, ?bung 5-2
WRITE_FB_EXERCISE '5-2'.

WRITE_FB_VAR 'I' 'Pr№fen des Include'(059) NAME_CHANGE.

PERFORM CHECK_TABLE USING NAME_CHANGE 'SCHANGED_TI' 'N'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Resultate in DB-Tabelle BC430_SUCCESS schreiben. Falls alle ?bungen
* erfolgreich gelЎst sind, kann diese Info nicht mehr verфndert werden
IF SUCCESS_WA-CHAPTER5 = 'N'.
SUCCESS_WA-CHAPTER5 = GLOBAL_SUCCESS.
ENDIF.
PERFORM PUT_STATE_INFO.

* Feedback ausgeben
PERFORM WRITE_FEEDBACK USING GLOBAL_SUCCESS.

ENDFORM.

***********************************************************************
* FORM CHECK_KAP_6 *
* Pr№fe die Korrektheit der LЎsung f№r Kapitel 6. *
***********************************************************************

FORM CHECK_KAP_6.

* Lokale Daten Deklarationen
DATA: SUCCESS TYPE FLAG,
GLOBAL_SUCCESS TYPE FLAG VALUE 'Y'.

* Pr№fe, ob die Umsetzung durchgef№hrt wurde, ?bung 6-1
WRITE_FB_VAR 'I' 'Pr№fen der Tabelle'(050) NAME_CREW.

PERFORM CHECK_TABLE USING NAME_CREW 'SFLCREW_CONV' 'N'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Pr№fe, ob das Append an ZEMPLOYxx angehфngt ist, ?bung 6-2
WRITE_FB_VAR 'I' 'Pr№fen der Append-Struktur'(060) NAME_AIRP_APP.

PERFORM CHECK_INCLUDE USING NAME_AIRP_APP 'SFLUGHAFEN' NAME_EMPLOY
'APPEND'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Pr№fe den FS im Append, ?bung 6-3
WRITE_FB_VAR 'I' 'Pr№fen der Append-Struktur'(060) NAME_AIRP_APP.

PERFORM CHECK_FOREIGN_KEY USING NAME_AIRP_APP 'SAIRPORT'
'SFLUGHAFEN' 'SAIRPORT'
CHANGING FB_TAB SUCCESS.

IF SUCCESS = 'N'. GLOBAL_SUCCESS = 'N'. ENDIF.

WRITE_EMPTY_LINE. "Leerzeile ausgeben

* Resultate in DB-Tabelle BC430_SUCCESS schreiben. Falls alle ?bungen
* erfolgreich gelЎst sind, kann diese Info nicht mehr verфndert werden
IF SUCCESS_WA-CHAPTER6 = 'N'.
SUCCESS_WA-CHAPTER6 = GLOBAL_SUCCESS.
ENDIF.
PERFORM PUT_STATE_INFO.

* Feedback ausgeben
PERFORM WRITE_FEEDBACK USING GLOBAL_SUCCESS.

ENDFORM.

***********************************************************************
* FORM CHECK_TABLE *
* Pr№ft die Struktur einer Tabelle gegen eine Vorlage und kopiert *
* (falls mЎglich) die Daten aus der Vorlage in die Tabelle. *
***********************************************************************

FORM CHECK_TABLE USING PART_TABLE OUR_TABLE FILL_OPT
CHANGING FEEDBACK SUCCESS.

CLEAR ERRORS.
REFRESH ERRORS.
SUCCESS = 'N'.

DATA: FIELDTEXT(50) TYPE C.

* Aufruf des FUBA zum Strukturvergleich
CALL FUNCTION 'BC430_COMP_AND_FILL'
EXPORTING
T_TAB = PART_TABLE
M_TAB = OUR_TABLE
FILL = FILL_OPT
TABLES
ERRORS = ERRORS
EXCEPTIONS
T_TAB_NOT_EXIST = 1
T_TAB_NOT_ACTIVE = 2
M_TAB_NOT_ACTIVE = 3
SYSTEM_INCONSISTENT = 4
OTHERS = 5.

IF SY-SUBRC <> 0.
SUBRC = SY-SUBRC.
CASE SUBRC.
WHEN '1'.
WRITE_FB 'E' 'Die Tabelle ist nicht vorhanden!'(101).
WHEN '2'.
WRITE_FB 'E' 'Sie haben vergessen die Tabelle zu aktivieren!'(100).
WHEN '3'.
PREDEFINED_OBJ_NOT_ACTIVE.
WHEN '4'.
DDIC_INTERFACE_ERROR.
WHEN '5'.
UNKNOWN_ERROR.
ENDCASE.
ELSE.
IF ERRORS IS INITIAL.
SUCCESS = 'Y'.
WRITE_FB 'S' 'Tabelle ist korrekt definiert!'(103).
IF FILL_OPT = 'Y'.
WRITE_FB 'S' 'Die Tabelle wird mit Beispieldaten gef№llt.'(104).
ELSEIF FILL_OPT = 'A'.
WRITE_FB 'S' 'Beispieldaten waren bereits aufgebaut.'(153).
ENDIF.
ELSE.
WRITE_FB 'E' 'Die Tabelle ist falsch definiert!'(105).
LOOP AT ERRORS.
LOOP AT FIELD_TEXTS.
IF ERRORS-FIELDNAME = FIELD_TEXTS-FIELD.
FIELDTEXT = FIELD_TEXTS-TEXT.
ENDIF.
ENDLOOP.
IF ERRORS-ERROR = 'FIELD'.
WRITE_FB_VAR 'E' 'Feld'(058) FIELDTEXT.
WRITE_FB 'E' 'Kein Feld mit erwartetem Typ und Keyflag
gefunden!'(107).
WRITE_FB 'E' 'In Ihrer Tabelle hat das Feld einen falschen
Typ oder'(154).
WRITE_FB 'E' 'Sie haben vergessen das Feld in Ihre Tabelle
aufzunehmen!'(155).
ENDIF.
IF ERRORS-ERROR = 'KEY'.
WRITE_FB_VAR 'E' 'Feld'(058) FIELDTEXT.
WRITE_FB 'E' 'Schl№sselkennzeichen falsch!'(106).
ENDIF.
IF ERRORS-ERROR = 'KEY_TOO_SMALL'.
WRITE_FB 'E' 'Die Tabelle hat zu wenige
Schl№sselfelder!'(156).
ENDIF.
IF ERRORS-ERROR = 'KEY_TOO_BIG'.
WRITE_FB 'E' 'Die Tabelle hat zu viele Schl№sselfelder!'(157).
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.

ENDFORM.

***********************************************************************
* FORM CHECK_INDEX *
* Vergleicht die Struktur eines Index gegen eine Vorlage *
***********************************************************************

FORM CHECK_INDEX USING PART_TABLE PART_INDEX OUR_TABLE OUR_INDEX
CHANGING FEEDBACK SUCCESS.

CLEAR ERRORS.
REFRESH ERRORS.
SUCCESS = 'N'.

WRITE_FB_TWO_VAR 'I' 'Pr№fe Index'(301) PART_INDEX 'zu Tabelle'(302)
PART_TABLE.

* Aufruf FUBA zum Strukturvergleich
CALL FUNCTION 'BC430_INDX_COMP'
EXPORTING
T_TAB = PART_TABLE
M_TAB = OUR_TABLE
T_IND = PART_INDEX
M_IND = OUR_INDEX
TABLES
ERRORS = ERRORS
EXCEPTIONS
T_INDX_NOT_ACTIVE = 1
M_INDX_NOT_ACTIVE = 2
SYSTEM_INCONSISTENT = 3
T_INDX_NOT_EXIST = 4
OTHERS = 5.

IF SY-SUBRC <> 0.
SUBRC = SY-SUBRC.
CASE SUBRC.
WHEN '1'.
WRITE_FB 'E' 'Sie haben vergessen den Index zu aktivieren!'(108).
WHEN '2'.
PREDEFINED_OBJ_NOT_ACTIVE.
WHEN '3'.
DDIC_INTERFACE_ERROR.
WHEN '4'.
WRITE_FB 'E' 'Der Index ist nicht vorhanden!'(109).
WHEN '5'.
UNKNOWN_ERROR.
ENDCASE.
ELSE.
IF ERRORS IS INITIAL.
SUCCESS = 'Y'.
WRITE_FB 'S' 'Der Index ist korrekt definiert!'(110).
ELSE.
WRITE_FB 'E' 'Der Index ist nicht korrekt definiert!'(111).
LOOP AT ERRORS.
IF ERRORS-ERROR = 'UNIQUE_FLAG'.
WRITE_FB 'E' 'UNIQUE-Flag nicht korrekt!'(118).
ENDIF.
IF ERRORS-ERROR = 'DB_STATE'.
WRITE_FB 'E' 'Option zum Anlegen auf DB nicht korrekt!'(117).
ENDIF.
IF ERRORS-ERROR = 'DB_LIST'.
WRITE_FB 'E' 'Liste der DB-Systeme nicht korrekt!'(116).
ENDIF.
IF ERRORS-ERROR = 'FIELD_NUMBER'. "Feldanzahl falsch
IF ERRORS-HINT = 'TO_MANY'.
WRITE_FB 'E' 'Der Index hat zu viele Felder!'(113).
ELSE.
WRITE_FB 'E' 'Der Index hat nicht gen№gend Felder!'(112).
ENDIF.
ENDIF.
IF ERRORS-ERROR = 'WRONG_FIELDS'. "Feldtypen falsch
WRITE_FB 'E' 'Der Index enthфlt die falschen Felder!'(114).
ENDIF.
IF ERRORS-ERROR = 'WRONG_ORDER'. "Feldreihenfolge falsch
WRITE_FB 'E' 'Die Feldreihenfolge ist fehlerhaft!'(115).
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.

ENDFORM.

***********************************************************************
* FORM CHECK_TECHN_SETTINGS *
* Vergleicht die techn. Einstellungen einer Tabelle gegen ein Vorlage *
***********************************************************************

FORM CHECK_TECHN_SETTINGS USING PART_TABLE OUR_TABLE
CHANGING FEEDBACK SUCCESS.

CLEAR ERRORS.
REFRESH ERRORS.
SUCCESS = 'N'.

WRITE_FB_VAR 'I' 'Pr№fen der techn. Einstellungen zu'(052) PART_TABLE.

CALL FUNCTION 'BC430_TABT_COMP'
EXPORTING
T_TAB = PART_TABLE
M_TAB = OUR_TABLE
TABLES
ERRORS = ERRORS
EXCEPTIONS
T_TSET_NOT_ACTIVE = 1
M_TSET_NOT_ACTIVE = 2
SYSTEM_INCONSISTENT = 3
OTHERS = 4.

IF SY-SUBRC <> 0.
SUBRC = SY-SUBRC.
CASE SUBRC.
WHEN '1'.
WRITE_FB 'E' 'Die techn. Einstellungen sind nicht aktiv!'(119).
WHEN '2'.
PREDEFINED_OBJ_NOT_ACTIVE.
WHEN '3'.
DDIC_INTERFACE_ERROR.
WHEN '4'.
UNKNOWN_ERROR.
ENDCASE.
ELSE.
IF ERRORS IS INITIAL.
SUCCESS = 'Y'.
WRITE_FB 'S' 'Die techn. Einstellungen sind korrekt!'(120).
ELSE.
WRITE_FB 'E' 'Die techn. Einstellungen sind nicht korrekt!'(121).
LOOP AT ERRORS.
CASE ERRORS-ERROR.
WHEN 'SIZE_CATEGORY'. "GrЎ?enkat. falsch
WRITE_FB_VAR 'E' 'GrЎ?enkategorie falsch. Erwartet:'(122)
ERRORS-HINT.
WHEN 'DATA_CLASS'. "Datenart falsch
WRITE_FB_VAR 'E' 'Datenart falsch. Erwartet:'(123)
ERRORS-HINT.
WHEN 'PROTOCOL'. "Protokollierung falsch
WRITE_FB 'E' 'Protokollierung falsch eingestellt!'(124).
WHEN 'BUFF_ALLOW'. "Pufferungserlaubnis falsch
WRITE_FB 'E' 'Pufferungserlaubnis falsch eingestellt!'(125).
WHEN 'BUFF_TYPE'. "Pufferungsart falsch
WRITE_FB 'E' 'Pufferungsart falsch eingestellt!'(126).
WHEN 'KEY_FIELDS'. "Schl.anz gen. Puffer. falsch
WRITE_FB 'E' 'Falscher generischer Schl№ssel!'(127).
ENDCASE.
ENDLOOP.
ENDIF.
ENDIF.

ENDFORM.

***********************************************************************
* FORM CHECK_DOMAIN *
* Vergleicht eine Domфne mit einer Vorlage *
***********************************************************************

FORM CHECK_DOMAIN USING PART_DOMA OUR_DOMA
CHANGING FEEDBACK SUCCESS.

CLEAR ERRORS.
REFRESH ERRORS.
SUCCESS = 'N'.

WRITE_FB_VAR 'I' 'Pr№fen der Domфne'(053) PART_DOMA.

CALL FUNCTION 'BC430_DOMA_COMP'
EXPORTING
T_DOMA = PART_DOMA
M_DOMA = OUR_DOMA
TABLES
ERRORS = ERRORS
EXCEPTIONS
T_DOMA_NOT_EXIST = 1
T_DOMA_NOT_ACTIVE = 2
M_DOMA_NOT_ACTIVE = 3
SYSTEM_INCONSISTENT = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
SUBRC = SY-SUBRC.
CASE SUBRC.
WHEN '1'.
WRITE_FB 'E' 'Die angegebene Domфne ist nicht vorhanden!'(128).
WHEN '2'.
WRITE_FB 'E' 'Sie haben vergessen die Domфne zu
aktivieren!'(129).
WHEN '3'.
PREDEFINED_OBJ_NOT_ACTIVE.
WHEN '4'.
DDIC_INTERFACE_ERROR.
WHEN '5'.
UNKNOWN_ERROR.
ENDCASE.
ELSE.
IF ERRORS IS INITIAL.
SUCCESS = 'Y'.
WRITE_FB 'S' 'Die Domфne ist korrekt definiert!'(130).
ELSE.
WRITE_FB 'E' 'Die Domфne ist nicht korrekt definiert!'(131).
LOOP AT ERRORS.
IF ERRORS-ERROR = 'DATATYPE'.
WRITE_FB 'E' 'Der Datentyp ist nicht korrekt!'(132).
ENDIF.
IF ERRORS-ERROR = 'LENGTH'.
WRITE_FB 'E' 'Die Lфnge ist nicht korrekt!'(133).
ENDIF.
IF ERRORS-ERROR = 'DECIMALS'.
WRITE_FB 'E' 'Anzahl Dezimalstellen ist nicht korrekt!'(134).
ENDIF.
IF ERRORS-ERROR = 'VALUE'.
WRITE_FB 'E' 'Die Festwerte sind nicht korrekt!'(135).
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.

ENDFORM.

***********************************************************************
* FORM CHECK_FOREIGN_KEY *
* Vergleicht eine Fremdschl№sselbeziehung gegen eine Vorlage *
***********************************************************************

FORM CHECK_FOREIGN_KEY USING PART_FT PART_PT OUR_FT OUR_PT
CHANGING FEEDBACK SUCCESS.

CLEAR ERRORS.
REFRESH ERRORS.
SUCCESS = 'N'.

WRITE_FB_VAR 'I' 'Fremdschl№sselpr№fung gegen'(054) PART_PT.

CALL FUNCTION 'BC430_FKEY_COMP'
EXPORTING
T_FS_TAB = PART_FT
T_PT_TAB = PART_PT
M_FS_TAB = OUR_FT
M_PT_TAB = OUR_PT
TABLES
ERRORS = ERRORS
EXCEPTIONS
T_TAB_NOT_ACTIVE = 1
M_TAB_NOT_ACTIVE = 2
SYSTEM_INCONSISTENT = 3
OTHERS = 4.

IF SY-SUBRC <> 0.
SUBRC = SY-SUBRC.
CASE SUBRC.
WHEN '1'.
WRITE_FB 'E' 'Sie haben vergessen die Tabelle zu aktivieren!'(100).
WHEN '2'.
PREDEFINED_OBJ_NOT_ACTIVE.
WHEN '3'.
DDIC_INTERFACE_ERROR.
WHEN '4'.
UNKNOWN_ERROR.
ENDCASE.
ELSE.
IF ERRORS IS INITIAL.
SUCCESS = 'Y'.
WRITE_FB 'S' 'Fremdschl№ssel ist korrekt definiert!'(136).
ELSE.
WRITE_FB 'E' 'Fremdschl№ssel ist fehlerhaft!'(137).
LOOP AT ERRORS.
IF ERRORS-ERROR = 'FK_NOT_EX'.
WRITE_FB 'E' 'Fremdschl№ssel ist nicht vorhanden!'(138).
ENDIF.
IF ERRORS-ERROR = 'FK_STR_NOT_OK'.
WRITE_FB 'E' 'Feldzuordnung ist nicht korrekt!'(139).
ENDIF.
IF ERRORS-ERROR = 'MUST_BE_TEXT'.
WRITE_FB 'E' 'Fremdschl. mu? Textfremdschl. sein!'(140).
ENDIF.
IF ERRORS-ERROR = 'SHOULD_NOT_BE_TEXT'.
WRITE_FB 'E' 'Fremdsch. darf kein Textfremdschl. sein!'(141).
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.

ENDFORM.

***********************************************************************
* FORM CHECK_INCLUDE *
* Vergleicht ein Include bzw. Append gegen eine Vorlage *
***********************************************************************

FORM CHECK_INCLUDE USING PART_INC OUR_INC PART_TAB INC_TYPE
CHANGING FEEDBACK SUCCESS.

CLEAR ERRORS.
CLEAR TEMP_ERRORS.
REFRESH ERRORS.
REFRESH TEMP_ERRORS.
SUCCESS = 'N'.

IF INC_TYPE = 'INCLUDE'.
WRITE_FB_TWO_VAR 'I' 'Pr№fe Include'(303) PART_INC 'zu Tabelle'(302)
PART_TAB.
ELSE.
WRITE_FB_TWO_VAR 'I' 'Pr№fe Append'(304) PART_INC 'zu Tabelle'(302)
PART_TAB.
ENDIF.

CALL FUNCTION 'BC430_CHECK_INCLUDE'
EXPORTING
T_INCLUDE = PART_INC
M_INCLUDE = OUR_INC
T_TAB = PART_TAB
INC_TYPE = INC_TYPE
TABLES
ERRORS = ERRORS
TEMP_ERRORS = TEMP_ERRORS
EXCEPTIONS
T_INC_NOT_EXIST = 1
T_INC_NOT_ACTIVE = 2
M_INC_NOT_ACTIVE = 3
T_TAB_NOT_ACTIVE = 4
SYSTEM_INCONSISTENT = 5
OTHERS = 6.

IF SY-SUBRC <> 0.
SUBRC = SY-SUBRC.
CASE SUBRC.
WHEN '1'.
WRITE_FB 'E' 'Die Struktur existiert nicht!'(142).
WHEN '2'.
WRITE_FB 'E' 'Sie haben vergessen die Struktur zu
aktivieren!'(143).
WHEN '3'.
PREDEFINED_OBJ_NOT_ACTIVE.
WHEN '4'.
WRITE_FB_VAR 'E' 'Folgende Tabelle ist nicht aktiv:'(144)
PART_TAB.
WHEN OTHERS.
UNKNOWN_ERROR.
ENDCASE.
ELSE.
IF ERRORS IS INITIAL.
SUCCESS = 'Y'.
IF INC_TYPE = 'INCLUDE'.
WRITE_FB 'S' 'Include ist korrekt definiert!'(145).
ELSE.
WRITE_FB 'S' 'Append ist korrekt definiert!'(151).
ENDIF.
ELSE.
IF INC_TYPE = 'INCLUDE'.
WRITE_FB 'E' 'Include ist fehlerhaft!'(146).
ELSE.
WRITE_FB 'E' 'Append ist fehlerhaft!'(152).
ENDIF.
LOOP AT ERRORS.
IF ERRORS-ERROR = 'FIELD_STR'.
WRITE_FB 'E' 'Feldstruktur fehlerhaft!'(147).
ENDIF.
IF ERRORS-ERROR = 'SHOULD_BE_INCLUDE'.
WRITE_FB 'E' 'Objekt ist keine Struktur!'(148).
ENDIF.
IF ERRORS-ERROR = 'SHOULD_BE_APPEND'.
WRITE_FB 'E' 'Objekt ist keine Append-Struktur!'(149).
ENDIF.
IF ERRORS-ERROR = 'NOT_INCLUDED'.
IF INC_TYPE = 'INCLUDE'.
WRITE_FB_TWO_VAR 'E' 'Die Struktur'(305) PART_INC
'ist nicht inkludiert in'(306) PART_TAB.
ELSE.
WRITE_FB_TWO_VAR 'E' 'Die Struktur'(305) PART_INC
'ist nicht appendiert an'(307) PART_TAB.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.

ENDFORM.

************************************************************************
* FORM WRITE_FEEDBACK *
* Diese Form erf№llt folgende Aufgaben: *
* 1) Ausgabe der Meldungen aus FB_TAB *
* 2) Sichern der Meldungen aus FB_TAB in der DB-Tabelle BC430_PROT *
* 3) LЎschen der Meldungen aus FB_TAB *
************************************************************************

FORM WRITE_FEEDBACK USING GLOBAL_SUCCESS.

DATA: PROT_WA TYPE BC430_PROT,
PROT_TAB TYPE STANDARD TABLE OF BC430_PROT.

* Abbauen eines vorhandenen Controls f№r Feedback
IF FB_CONT_CRE = 'Y'.
CALL METHOD PICTURE2->DESTROY_CONTROL.
ENDIF.

LEAVE TO LIST-PROCESSING.

* 1) Ausgabe der Meldungen aus FB_TAB
FORMAT INTENSIFIED ON.
LOOP AT FB_TAB.
IF FB_TAB-COLOR = 'E'.
WRITE: ICON_BREAKPOINT AS ICON.
WRITE: FB_TAB-TEXT. NEW-LINE.
ELSEIF FB_TAB-COLOR = 'I'.
WRITE: FB_TAB-TEXT COLOR COL_KEY. NEW-LINE.
ELSEIF FB_TAB-COLOR = 'S'.
WRITE: ICON_OKAY AS ICON.
WRITE: FB_TAB-TEXT. NEW-LINE.
ELSEIF FB_TAB-COLOR = 'W'.
WRITE: ICON_ALARM AS ICON.
WRITE: FB_TAB-TEXT. NEW-LINE.
ELSEIF FB_TAB-COLOR = 'U'.
WRITE: FB_TAB-TEXT COLOR COL_HEADING. NEW-LINE.
ELSEIF FB_TAB-COLOR = 'N'.
SKIP.
ELSE.
WRITE: FB_TAB-TEXT COLOR COL_NORMAL. NEW-LINE.
ENDIF.
ENDLOOP.

* 2) Sichern der Meldungen aus FB_TAB in BC430_PROT
PROT_WA-COURSE_USER = SY-UNAME.
PROT_WA-PROT_DATE = SY-DATUM.
PROT_WA-PROT_TIME = SY-UZEIT.
PROT_WA-LINE = 0.

* Ermittle Kapitelnr.
IF KAP2 = 'X'. PROT_WA-CHAPTER = 2. ENDIF.
IF KAP3 = 'X'. PROT_WA-CHAPTER = 3. ENDIF.
IF KAP4 = 'X'. PROT_WA-CHAPTER = 4. ENDIF.
IF KAP5 = 'X'. PROT_WA-CHAPTER = 5. ENDIF.
IF KAP6 = 'X'. PROT_WA-CHAPTER = 6. ENDIF.

LOOP AT FB_TAB.
ADD 1 TO PROT_WA-LINE.
PROT_WA-COLOR = FB_TAB-COLOR.
PROT_WA-TEXT = FB_TAB-TEXT.
APPEND PROT_WA TO PROT_TAB.
ENDLOOP.

INSERT BC430_PROT FROM TABLE PROT_TAB.

* 3) LЎschen der Meldungen aus FB_TAB
REFRESH FB_TAB.

* 4) Ausgeben des Bildes zum Feedback
* Aufbau des Image Control
CREATE OBJECT PICTURE2.
CALL METHOD PICTURE2->CREATE_CONTROL
EXPORTING DYNNR = '1100'
REPID = 'BC430_CHECK'
STYLE = WS_BORDER
CONTAINER = 'PICTURE2'.
* Setze Anzeige Modus
CALL METHOD PICTURE2->SET_DISPLAY_MODE
EXPORTING DISPLAY_MODE = DISPLAY_MODE_STRETCH.
* Lade Bild aus R/3 Databank
DATA PIC_DATA_FB LIKE W3MIME OCCURS 0.
DATA PIC_SIZE_FB TYPE I.
* Bestimme den Namen des Bildes f№r das Feedback abhфngig von Erfolg
* und gepr№ftem Kapitel
IF GLOBAL_SUCCESS = 'Y'.
IF KAP2 = 'X'.
LOAD_GIF_PICTURE 'BC430_SUCCESS1'.
ENDIF.
IF KAP3 = 'X'.
LOAD_GIF_PICTURE 'BC430_SUCCESS2'.
ENDIF.
IF KAP4 = 'X'.
LOAD_GIF_PICTURE 'BC430_SUCCESS3'.
ENDIF.
IF KAP5 = 'X'.
LOAD_GIF_PICTURE 'BC430_SUCCESS4'.
ENDIF.
IF KAP6 = 'X'.
LOAD_GIF_PICTURE 'BC430_SUCCESS5'.
ENDIF.
ELSEIF GLOBAL_SUCCESS = 'N'.
IF KAP2 = 'X'.
LOAD_GIF_PICTURE 'BC430_FAILURE1'.
ENDIF.
IF KAP3 = 'X'.
LOAD_GIF_PICTURE 'BC430_FAILURE2'.
ENDIF.
IF KAP4 = 'X'.
LOAD_GIF_PICTURE 'BC430_FAILURE3'.
ENDIF.
IF KAP5 = 'X'.
LOAD_GIF_PICTURE 'BC430_FAILURE4'.
ENDIF.
IF KAP6 = 'X'.
LOAD_GIF_PICTURE 'BC430_FAILURE5'.
ENDIF.
ENDIF.

* Ermittle eine URL vom Data Provider durch Export der pic_data.
CLEAR URL.
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
TYPE = 'image'
SUBTYPE = CNDP_SAP_TAB_UNKNOWN
SIZE = PIC_SIZE_FB
LIFETIME = CNDP_LIFETIME_TRANSACTION
TABLES
DATA = PIC_DATA_FB
CHANGING
URL = URL2
EXCEPTIONS
OTHERS = 1.
* Lade das Bild №ber die URL vom Data Provider.
IF SY-SUBRC = 0.
CALL METHOD PICTURE2->LOAD_IMAGE_FROM_URL
EXPORTING URL = URL2.
ENDIF.

* Setze Flag, da? Control schon aufgebaut ist
FB_CONT_CRE = 'Y'.

ENDFORM.

************************************************************************
* FORM FILL_FIELD_TEXTS *
* Ermittelt f№r jeden Feldnamen aus einer der Vorlagentabellen einen *
* beschreibenden Text. *
************************************************************************

FORM FILL_FIELD_TEXTS.

FILL_TEXT 'CLIENT' 'Mandant'(401).
FILL_TEXT 'CARRIER' 'Fluggesellschaft'(402).
FILL_TEXT 'EMP_NUM' 'Personalnummer'(403).
FILL_TEXT 'FIRST_NAME' 'Vorname'(404).
FILL_TEXT 'LAST_NAME' 'Nachname'(405).
FILL_TEXT 'DEPARTMENT' 'Abteilungsk№rzel'(406).
FILL_TEXT 'AREA' 'Bereich'(407).
FILL_TEXT 'SALARY' 'Gehalt'(408).
FILL_TEXT 'CURRENCY' 'Wфhrung'(409).
FILL_TEXT 'CHANGED_BY' 'Letzter ?nderer'(416).
FILL_TEXT 'CH_DATE' '?nderungsdatum'(417).
FILL_TEXT 'TELNR' 'Telefonnummer'(410).
FILL_TEXT 'FAXNR' 'Faxnummer'(411).
FILL_TEXT 'CH_TIME' '?nderungszeit'(418).
FILL_TEXT 'CHIEF' 'Abteilungsleiter'(415).
FILL_TEXT 'LANGU' 'Sprache'(413).
FILL_TEXT 'TEXT' 'Text'(414).
FILL_TEXT 'CONNID' 'Verbindungsnummer'(419).
FILL_TEXT 'FLDATE' 'Flugdatum'(420).
FILL_TEXT 'ROLE' 'Rolle'(421).
FILL_TEXT 'FLUGHAFEN' 'Flughafenname'(422).
FILL_TEXT 'BUERONUMMER' 'B№ronummer'(423).
FILL_TEXT 'TELEFONNUMMER' 'Telefonnummer'(410).
FILL_TEXT 'AGENCY' 'Reiseb№ro'(412).

ENDFORM.

************************************************************************
* FORM LOAD_PIC_FROM_DB *
************************************************************************

FORM LOAD_PIC_FROM_DB
TABLES PIC_DATA
USING PIC_NAME
CHANGING PIC_SIZE.
DATA QUERY_TABLE LIKE W3QUERY OCCURS 1 WITH HEADER LINE.
DATA HTML_TABLE LIKE W3HTML OCCURS 1.
DATA RETURN_CODE LIKE W3PARAM-RET_CODE.
DATA CONTENT_TYPE LIKE W3PARAM-CONT_TYPE.
DATA CONTENT_LENGTH LIKE W3PARAM-CONT_LEN.

CLEAR QUERY_TABLE.
QUERY_TABLE-NAME = '_OBJECT_ID'.
QUERY_TABLE-VALUE = PIC_NAME.
APPEND QUERY_TABLE.

CALL FUNCTION 'WWW_GET_MIME_OBJECT'
TABLES
QUERY_STRING = QUERY_TABLE
HTML = HTML_TABLE
MIME = PIC_DATA
CHANGING
RETURN_CODE = RETURN_CODE
CONTENT_TYPE = CONTENT_TYPE
CONTENT_LENGTH = CONTENT_LENGTH
EXCEPTIONS
INVALID_TABLE = 1
PARAMETER_NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC = 0.
PIC_SIZE = CONTENT_LENGTH.
ENDIF.
ENDFORM.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 02 2004, 13:43 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, сен 17 2004, 08:10
Сообщения: 1024
Премного благодарен! Спасибо!


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB