*& Report ZUPLOAD *
*& *
*&---------------------------------------------------------------------*
*& This program uses the new function GUI_UPLOAD *
*& Input must be TAB delimited with a blank column at the start *
*& to allow for MANDT. *
*& To use this program for any Database Table replace ZTEST with *
*& new table name. *
*&---------------------------------------------------------------------*
*& AUTHOR: Sheila Titchener - abap at iconet-ltd.co.uk *
*& Date: February 2004 *
*&---------------------------------------------------------------------*
REPORT zupload MESSAGE-ID bd.
DATA: w_tab TYPE ZTEST.
DATA: i_tab TYPE STANDARD TABLE OF ZTEST.
DATA: v_subrc(2),
v_recswritten(6).
PARAMETERS: p_file(80)
DEFAULT 'C:\Temp\ZTEST.TXT'.
DATA: filename TYPE string,
w_ans(1) TYPE c.
filename = p_file.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Upload Confirmation'
* DIAGNOSE_OBJECT = ' '
text_question = p_file
text_button_1 = 'Yes'(001)
* ICON_BUTTON_1 = ' '
text_button_2 = 'No'(002)
* ICON_BUTTON_2 = ' '
default_button = '2'
* DISPLAY_CANCEL_BUTTON = 'X'
* USERDEFINED_F1_HELP = ' '
* START_COLUMN = 25
* START_ROW = 6
* POPUP_TYPE =
* IV_QUICKINFO_BUTTON_1 = ' '
* IV_QUICKINFO_BUTTON_2 = ' '
IMPORTING
answer = w_ans
* TABLES
* PARAMETER =
* EXCEPTIONS
* TEXT_NOT_FOUND = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CHECK w_ans = 1.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = filename
* FILETYPE = 'ASC
has_field_separator = 'X'
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
data_tab = i_tab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
* SYST FIELDS ARE NOT SET BY THIS FUNCTION SO DISPLAY THE ERROR CODE *
IF sy-subrc <> 0.
v_subrc = sy-subrc.
MESSAGE e899 WITH 'File Open Error' v_subrc.
ENDIF.
INSERT ZTEST FROM TABLE i_tab.
COMMIT WORK AND WAIT.
MESSAGE i899 WITH sy-dbcnt 'Records Written to ZTEST'.
Tuesday, May 6, 2008
Sample ABAP Program to Upload table using new function GUI_UPLOAD
Sample ABAP Program for Submitting report with selection table
REPORT submit_with_selection_table.
TABLES QMSM.
* Work area for internal table IQMSM
DATA: BEGIN OF WQMSM,
QMNUM LIKE QMSM-QMNUM,
MNGRP LIKE QMSM-MNGRP,
MNCOD LIKE QMSM-MNCOD,
ZZSTAT LIKE QMSM-ZZSTAT,
END OF WQMSM.
* WORK Area for internal table iseltab.
DATA: WSELTAB LIKE RSPARAMS.
*----------------------------------------------------------------------*
* Internal tables
*----------------------------------------------------------------------*
* selection table to pass to RIQMEL30
DATA: ISELTAB LIKE TABLE OF WSELTAB.
* Table of notification numbers selected - will be passed to riqmel30
DATA: IQMSM LIKE TABLE OF WQMSM.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
REFRESH IQMSM.
SELECT QMNUM MNGRP MNCOD ZZSTAT
FROM QMSM INTO CORRESPONDING FIELDS OF TABLE IQMSM
WHERE MNGRP = 'ACTION'
AND MNCOD = 'CALL'
and ( zzqmart = 'ZE' or zzqmart = 'ZI' )
AND ZZSTAT = ' '.
* create selection table entries for field QMART
WSELTAB-SELNAME = 'QMART'.
WSELTAB-KIND = 'S'.
WSELTAB-SIGN = 'I'.
WSELTAB-OPTION = 'EQ'.
WSELTAB-LOW = 'ZE'.
APPEND WSELTAB TO ISELTAB.
WSELTAB-LOW = 'ZI'.
APPEND WSELTAB TO ISELTAB.
* Create selection table entries for QMNUM
CLEAR WSELTAB.
WSELTAB-SELNAME = 'QMNUM'.
WSELTAB-KIND = 'S'.
WSELTAB-SIGN = 'I'.
WSELTAB-OPTION = 'EQ'.
LOOP AT IQMSM INTO WQMSM.
WSELTAB-LOW = WQMSM-QMNUM.
APPEND WSELTAB TO ISELTAB.
ENDLOOP
*
* SUBMIT program with parameters passed in table ISELTAB
* Other parameters passed explicitly
SUBMIT RIQMEL30 WITH SELECTION-TABLE ISELTAB
WITH MNGRP = 'ACTION'
WITH MNCOD = 'CALL'
WITH DATUV = '00000000'
WITH DATUB = '99991231'
WITH STAI1 = 'TSRL'.
Sample ABAP Program for Submitting report with selection table
REPORT submit_with_selection_table.
TABLES QMSM.
* Work area for internal table IQMSM
DATA: BEGIN OF WQMSM,
QMNUM LIKE QMSM-QMNUM,
MNGRP LIKE QMSM-MNGRP,
MNCOD LIKE QMSM-MNCOD,
ZZSTAT LIKE QMSM-ZZSTAT,
END OF WQMSM.
* WORK Area for internal table iseltab.
DATA: WSELTAB LIKE RSPARAMS.
*----------------------------------------------------------------------*
* Internal tables
*----------------------------------------------------------------------*
* selection table to pass to RIQMEL30
DATA: ISELTAB LIKE TABLE OF WSELTAB.
* Table of notification numbers selected - will be passed to riqmel30
DATA: IQMSM LIKE TABLE OF WQMSM.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
REFRESH IQMSM.
SELECT QMNUM MNGRP MNCOD ZZSTAT
FROM QMSM INTO CORRESPONDING FIELDS OF TABLE IQMSM
WHERE MNGRP = 'ACTION'
AND MNCOD = 'CALL'
and ( zzqmart = 'ZE' or zzqmart = 'ZI' )
AND ZZSTAT = ' '.
* create selection table entries for field QMART
WSELTAB-SELNAME = 'QMART'.
WSELTAB-KIND = 'S'.
WSELTAB-SIGN = 'I'.
WSELTAB-OPTION = 'EQ'.
WSELTAB-LOW = 'ZE'.
APPEND WSELTAB TO ISELTAB.
WSELTAB-LOW = 'ZI'.
APPEND WSELTAB TO ISELTAB.
* Create selection table entries for QMNUM
CLEAR WSELTAB.
WSELTAB-SELNAME = 'QMNUM'.
WSELTAB-KIND = 'S'.
WSELTAB-SIGN = 'I'.
WSELTAB-OPTION = 'EQ'.
LOOP AT IQMSM INTO WQMSM.
WSELTAB-LOW = WQMSM-QMNUM.
APPEND WSELTAB TO ISELTAB.
ENDLOOP
*
* SUBMIT program with parameters passed in table ISELTAB
* Other parameters passed explicitly
SUBMIT RIQMEL30 WITH SELECTION-TABLE ISELTAB
WITH MNGRP = 'ACTION'
WITH MNCOD = 'CALL'
WITH DATUV = '00000000'
WITH DATUB = '99991231'
WITH STAI1 = 'TSRL'.
Sample ABAP Program for Sending SAP Mail
*&---------------------------------------------------------------------*
*& Form SEND_MAIL
*&---------------------------------------------------------------------*
* send email to current user *
*----------------------------------------------------------------------*
FORM SEND_MAIL.
* PARAMETERS FOR SO_NEW_DOCUMENT_SEND_API1
DATA: W_OBJECT_ID LIKE SOODK,
W_SONV_FLAG LIKE SONV-FLAG.
DATA: T_RECEIVERS LIKE SOMLRECI1 OCCURS 1 WITH HEADER LINE,
W_OBJECT_CONTENT LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE,
W_DOC_DATA LIKE SODOCCHGI1 OCCURS 0 WITH HEADER LINE.
*
DATA: W_DATE(10).
CLEAR T_RECEIVERS.
T_RECEIVERS-RECEIVER = SY-UNAME.
T_RECEIVERS-REC_TYPE = 'B'.
T_RECEIVERS-EXPRESS = ' '.
APPEND T_RECEIVERS.
W_DOC_DATA-OBJ_DESCR = 'Change Expiry date'.
* Delivery NO
CONCATENATE 'Delivery No' M_VMVMA-VBELN INTO W_OBJECT_CONTENT
SEPARATED BY ' '.
APPEND W_OBJECT_CONTENT.
* material Batch
CONCATENATE 'Material' ZGREC-MATNR 'Batch' ZGREC-CHARG
INTO W_OBJECT_CONTENT SEPARATED BY ' '.
APPEND W_OBJECT_CONTENT.
* Expiry date
WRITE B_VFDAT TO W_DATE DD/MM/YYYY.
CONCATENATE 'Change expiry date to' W_DATE
INTO W_OBJECT_CONTENT SEPARATED BY ' '.
APPEND W_OBJECT_CONTENT.
*
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
EXPORTING
DOCUMENT_DATA = W_DOC_DATA
PUT_IN_OUTBOX = ' '
TABLES
OBJECT_CONTENT = W_OBJECT_CONTENT
RECEIVERS = T_RECEIVERS
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
DOCUMENT_TYPE_NOT_EXIST = 3
OPERATION_NO_AUTHORIZATION = 4
PARAMETER_ERROR = 5
X_ERROR = 6
ENQUEUE_ERROR = 7
OTHERS = 8.
ENDFORM. " SEND_MAIL
Sample ABAP Program for Search Layout sets for given String
REPORT Ysearchl LINE-SIZE 132.
************************************************************************
*
* Program : Ysearchl
* Authors : Chris Harrop (chris.harrop@bigfoot.com)
* Date : March 1999
* Purpose : Searches all Y and Z layout sets for a given string
*
************************************************************************
*
* maintenance history
*
* date author purpose
*
************************************************************************
TABLES: STXL.
PARAMETERS:
STRING(128).
DATA: BEGIN OF TLINETAB OCCURS 0.
INCLUDE STRUCTURE TLINE.
DATA: END OF TLINETAB,
SUBRC LIKE SY-SUBRC.
SELECT TDNAME FROM STXL INTO (STXL-TDNAME)
WHERE TDOBJECT = 'FORM' AND ( TDNAME LIKE 'Y%' OR TDNAME LIKE 'Z%' )
AND TDID = 'TXT'.
PERFORM DISPLAY_STATUS_TEXT USING STXL-TDNAME.
REFRESH TLINETAB.
PERFORM GET_TEXT_TABLE
TABLES TLINETAB
USING 'FORM' 'TXT' STXL-TDNAME
CHANGING SUBRC.
LOOP AT TLINETAB.
IF TLINETAB-TDLINE CS STRING.
WRITE : / STXL-TDNAME, TLINETAB-TDLINE.
ENDIF.
ENDLOOP.
ENDSELECT.
* Display a message on the status bar
FORM DISPLAY_STATUS_TEXT USING VALUE(TEXT) TYPE C.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = TEXT.
ENDFORM.
*
* Get the long texts for the object
*
FORM GET_TEXT_TABLE TABLES TLINETAB
USING VALUE(TDOBJECT) LIKE THEAD-TDOBJECT
VALUE(ID) LIKE THEAD-TDID
VALUE(TDNAME) LIKE THEAD-TDNAME
CHANGING SUBRC LIKE SY-SUBRC.
DATA: BEGIN OF XTHEAD OCCURS 0.
INCLUDE STRUCTURE THEAD.
DATA: END OF XTHEAD.
DATA: EINTRAEGE LIKE SY-TFILL.
DATA XTDNAME LIKE THEAD-TDNAME.
REFRESH XTHEAD.
CLEAR XTDNAME.
XTDNAME = TDNAME.
CALL FUNCTION 'SELECT_TEXT'
EXPORTING
ID = ID
LANGUAGE = SY-LANGU
NAME = TDNAME
OBJECT = TDOBJECT
IMPORTING
ENTRIES = EINTRAEGE
TABLES
SELECTIONS = XTHEAD.
REFRESH TLINETAB.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = ID
LANGUAGE = SY-LANGU
NAME = TDNAME
OBJECT = TDOBJECT
IMPORTING
HEADER = XTHEAD
TABLES
LINES = TLINETAB
EXCEPTIONS
ID = 01
LANGUAGE = 02
NAME = 03
NOT_FOUND = 04
OBJECT = 05
REFERENCE_CHECK = 06.
SUBRC = SY-SUBRC.
ENDFORM. " FILL_ITEM_TEXT
Sample ABAP Program for Sapscript PerForm Module
REPORT YLSD999A.
DATA W_LENGTH TYPE I.
* GENERAL PURPOSE SUBROUTINES FOR CALLING FROM SAPSCRIPTS
*-----------------------------------------------------------------------
*----------------------------------------------------------------------
FORM DISPLAY_POUND TABLES IN_TAB STRUCTURE ITCSY
OUT_TAB STRUCTURE ITCSY.
DATA: COUNT TYPE P VALUE 16.
DATA: W_VALUE(17) TYPE C. "defined as 7 chars to remove pence
DATA: W_CHAR TYPE C.
DATA: W_DUMMY TYPE C.
DATA: W_CURR(3) TYPE C.
* Get first parameter in input table.
READ TABLE IN_TAB INDEX 1.
WRITE IN_TAB-VALUE TO W_VALUE .
* get second parameter in input table
READ TABLE IN_TAB INDEX 2.
MOVE IN_TAB-VALUE TO W_CURR.
IF W_CURR = 'GBP'.
W_CURR = '£'.
ENDIF.
W_LENGTH = STRLEN( W_CURR ).
* look for first space starting at right.
WHILE COUNT > -1.
W_CHAR = W_VALUE+COUNT(1).
* W_CHAR = IN_TAB-VALUE+COUNT(1).
IF W_CHAR = ' '.
COUNT = COUNT - W_LENGTH + 1.
W_VALUE+COUNT(W_LENGTH) = W_CURR.
COUNT = -1.
ELSE.
* W_VALUE+COUNT(1) = W_CHAR.
COUNT = COUNT - 1.
ENDIF.
ENDWHILE.
* read only parameter in output table
READ TABLE OUT_TAB INDEX 1.
OUT_TAB-VALUE = W_VALUE.
MODIFY OUT_TAB INDEX SY-TABIX.
ENDFORM.
Sample ABAP Program for Create IDOC
FUNCTION Y_ISSUE_ROCO_IDOC.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(I_MODE) LIKE Z1ROCO-ZMODE
*" VALUE(I_ROUTE) LIKE Z1ROCO-ROUTE
*" VALUE(I_CUT_OFF) LIKE Z1ROCO-CUT_OFF OPTIONAL
*" VALUE(I_BEZEI) LIKE Z1ROCO-BEZEI OPTIONAL
*" VALUE(I_TROUTE_MON) LIKE Z1ROCO-TROUTE_MON OPTIONAL
*" VALUE(I_TROUTE_TUE) LIKE Z1ROCO-TROUTE_TUE OPTIONAL
*" VALUE(I_TROUTE_WED) LIKE Z1ROCO-TROUTE_WED OPTIONAL
*" VALUE(I_TROUTE_THU) LIKE Z1ROCO-TROUTE_THU OPTIONAL
*" VALUE(I_TROUTE_FRI) LIKE Z1ROCO-TROUTE_FRI OPTIONAL
*" VALUE(I_TROUTE_SAT) LIKE Z1ROCO-TROUTE_SAT OPTIONAL
*" VALUE(I_TROUTE_SUN) LIKE Z1ROCO-TROUTE_SUN OPTIONAL
*" VALUE(I_PGI_IND) LIKE Z1ROCO-PGI_IND OPTIONAL
*"----------------------------------------------------------------------
DATA: W_EDIDC LIKE EDIDC OCCURS 5 WITH HEADER LINE,
W_Z1ROCO LIKE EDIDC,
L_EDIDC LIKE EDIDC,
L_SEND_FLAG,
W_SDATA LIKE EDIDD-SDATA.
DATA: T_BDI_MODEL LIKE BDI_MODEL OCCURS 0 WITH HEADER LINE.
DATA: T_EDIDC LIKE EDIDC OCCURS 0 WITH HEADER LINE.
DATA: T_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE.
*- Call function module to determine if message is to be distributed
CALL FUNCTION 'ALE_MODEL_DETERMINE_IF_TO_SEND'
EXPORTING
MESSAGE_TYPE = 'ZZROCO'
IMPORTING
IDOC_MUST_BE_SENT = L_SEND_FLAG
EXCEPTIONS
OWN_SYSTEM_NOT_DEFINED = 1
OTHERS = 2.
*- Determine recipient systems
CALL FUNCTION 'ALE_MODEL_INFO_GET'
EXPORTING
MESSAGE_TYPE = 'ZZROCO'
* RECEIVING_SYSTEM = ' '
* SENDING_SYSTEM = ' '
* VALIDDATE = SY-DATUM
TABLES
MODEL_DATA = T_BDI_MODEL
EXCEPTIONS
NO_MODEL_INFO_FOUND = 1
OWN_SYSTEM_NOT_DEFINED = 2
OTHERS = 3.
* 3.2
*Call function 'L_IDOC_HEADER_CREATE'
* exporting
* i_mestyp = 'ZZROCO'
* i_mescod = ' '
* i_idoctp = 'ZSDROCO'
* i_rcvprn = 'Z_WMS'
* exceptions
* others = 1.
* 3.3
MOVE I_MODE TO Z1ROCO-ZMODE.
MOVE I_ROUTE TO Z1ROCO-ROUTE.
MOVE I_CUT_OFF TO Z1ROCO-CUT_OFF.
MOVE I_BEZEI TO Z1ROCO-BEZEI.
MOVE I_TROUTE_MON TO Z1ROCO-TROUTE_MON.
MOVE I_TROUTE_TUE TO Z1ROCO-TROUTE_TUE.
MOVE I_TROUTE_WED TO Z1ROCO-TROUTE_WED.
MOVE I_TROUTE_THU TO Z1ROCO-TROUTE_THU.
MOVE I_TROUTE_FRI TO Z1ROCO-TROUTE_FRI.
MOVE I_TROUTE_SAT TO Z1ROCO-TROUTE_SAT.
MOVE I_TROUTE_SUN TO Z1ROCO-TROUTE_SUN.
MOVE I_PGI_IND TO Z1ROCO-PGI_IND.
MOVE Z1ROCO TO: W_SDATA, T_EDIDD-SDATA.
MOVE 'Z1ROCO' TO T_EDIDD-SEGNAM.
APPEND T_EDIDD.
*call function 'L_IDOC_SEGMENT_CREATE'
* exporting
* i_segnam = 'Z1ROCO'
* i_sdata = w_sdata
* exceptions
* others = 1.
*call function 'L_IDOC_SEND'
* tables
* t_comm_idoc = w_edidc
* exceptions
* error_distribute_idoc = 1
* others = 2.
READ TABLE T_BDI_MODEL INDEX 1. " maximum 1 recipient
MOVE 'ZZROCO' TO L_EDIDC-MESTYP.
MOVE 'ZSDROCO' TO L_EDIDC-IDOCTP.
MOVE 'LS' TO L_EDIDC-RCVPRT.
MOVE T_BDI_MODEL-RCVSYSTEM TO L_EDIDC-RCVPRN.
*- Distribute the iDoc
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE' IN UPDATE TASK
EXPORTING
MASTER_IDOC_CONTROL = L_EDIDC
TABLES
COMMUNICATION_IDOC_CONTROL = W_EDIDC
MASTER_IDOC_DATA = T_EDIDD
EXCEPTIONS
ERROR_IN_IDOC_CONTROL = 01
ERROR_WRITING_IDOC_STATUS = 02
ERROR_IN_IDOC_DATA = 03
SENDING_LOGICAL_SYSTEM_UNKNOWN = 04.
COMMIT WORK.
*E_RESPONSE = SY-SUBRC.
ENDFUNCTION.
Sample ABAP Program for Output file to application server then send mail with Download details
*&---------------------------------------------------------------------*
*& Form download_to_application
*& download to application server, attach to mail and send to user
*&---------------------------------------------------------------------*
FORM download_to_application.
data: l_title type SO_OBJ_DES.
l_title = sy-repid.
CALL FUNCTION 'ZSEND_REPORT_MAIL'
EXPORTING
i_title = l_title
tables
it_text_data = it_download
EXCEPTIONS
INVALID_USER = 1
MAIL_SEND_ERROR = 2
OPEN_FILE = 3
FILE_GET_NAME = 4
OTHERS = 5
.
IF sy-subrc <> 0.
MESSAGE e368(00) with 'ZSEND_REPORT_MAIL fail -'
sy-subrc.
ENDIF.
ENDFORM. " download_to_application
===============================================================================
FUNCTION Zsend_report_mail.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(I_UNAME) TYPE SYUNAME DEFAULT SY-UNAME
*" REFERENCE(I_TITLE) TYPE SO_OBJ_DES
*" TABLES
*" IT_TEXT_DATA
*" EXCEPTIONS
*" INVALID_USER
*" MAIL_SEND_ERROR
*" OPEN_FILE
*" FILE_GET_NAME
*"----------------------------------------------------------------------
* This function is used to store a file (report result) on the file
* system of the application server and to send an "active" SAP mail
* to the user.
* The "active" SAP mail calls function ZMAIL_DOWNLOAD to
* download the file to the presentation server.
DATA: ls_document_data LIKE sodocchgi1.
DATA: lt_object_para LIKE soparai1 OCCURS 5 WITH HEADER LINE.
DATA: lt_object_parb LIKE soparbi1 OCCURS 0 WITH HEADER LINE.
DATA: lt_object_cont LIKE solisti1 OCCURS 0 WITH HEADER LINE.
DATA: lt_reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE.
DATA: l_filename(200) TYPE c.
CHECK NOT it_text_data[] IS INITIAL.
* terminate if name not suitable.
IF i_uname IS INITIAL OR
i_uname = 'WF-BATCH' OR
i_uname = 'DDIC' OR
i_uname = 'SAP*'.
RAISE invalid_user.
ENDIF.
* get physical file from logical filename( optional)
CALL FUNCTION 'FILE_GET_NAME'
EXPORTING
logical_filename = 'MAILFILE'
parameter_1 = sy-uname
parameter_2 = sy-datum
parameter_3 = sy-uzeit
* USE_PRESENTATION_SERVER = ' '
* WITH_FILE_EXTENSION = ' '
* USE_BUFFER = ' '
* ELEMINATE_BLANKS = 'X'
IMPORTING
* EMERGENCY_FLAG =
* FILE_FORMAT =
file_name = l_filename
EXCEPTIONS
file_not_found = 1
OTHERS = 2.
IF sy-subrc NE 0.
RAISE file_get_name.
ENDIF.
* save file
OPEN DATASET l_filename FOR OUTPUT IN TEXT MODE.
IF sy-subrc NE 0.
RAISE open_file.
ENDIF.
LOOP AT it_text_data. " into l_text_data.
TRANSFER it_text_data TO l_filename.
ENDLOOP.
CLOSE DATASET l_filename.
* SAP mail header (execute function)
CLEAR: ls_document_data.
ls_document_data-obj_descr = i_title.
ls_document_data-proc_type = 'F'. " function call
ls_document_data-proc_name = 'ZMAIL_DOWNLOAD'.
ls_document_data-no_change = 'X'.
* SAP mail receiver
REFRESH lt_reclist.
CLEAR lt_reclist.
lt_reclist-receiver = i_uname.
lt_reclist-rec_type = 'B'.
* gt_reclist-express = 'X'.
APPEND lt_reclist.
* message text
REFRESH lt_object_cont.
CLEAR lt_object_cont.
lt_object_cont-line =
'The result of the following report has been saved.'.
APPEND lt_object_cont.
* report name
lt_object_cont-line = 'Report:'.
lt_object_cont-line+15 = sy-cprog.
CONDENSE lt_object_cont-line.
APPEND lt_object_cont.
* date & time
lt_object_cont-line = 'Date/Time:'.
WRITE sy-datum TO lt_object_cont-line+15.
WRITE sy-uzeit TO lt_object_cont-line+27.
CONDENSE lt_object_cont-line.
APPEND lt_object_cont.
*
lt_object_cont-line =
'Please execute (Ctrl-F6) this mail to download the result.'.
APPEND lt_object_cont.
* mail parameters
REFRESH lt_object_parb.
CLEAR lt_object_parb.
lt_object_parb-name = 'FUNCTION'. " mail identifier
lt_object_parb-value = 'FILE_DOWNLOAD'. " mail identifier
APPEND lt_object_parb.
lt_object_parb-name = 'FILENAME'.
lt_object_parb-value = l_filename.
APPEND lt_object_parb.
*call SAPOffice API
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
EXPORTING
document_data = ls_document_data
TABLES
object_content = lt_object_cont
object_para = lt_object_para
object_parb = lt_object_parb
receivers = lt_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc NE 0.
RAISE mail_send_error.
ENDIF.
ENDFUNCTION.
===========================================================================
FUNCTION zmail_download.
*"----------------------------------------------------------------------
*"*"Local interface:
*" TABLES
*" MSGDIAL STRUCTURE SOPARBI1
*"----------------------------------------------------------------------
* This function is called in a SAP mail to download a file from the
* application server file system.
* Function ZSEND_REPORT_MAIL is used to save report result
* on application server file system and to send SAP mail to user.
* Based on UK COM solution by Damian Norton.
DATA: ls_msgdial TYPE soparbi1.
DATA: l_filename TYPE filep.
* DATA: l_filename_local TYPE filep.
DATA: l_operation(30) TYPE c.
DATA: BEGIN OF lt_text_data OCCURS 10,
line(2000),
END OF lt_text_data.
* read parameters
LOOP AT msgdial INTO ls_msgdial.
CASE ls_msgdial-name.
WHEN 'FUNCTION'.
l_operation = ls_msgdial-value.
WHEN 'FILENAME'.
l_filename = ls_msgdial-value.
WHEN OTHERS.
MESSAGE e368(00) WITH 'Invalid parameter' ls_msgdial-name.
ENDCASE. " ls_msgdial-name
ENDLOOP. " msgdial
IF l_operation = 'FILE_DOWNLOAD'.
* check, whether file exists on presentation server
REFRESH lt_text_data.
OPEN DATASET l_filename FOR INPUT IN TEXT MODE.
IF sy-subrc = 0.
DO.
READ DATASET l_filename INTO lt_text_data-line.
IF sy-subrc = 0.
APPEND lt_text_data.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET l_filename.
* request filename on presentation server - or GUI_DOWNLOAD??
CALL FUNCTION 'DOWNLOAD'
TABLES
data_tab = lt_text_data
EXCEPTIONS
invalid_filesize = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4
unknown_error = 5
gui_refuse_filetransfer = 6
customer_error = 7
OTHERS = 8.
IF sy-subrc NE 0.
MESSAGE e688(00) WITH 'File download error' sy-subrc.
ENDIF.
ELSE.
MESSAGE e398(00) WITH 'File open error' l_filename.
ENDIF. " sy-subrc = 0 (OPEN DATASET)
ENDIF. " l_operation = 'FILE_DOWNLOAD'
ENDFUNCTION.
Sample ABAP Program for Module Pool Skeleton
PROGRAM YMPSKEL MESSAGE-ID YL.
*-----------------------------------------------------------------------
* DESCRIPTION
* written by !
*-----------------------------------------------------------------------
* TABLES:
DATA: OK_CODE(4), " ok code - screen 1
OK_CODE2(4).
DATA C LIKE SY-INDEX. " Index for screen loop
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* process after input for screen 0100 *
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'SAVE'.
*
WHEN 'DISP'.
*
WHEN 'LIST'.
C = 0. "reset loop control
*
WHEN OTHERS.
*
ENDCASE.
CLEAR OK_CODE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* process before output for screen 0100 *
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'AMEND'. " set gui status
SET TITLEBAR '100'. " set title
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form SAVE data
*&---------------------------------------------------------------------*
* Save screen details
*&---------------------------------------------------------------------*
FORM SAVE.
*
CLEAR OK_CODE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM DISPLAY.
*
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
* exit commands are processed before validation *
* defined by E against function in menu painter(function list)
*----------------------------------------------------------------------*
MODULE EXIT_COMMAND INPUT.
CASE OK_CODE.
WHEN 'EXIT'. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN.
WHEN 'CANC'. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN.
WHEN 'BACK'. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN.
ENDCASE.
ENDMODULE. " EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
*& Form list
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
FORM LIST.
CLEAR OK_CODE. SET SCREEN 200. LEAVE SCREEN.
ENDFORM. " LIST
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND_200 INPUT
*&---------------------------------------------------------------------*
* exit command processing for screen 200 *
* defined by E against function in menu painter(function list)
*----------------------------------------------------------------------*
MODULE EXIT_COMMAND_200 INPUT.
CASE OK_CODE2.
WHEN 'EXIT'. CLEAR OK_CODE2. SET SCREEN 0. LEAVE SCREEN.
WHEN 'CANC'. CLEAR OK_CODE2. SET SCREEN 0. LEAVE SCREEN.
WHEN 'BACK'. CLEAR OK_CODE2. SET SCREEN 100. LEAVE SCREEN.
ENDCASE.
ENDMODULE. " EXIT_COMMAND_200 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
* process before output for screen 200 *
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'POPUP'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0200 OUTPUT
Sample ABAP Program for Module Pool containing screen loop processing
PROGRAM YLSDM004.
TABLES: LTAP, "Transfer order item
LIPS, "SD doc delivery: item data
MAKT, "material description
VEPO, "SD Document: Shipping Unit Item
VEKP, "SD Document: Shipping Unit Header
USR01, "USER defaults
ZPACKMAT, "Packing material table
T646M, "hazard class descriptions
ZCASHAZLAB. "SCasehazardous label table
DATA: OK_CODE(4).
DATA: C LIKE SY-INDEX, " cursor for case labels
* C1 LIKE SY-INDEX, " cursor for storage class(haz)
C2 LIKE SY-INDEX. " cursor for text
* screen fields for selection screen 0100
DATA: S_ZZTRACKING LIKE LTAP-ZZTRACKING,
* S_VENUM LIKE VEKP-VENUM,
S_EXIDV LIKE VEKP-EXIDV.
*
DATA W_MAKTX LIKE MAKT-MAKTX.
* packaging materials
DATA: S_PACKMAT1 LIKE VEKP-ZZPACKMAT1,
S_BEZEI1 LIKE ZPACKMAT-BEZEI,
S_PACKMAT2 LIKE VEKP-ZZPACKMAT1,
S_BEZEI2 LIKE ZPACKMAT-BEZEI.
* Case label codes and descriptions
DATA: BEGIN OF LABELS OCCURS 5 ,
CODE LIKE VEKP-ZZCASELAB1,
TEXT LIKE ZCASHAZLAB-ZZCLB_TEXT,
END OF LABELS.
* hazard class and descriptions
DATA: BEGIN OF HAZ OCCURS 3,
CODE LIKE VEKP-ZZLAGKL,
TEXT LIKE T646M-LAGKT,
END OF HAZ.
DATA: W_HAZ_TEXT1 LIKE T646M-LAGKT,
W_HAZ_TEXT2 LIKE T646M-LAGKT,
W_HAZ_TEXT3 LIKE T646M-LAGKT.
DATA T_LINES LIKE TLINE OCCURS 1 WITH HEADER LINE.
DATA T_HEADER LIKE THEAD.
*DATA W_INDEX LIKE SY-INDEX.
* start line of the last screen of text lines
DATA W_MAX LIKE SY-INDEX.
DATA W_TIN_MAKTX LIKE MAKT-MAKTX.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* selection screen *
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
CASE OK_CODE.
WHEN 'EXIT'. LEAVE TO SCREEN 0.
WHEN 'CANC'.
SELECT SINGLE * FROM USR01
WHERE BNAME = SY-UNAME .
LEAVE TO TRANSACTION USR01-STCOD.
ENDCASE.
SET PF-STATUS 'SELECT'.
CLEAR: VEKP,
LTAP.
SET TITLEBAR 'SEL'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
C2 = 0.
* Mandatory Fields
CHECK OK_CODE = 'EXEC'.
*
CALL SCREEN '0110'.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module VAL_ZZTRACKING INPUT
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
MODULE VAL_ZZTRACKING INPUT.
* MUST enter at least one value
* IF S_ZZTRACKING = ' ' AND S_VENUM = ' ' AND S_EXIDV = ' '.
IF S_ZZTRACKING = ' ' AND S_EXIDV = ' '.
MESSAGE E001(YL).
ENDIF.
* if tracking label entered other fields must be initial
IF S_ZZTRACKING NE ' '
* AND ( S_VENUM NE ' ' OR S_EXIDV NE ' ' ).
AND S_EXIDV NE ' ' .
MESSAGE E083(YL).
ENDIF.
* if tracking label number entered get record from LTAP
IF S_ZZTRACKING NE ' '.
SELECT SINGLE * FROM LTAP
WHERE ZZTRACKING = S_ZZTRACKING.
IF SY-SUBRC NE 0.
MESSAGE E022(YL) WITH S_ZZTRACKING.
ELSE.
*--------------------------------------------------------------------
*
* IF LTAP-VENUM NE ' '.
*
* SELECT SINGLE * FROM VEKP
* WHERE VENUM = LTAP-VENUM .
*
IF LTAP-EXIDV NE ' '.
SELECT SINGLE * FROM VEKP
WHERE EXIDV = LTAP-EXIDV .
*---------------------------------------------------------------------
IF SY-SUBRC NE 0.
MESSAGE E022(YL) WITH LTAP-EXIDV.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMODULE. " VAL_ZZTRACKING INPUT
*&---------------------------------------------------------------------*
*& Module VAL_VENUM INPUT
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
*MODULE VAL_VENUM INPUT.
* SET CURSOR FIELD S_VENUM.
* IF S_VENUM NE ' '
* AND S_EXIDV NE ' '.
* MESSAGE E083(YL).
* ENDIF.
* IF S_VENUM NE ' '.
*
* SELECT SINGLE * FROM VEKP
* WHERE VENUM = S_VENUM.
* IF SY-SUBRC NE 0.
* MESSAGE E022(YL) WITH S_VENUM.
* ENDIF.
* ENDIF.
*ENDMODULE. " VAL_VENUM INPUT
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
MODULE EXIT_COMMAND INPUT.
CASE OK_CODE.
WHEN 'EXIT'. LEAVE TO SCREEN 0.
WHEN 'CANC'.
SELECT SINGLE * FROM USR01
WHERE BNAME = SY-UNAME .
LEAVE TO TRANSACTION USR01-STCOD.
WHEN 'BACK'. LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
*& Module VAL_EXIDV INPUT
*&---------------------------------------------------------------------*
* validate external shipping unit number exits on VEKP *
*----------------------------------------------------------------------*
MODULE VAL_EXIDV INPUT.
IF S_EXIDV NE ' '.
CONCATENATE '00' S_EXIDV INTO VEKP-EXIDV.
SELECT SINGLE * FROM VEKP
WHERE EXIDV = VEKP-EXIDV.
IF SY-SUBRC NE 0.
MESSAGE E022(YL) WITH S_EXIDV.
ENDIF.
ENDIF.
ENDMODULE. " VAL_EXIDV INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0110 OUTPUT
*&---------------------------------------------------------------------*
* Display screen *
*----------------------------------------------------------------------*
MODULE STATUS_0110 OUTPUT.
IF OK_CODE = 'P+ ' OR OK_CODE = 'P- ' OR OK_CODE = 'P++ '
OR OK_CODE = 'P-- '.
EXIT.
ENDIF.
IF VEKP-VENUM = ' '.
* processing mode b
PERFORM DISP_DELIVERY.
ELSE.
* processing mode a
PERFORM DISP_SHIP_UNIT.
ENDIF.
* common processing
* get mara details
CLEAR MAKT.
*SELECT SINGLE * FROM MARA
* WHERE MATNR = LIPS-MATNR .
*IF SY-SUBRC = 0.
* material description
SELECT SINGLE * FROM MAKT
WHERE MATNR = LIPS-MATNR
AND SPRAS = SY-LANGU .
DATA W_TDNAME LIKE THEAD-TDNAME.
W_TDNAME = LIPS-VBELN.
W_TDNAME+10 = LIPS-POSNR.
CLEAR T_LINES.
REFRESH T_LINES.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = 'Z034'
LANGUAGE = SY-LANGU
NAME = W_TDNAME
OBJECT = 'VBBP'
IMPORTING
HEADER = T_HEADER
TABLES
LINES = T_LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
LOOP AT T_LINES.
EXIT.
ENDLOOP.
IF SY-TFILL > 1.
* W_MAX = SY-TFILL - 5.
W_MAX = SY-TFILL - 1.
ELSE.
W_MAX = 1.
ENDIF.
*
IF W_MAX > 3 .
SET PF-STATUS 'DELIVERY'.
ELSE.
SET PF-STATUS 'ONE'.
ENDIF.
ENDMODULE. " STATUS_0110 OUTPUT
*&---------------------------------------------------------------------*
*& Form DISP_DELIVERY
*&---------------------------------------------------------------------*
* Diplay delivery title - Read delivery item from LIPS
* processing mode B
*----------------------------------------------------------------------*
FORM DISP_DELIVERY.
* SET PF-STATUS 'DELIVERY'.
SET TITLEBAR 'DEL'.
CLEAR LIPS.
SELECT SINGLE * FROM LIPS
WHERE VBELN = LTAP-VBELN_VL
AND POSNR = LTAP-POSNR_VL .
ENDFORM. " DISP_DELIVERY
*&---------------------------------------------------------------------*
*& Form DISP_SHIP_UNIT
*&---------------------------------------------------------------------*
* Display Shipping unit title and read shipping details
*----------------------------------------------------------------------*
* Processing MODE a
*----------------------------------------------------------------------*
FORM DISP_SHIP_UNIT.
* SET PF-STATUS 'DELIVERY'.
SET TITLEBAR 'SHP'.
* vekp already read
* read vepo
* only one line per case
CLEAR VEPO.
CLEAR LIPS.
CLEAR W_MAKTX.
CLEAR W_TIN_MAKTX.
CLEAR ZPACKMAT.
CLEAR S_PACKMAT1.
CLEAR S_PACKMAT2.
CLEAR S_BEZEI1.
CLEAR S_BEZEI2.
CLEAR LABELS.
REFRESH LABELS.
SELECT SINGLE * FROM VEPO
WHERE VENUM = VEKP-VENUM.
IF SY-SUBRC = 0.
SELECT SINGLE * FROM LIPS
WHERE VBELN = VEPO-VBELN
AND POSNR = VEPO-POSNR .
ENDIF.
* packaging material
IF VEKP-ZZPACKMAT1 NE ' '.
SELECT SINGLE * FROM ZPACKMAT
WHERE ZZPACKMAT = VEKP-ZZPACKMAT1.
IF SY-SUBRC = 0.
S_PACKMAT1 = VEKP-ZZPACKMAT1.
S_BEZEI1 = ZPACKMAT-BEZEI.
ENDIF.
ENDIF.
IF VEKP-ZZPACKMAT2 NE ' '.
SELECT SINGLE * FROM ZPACKMAT
WHERE ZZPACKMAT = VEKP-ZZPACKMAT2.
IF SY-SUBRC = 0.
S_PACKMAT2 = VEKP-ZZPACKMAT2.
S_BEZEI2 = ZPACKMAT-BEZEI.
ENDIF.
ENDIF.
* hazard class x 3
CLEAR: W_HAZ_TEXT1, W_HAZ_TEXT2, W_HAZ_TEXT3.
* REFRESH HAZ.
IF VEKP-ZZLAGKL NE ' '.
* HAZ-CODE = VEKP-ZZLAGKL.
SELECT SINGLE * FROM T646M
WHERE SPRAS = SY-LANGU
AND LAGKL = VEKP-ZZLAGKL .
IF SY-SUBRC = 0.
W_HAZ_TEXT1 = T646M-LAGKT.
ENDIF.
* APPEND HAZ.
ENDIF.
IF VEKP-ZZLAGKL2 NE ' '.
* HAZ-CODE = VEKP-ZZLAGKL2.
SELECT SINGLE * FROM T646M
WHERE SPRAS = SY-LANGU
AND LAGKL = VEKP-ZZLAGKL2 .
IF SY-SUBRC = 0.
W_HAZ_TEXT2 = T646M-LAGKT.
ENDIF.
* APPEND HAZ.
ENDIF.
IF VEKP-ZZLAGKL3 NE ' '.
* CLEAR HAZ.
* HAZ-CODE = VEKP-ZZLAGKL3.
SELECT SINGLE * FROM T646M
WHERE SPRAS = SY-LANGU
AND LAGKL = VEKP-ZZLAGKL3 .
IF SY-SUBRC = 0.
W_HAZ_TEXT3 = T646M-LAGKT.
ENDIF.
* APPEND HAZ.
ENDIF.
* LOOP AT HAZ.
* EXIT.
* ENDLOOP.
* case label details
IF VEKP-ZZCASELAB1 NE ' '.
LABELS-CODE = VEKP-ZZCASELAB1.
APPEND LABELS.
ENDIF.
IF VEKP-ZZCASELAB2 NE ' '.
LABELS-CODE = VEKP-ZZCASELAB2.
APPEND LABELS.
ENDIF.
IF VEKP-ZZCASELAB3 NE ' '.
LABELS-CODE = VEKP-ZZCASELAB3.
APPEND LABELS.
ENDIF.
IF VEKP-ZZCASELAB4 NE ' '.
LABELS-CODE = VEKP-ZZCASELAB4.
APPEND LABELS.
ENDIF.
IF VEKP-ZZCASELAB5 NE ' '.
LABELS-CODE = VEKP-ZZCASELAB5.
APPEND LABELS.
ENDIF.
LOOP AT LABELS.
SELECT SINGLE * FROM ZCASHAZLAB
WHERE ZZCASELAB = LABELS-CODE .
LABELS-TEXT = ZCASHAZLAB-ZZCLB_TEXT.
MODIFY LABELS.
ENDLOOP.
* tin material description
IF VEPO-ZZTINNR NE ' '.
SELECT SINGLE * FROM MAKT
WHERE MATNR = VEPO-ZZTINNR
AND SPRAS = SY-LANGU .
IF SY-SUBRC = 0.
W_TIN_MAKTX = MAKT-MAKTX.
ENDIF.
ENDIF.
* case material description
IF VEKP-VHILM NE ' '.
SELECT SINGLE * FROM MAKT
WHERE MATNR = VEKP-VHILM
AND SPRAS = SY-LANGU .
IF SY-SUBRC = 0.
W_MAKTX = MAKT-MAKTX.
ENDIF.
ENDIF.
ENDFORM. " DISP_SHIP_UNIT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0110 INPUT
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0110 INPUT.
* position text line cursor
CASE OK_CODE.
WHEN 'P+ '.
C2 = C2 + 3.
IF C2 > W_MAX.
C2 = W_MAX.
ENDIF.
WHEN 'P- '.
C2 = C2 - 3.
IF C2 < 1.
C2 = 1.
ENDIF.
WHEN 'P++ '.
C2 = W_MAX.
WHEN 'P-- '.
C2 = 1.
WHEN 'VL02'.
SET PARAMETER ID 'VL ' FIELD LIPS-VBELN.
CALL TRANSACTION 'VL02'.
ENDCASE.
ENDMODULE. " USER_COMMAND_0110 INPUT
Sample ABAP Program for MB1B Call Transaction
REPORT YMBIE096 LINE-SIZE 80.
*----------------------------------------------------------------------*
* Program: YMBIE096
* Author: Sheila Titchener
* Date: Mar 1999
* Purpose: To move stock to new plant
*----------------------------------------------------------------------*
TABLES: MCHB.
* internal table
DATA: BEGIN OF I_MCHB OCCURS 0,
MATNR LIKE MCHB-MATNR,
LGORT LIKE MCHB-LGORT,
CHARG LIKE MCHB-CHARG,
J_2CTRNR LIKE MCHB-J_2CTRNR,
J_2CELNG LIKE MCHB-J_2CELNG,
CLABS LIKE MCHB-CLABS,
END OF I_MCHB.
*-----------------------new code smt nov 98-----------------------------
* batch input tables
DATA BEGIN OF BDCDATA OCCURS 100.
INCLUDE STRUCTURE BDCDATA.
DATA END OF BDCDATA.
DATA BEGIN OF MESSTAB OCCURS 10.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA END OF MESSTAB.
*
SELECT-OPTIONS S_MATNR FOR MCHB-MATNR.
PARAMETERS: P_DISP AS CHECKBOX.
DATA W_MODE.
DATA W_MESSAGE LIKE MESSAGE.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
SELECT MATNR LGORT J_2CELNG CHARG CLABS J_2CTRNR FROM MCHB
INTO CORRESPONDING FIELDS OF TABLE I_MCHB
WHERE MATNR IN S_MATNR
AND WERKS = 'BT'.
*----------------------------------------------------------------------*
END-OF-SELECTION.
*----------------------------------------------------------------------*
LOOP AT I_MCHB.
CHECK I_MCHB-J_2CELNG NE 0.
CHECK I_MCHB-J_2CELNG = I_MCHB-CLABS.
PERFORM MOVE_STOCK.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form MOVE_STOCK
*&---------------------------------------------------------------------*
* Call transaction MB1B to transfer stock
*----------------------------------------------------------------------*
FORM MOVE_STOCK.
DATA: W_QTY(10).
WRITE I_MCHB-J_2CELNG TO W_QTY DECIMALS 0.
REFRESH: BDCDATA, MESSTAB.
PERFORM DYNPRO USING:
'X' 'SAPMM07M' '0400',
' ' 'RM07M-BWARTWA' '301',
' ' 'RM07M-WERKS' 'BT',
' ' 'RM07M-LGORT' I_MCHB-LGORT,
' ' 'BDC_OKCODE' '/0',
'X' 'SAPMM07M' '0421',
' ' 'MSEGK-UMWRK' '94',
' ' 'MSEGK-UMLGO' I_MCHB-LGORT,
' ' 'BDC_OKCODE' 'NLE',
*CODING BLOCK
'X' 'SAPLKACB' '0002',
' ' 'BDC_OKCODE' '/0',
'X' 'SAPMM07M' '0421',
' ' 'MSEG-MATNR(1)' I_MCHB-MATNR,
' ' 'MSEG-ERFMG(1)' W_QTY,
' ' 'MSEG-CHARG(1)' I_MCHB-CHARG,
' ' 'BDC_OKCODE' '/0',
*CODING BLOCK
'X' 'SAPLKACB' '0002',
' ' 'BDC_OKCODE' '/0',
*CODING BLOCK
'X' 'SAPLKACB' '0002',
' ' 'BDC_OKCODE' '/0',
* 'X' 'SAPMM07M' '0410',
* ' ' 'BDC_OKCODE' '/0',
*CODING BLOCK
* 'X' 'SAPLKACB' '0002',
* ' ' 'BDC_OKCODE' '/8',
*CODING BLOCK
* 'X' 'SAPLKACB' '0002',
* ' ' 'BDC_OKCODE' '/8',
'X' 'SAPLJ2CW' '0190',
' ' 'J_5C7-UMCHA' I_MCHB-CHARG,
' ' 'BDC_OKCODE' '/7',
'X' 'SAPMM07M' '0421',
' ' 'BDC_OKCODE' '/11',
*CODING BLOCK
'X' 'SAPLKACB' '0002',
' ' 'BDC_OKCODE' '/0'.
IF P_DISP = 'X'.
W_MODE = 'A'.
ELSE.
W_MODE = 'N'.
ENDIF.
CALL TRANSACTION 'MB1B' USING BDCDATA MODE W_MODE UPDATE 'S'
MESSAGES INTO MESSTAB.
WRITE: / I_MCHB-MATNR, I_MCHB-CHARG, I_MCHB-LGORT,
I_MCHB-J_2CTRNR, I_MCHB-J_2CELNG.
IF SY-SUBRC NE 0.
* what to do if there's an error????
LOOP AT MESSTAB.
SY-MSGNO = MESSTAB-MSGNR.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
MSGID = MESSTAB-MSGID
MSGNO = SY-MSGNO
MSGTY = MESSTAB-MSGTYP
MSGV1 = MESSTAB-MSGV1
MSGV2 = MESSTAB-MSGV2
MSGV3 = MESSTAB-MSGV3
MSGV4 = MESSTAB-MSGV4
MSGV5 = MESSTAB-MSGV4
IMPORTING
* error =
MESSG = W_MESSAGE
* msgln =
EXCEPTIONS
OTHERS = 1.
WRITE: / W_MESSAGE.
* message id messtab-msgid type 'I' number messtab-msgnr.
ENDLOOP.
ENDIF.
ENDFORM. " CHANGE_BILLING_TYPE
*-----------------------------------------------------------------------
* FORM DYNPRO - new form smt nov 1998
*-----------------------------------------------------------------------
* > DYNBEGIN
* > NAME
* > VALUE
*-----------------------------------------------------------------------
*
FORM DYNPRO USING DYNBEGIN NAME VALUE.
IF DYNBEGIN = 'X'.
CLEAR BDCDATA.
MOVE: NAME TO BDCDATA-PROGRAM,
VALUE TO BDCDATA-DYNPRO,
'X' TO BDCDATA-DYNBEGIN.
APPEND BDCDATA.
ELSE.
CLEAR BDCDATA.
MOVE: NAME TO BDCDATA-FNAM,
VALUE TO BDCDATA-FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM.
*
Sample ABAP Program of Function Module to Convert Work Center into Personnel Number
FUNCTION z_get_pernr_from_wc.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(I_WORK_CENTRE) TYPE ARBPL
*" EXPORTING
*" VALUE(E_PERSONNEL_NO) TYPE PERNR
*"----------------------------------------------------------------------
* Author: Sheila Titchener - www.iconet-ltd.co.uk
* Date: July 2005
* Description: Convert Work Centre into Personnel Number
*"----------------------------------------------------------------------
DATA: l_hroid TYPE hrobjid,
l_sobid TYPE sobid.
SELECT SINGLE hroid FROM crhd
INTO l_hroid
WHERE objty = 'A'
AND arbpl = i_work_centre.
CHECK sy-subrc = 0.
SELECT SINGLE sobid FROM hrp1001
INTO l_sobid
WHERE objid = l_hroid
AND sclas = 'S'.
CHECK sy-subrc = 0.
SELECT SINGLE sobid FROM hrp1001
INTO l_sobid
WHERE otype = 'S'
AND objid = l_sobid
AND sclas = 'P'.
CHECK sy-subrc = 0.
e_personnel_no = l_sobid.
ENDFUNCTION.
Sample ABAP Program of FTP Function Module
FUNCTION Y_FTP.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(USER)
*" VALUE(PWD)
*" VALUE(HOST)
*" TABLES
*" COMMANDS
*" EXCEPTIONS
*" NO_SUCH_FILE
*"----------------------------------------------------------------------
DATA: W_USER(12) TYPE C ,
W_PWD(20) TYPE C ,
W_HOST(64) TYPE C.
DATA: HDL TYPE I,
KEY TYPE I VALUE 26101957,
DSTLEN TYPE I.
DATA: BEGIN OF RESULT OCCURS 0,
LINE(100) TYPE C,
END OF RESULT.
DESCRIBE FIELD PWD LENGTH DSTLEN.
CALL 'AB_RFC_X_SCRAMBLE_STRING'
ID 'SOURCE' FIELD PWD ID 'KEY' FIELD KEY
ID 'SCR' FIELD 'X' ID 'DESTINATION' FIELD PWD
ID 'DSTLEN' FIELD DSTLEN.
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
USER = USER
PASSWORD = PWD
HOST = HOST
RFC_DESTINATION = 'SAPFTP'
IMPORTING
HANDLE = HDL.
LOOP AT COMMANDS.
IF COMMANDS NE ' '.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
HANDLE = HDL
COMMAND = COMMANDS
TABLES
DATA = RESULT
EXCEPTIONS
COMMAND_ERROR = 1
TCPIP_ERROR = 2.
LOOP AT RESULT.
WRITE AT / RESULT-LINE.
IF RESULT CS 'error'.
RAISE NO_SUCH_FILE.
ENDIF.
ENDLOOP.
REFRESH RESULT.
ENDIF.
ENDLOOP.
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
HANDLE = HDL.
ENDFUNCTION.
Sample ABAP Program to EXPORT LIST TO MEMORY
************************************************************************
* Author - Sheila Titchener *
* Program - Report of orders with billing/delivery blocks
* Date - October 1998 *
* Company - IconeT Services *
************************************************************************
************************************************************************
REPORT YVREE024 LINE-SIZE 185 LINE-COUNT 63 NO STANDARD PAGE HEADING.
*---------------------------------------------------------------------*
* DATA DECLARATIONS *
*---------------------------------------------------------------------*
TABLES: VBAK, VBAP, VBEP, KNA1, TVFST, TVLST.
* Selection screens.
*-----------------------------------------------------------------------
* mandatory parameters
SELECTION-SCREEN BEGIN OF BLOCK PARAMETERS
WITH FRAME
TITLE TEXT-020 .
PARAMETERS: P_VKORG LIKE VBAK-VKORG OBLIGATORY ,
P_VTWEG LIKE VBAK-VTWEG OBLIGATORY ,
P_SPART LIKE VBAK-SPART OBLIGATORY .
SELECTION-SCREEN END OF BLOCK PARAMETERS.
*-----------------------------------------------------------------------
* optional selection ranges
SELECTION-SCREEN BEGIN OF BLOCK SELECT_CRITERIA
WITH FRAME
TITLE TEXT-010 .
SELECT-OPTIONS:
S_VKBUR FOR VBAK-VKBUR,
S_VKGRP FOR VBAK-VKGRP,
S_KUNNR FOR VBAK-KUNNR.
SELECTION-SCREEN END OF BLOCK SELECT_CRITERIA .
* Order header table.
DATA: BEGIN OF I_VBAK OCCURS 0,
VBELN LIKE VBAK-VBELN,
KUNNR LIKE VBAK-KUNNR,
FAKSK LIKE VBAK-FAKSK, "billing block
LIFSK LIKE VBAK-LIFSK, "delivery block
END OF I_VBAK.
* report table
DATA: BEGIN OF ITAB OCCURS 0,
VBELN LIKE VBAP-VBELN, " Order Number
KUNNR LIKE VBAK-KUNNR, " Customer Number
NAME1 LIKE KNA1-NAME1, " Customer Name
ERNAM LIKE VBAK-ERNAM, " User created
POSNR LIKE VBAP-POSNR, " Line Item
MATNR LIKE VBAP-MATNR, " Material Number
KWMENG LIKE VBAP-KWMENG, " Quantity
MEINS LIKE VBAP-MEINS, " Unit of measure
NETWR LIKE VBAP-NETWR, " value
FAKSP LIKE VBAP-FAKSP, " billing block
LIFSP LIKE VBEP-LIFSP, " delivery block
END OF ITAB.
*---------------------------------------------------------------------*
INITIALIZATION .
GET PARAMETER ID 'VKO' FIELD P_VKORG.
GET PARAMETER ID 'VTW' FIELD P_VTWEG.
GET PARAMETER ID 'SPA' FIELD P_SPART.
*---------------------------------------------------------------------*
START-OF-SELECTION .
*---------------------------------------------------------------------*
* populate vbak table from selection criteria with headers that have
* billing or delivery blocks
PERFORM SELECT_DOCUMENTS.
* select blocked items from documents selected from vbak
PERFORM SELECT_BLOCKED_ITEMS.
*---------------------------------------------------------------------*
END-OF-SELECTION.
*---------------------------------------------------------------------*
SORT ITAB BY VBELN POSNR.
* print report from internal table
PERFORM PRINT_REPORT.
* run report of orders with payment block on customer
SUBMIT YVREE025 EXPORTING LIST TO MEMORY
AND RETURN
WITH P_VKORG = P_VKORG
WITH P_VTWEG = P_VTWEG
WITH P_SPART = P_SPART
WITH S_VKBUR IN S_VKBUR
WITH S_VKGRP IN S_VKGRP
WITH S_KUNNR IN S_KUNNR.
DATA: ABAPLIST LIKE ABAPLIST OCCURS 0.
* recover YVREE025 report and display
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
LISTOBJECT = ABAPLIST
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
*if sy-batch = space.
CALL FUNCTION 'DISPLAY_LIST'
EXPORTING
FULLSCREEN = 'X'
* CALLER_HANDLES_EVENTS =
IMPORTING
USER_COMMAND = SY-UCOMM
TABLES
LISTOBJECT = ABAPLIST
EXCEPTIONS
EMPTY_LIST = 1
OTHERS = 2.
*else.
* using write_list duplicates yvree024 headings on yvree025 list
* display_list prints ok in background as long as print immediately is
* NOT switched off
*call function 'WRITE_LIST'
* tables
* listobject = abaplist
* exceptions
* empty_list = 1
* others = 2.
*endif.
*---------------------------------------------------------------------*
TOP-OF-PAGE.
*---------------------------------------------------------------------*
* write top of page title.
PERFORM WRITE_TITLE .
* write column headings.
PERFORM WRITE_HEADER.
*&---------------------------------------------------------------------*
*& Form SELECT_DOCUMENTS
*&---------------------------------------------------------------------*
* select order header details from vbak depending on selection
* criteria entered
*----------------------------------------------------------------------*
FORM SELECT_DOCUMENTS.
SELECT VBELN KUNNR LIFSK FAKSK
FROM VBAK INTO CORRESPONDING FIELDS OF TABLE I_VBAK
WHERE VKORG = P_VKORG
AND VTWEG = P_VTWEG
AND SPART = P_SPART
AND VKGRP IN S_VKGRP
AND VKBUR IN S_VKBUR
AND KUNNR IN S_KUNNR.
ENDFORM. " SELECT_DOCUMENTS
*&---------------------------------------------------------------------*
*& Form SELECT_BLOCKED_ITEMS
*&---------------------------------------------------------------------*
* check extracted documents for blocks *
*----------------------------------------------------------------------*
FORM SELECT_BLOCKED_ITEMS.
* process oders selected
LOOP AT I_VBAK.
* if order blocked at header level select all items
IF I_VBAK-FAKSK NE SPACE OR I_VBAK-LIFSK NE SPACE.
PERFORM SELECT_ALL_ITEMS.
ELSE.
* check for block at item level
SELECT VBELN POSNR MATNR KWMENG MEINS NETWR FAKSP ERNAM
FROM VBAP INTO
(VBAP-VBELN, VBAP-POSNR, VBAP-MATNR, VBAP-KWMENG, VBAP-MEINS,
VBAP-NETWR, VBAP-FAKSP, VBAP-ERNAM)
WHERE VBELN = I_VBAK-VBELN.
IF VBAP-FAKSP NE SPACE.
CLEAR ITAB.
MOVE-CORRESPONDING VBAP TO ITAB.
MOVE I_VBAK-KUNNR TO ITAB-KUNNR.
APPEND ITAB.
ELSE.
* check for block at delivery level
SELECT LIFSP WMENG FROM VBEP INTO
(VBEP-LIFSP, VBEP-WMENG)
WHERE VBELN = I_VBAK-VBELN
AND POSNR = VBAP-POSNR.
IF VBEP-LIFSP NE SPACE.
CLEAR ITAB.
MOVE-CORRESPONDING VBAP TO ITAB.
MOVE I_VBAK-KUNNR TO ITAB-KUNNR.
* use schedule qty
MOVE VBEP-WMENG TO ITAB-KWMENG.
* and reason
MOVE VBEP-LIFSP TO ITAB-LIFSP.
* recalculate value
ITAB-NETWR = ITAB-NETWR / VBAP-KWMENG * VBEP-WMENG.
APPEND ITAB.
ENDIF.
ENDSELECT.
ENDIF.
ENDSELECT.
ENDIF.
ENDLOOP.
ENDFORM. " SELECT_BLOCKED_ITEMS
*&---------------------------------------------------------------------*
*& Form PRINT_REPORT
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
FORM PRINT_REPORT.
DATA: W_REASON_TEXT(25).
LOOP AT ITAB.
* get name
SELECT SINGLE NAME1 FROM KNA1 INTO KNA1-NAME1
WHERE KUNNR = ITAB-KUNNR .
* get reason text
IF ITAB-FAKSP NE SPACE.
SELECT SINGLE VTEXT FROM TVFST INTO W_REASON_TEXT
WHERE SPRAS = SY-LANGU
AND FAKSP = ITAB-FAKSP .
ELSE.
SELECT SINGLE VTEXT FROM TVLST INTO W_REASON_TEXT
WHERE SPRAS = SY-LANGU
AND LIFSP = ITAB-LIFSP.
ENDIF.
*
WRITE: / SY-VLINE , (10) ITAB-VBELN,
SY-VLINE , (10) ITAB-KUNNR,
SY-VLINE , (35) KNA1-NAME1,
SY-VLINE , (12) ITAB-ERNAM,
SY-VLINE , (6) ITAB-POSNR,
SY-VLINE , (18) ITAB-MATNR,
SY-VLINE , (10) ITAB-KWMENG DECIMALS 0,
SY-VLINE , (3) ITAB-MEINS,
SY-VLINE , (15) ITAB-NETWR,
SY-VLINE , (02) ITAB-LIFSP,
SY-VLINE , (02) ITAB-FAKSP,
SY-VLINE , (25) W_REASON_TEXT,
SY-VLINE .
ENDLOOP.
WRITE:/1(185) SY-ULINE.
ENDFORM. " PRINT_REPORT
*---------------------------------------------------------------------*
* FORM WRITE_TITLE *
*---------------------------------------------------------------------*
* Form to write top of page title. *
*---------------------------------------------------------------------*
FORM WRITE_TITLE.
WRITE:/1(185) SY-ULINE.
WRITE:/ 'Pirelli Cables Limited' ,
40 SY-TITLE , " Report title
120 'Date :' , 130 SY-DATUM .
WRITE:/120 'Page :' ,
130 SY-PAGNO , " Page number of the report
160 'YV24 / YVREE024 /', SY-MANDT.
WRITE:/160 'Report 2 of 2'.
WRITE:/1(185) SY-ULINE.
* format color col_heading intensified off.
WRITE:/(25) 'Report generated for; ',
'Sales Organisation:',
P_VKORG ,
' Distribution Channel:',
P_VTWEG,
' Division:',
P_SPART.
WRITE: /27
'Sales Office:',
S_VKBUR-LOW.
IF S_VKBUR-HIGH NE SPACE.
WRITE: ' - ', S_VKBUR-HIGH.
ENDIF.
WRITE: 59 ' Sales Group:',
S_VKGRP-LOW.
IF S_VKGRP-HIGH NE SPACE.
WRITE: ' - ', S_VKGRP-HIGH.
ENDIF.
WRITE: 92 ' Customer:',
S_KUNNR-LOW.
IF S_KUNNR-HIGH NE SPACE.
WRITE: ' - ', S_KUNNR-HIGH.
ENDIF.
WRITE:/1(185) SY-ULINE.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE-HEADER *
*---------------------------------------------------------------------*
* Form to write Column headings *
*---------------------------------------------------------------------*
FORM WRITE_HEADER.
SKIP.
FORMAT COLOR COL_HEADING INTENSIFIED.
WRITE:/1(185) SY-ULINE.
WRITE:/
SY-VLINE , (10) ' Order ' ,
SY-VLINE , (10) ' Customer ' ,
SY-VLINE , (35) ' Name ' ,
SY-VLINE , (12) ' User created',
SY-VLINE , (06) ' Item ' ,
SY-VLINE , (18) ' Material',
SY-VLINE , (10) 'Quantity' CENTERED DECIMALS 0,
SY-VLINE , (03) 'UOM' ,
SY-VLINE , (15) ' Value ',
SY-VLINE , (02) 'DB',
SY-VLINE , (02) 'BB',
SY-VLINE , (25) ' Reason',
SY-VLINE .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SELECT_ALL_ITEMS
*&---------------------------------------------------------------------*
* select all items for this header when blocked at header level *
*----------------------------------------------------------------------*
FORM SELECT_ALL_ITEMS.
SELECT VBELN POSNR MATNR KWMENG MEINS NETWR ERNAM
FROM VBAP INTO
(VBAP-VBELN, VBAP-POSNR, VBAP-MATNR, VBAP-KWMENG, VBAP-MEINS,
VBAP-NETWR, VBAP-ERNAM)
* REMOVED appending corresponding fields of table itab
WHERE VBELN = I_VBAK-VBELN.
MOVE-CORRESPONDING VBAP TO ITAB.
MOVE I_VBAK-FAKSK TO ITAB-FAKSP.
MOVE I_VBAK-LIFSK TO ITAB-LIFSP.
MOVE I_VBAK-KUNNR TO ITAB-KUNNR.
APPEND ITAB.
ENDSELECT.
ENDFORM. " SELECT_ALL_ITEMS
Sample ABAP Program to Execute Unix command from within SAP
REPORT YSMT018A
MESSAGE-ID YL.
* ABAP to append ribesnsl to ribes
* and remove input file using sxpg_command_execute
DATA: FILE1(25) VALUE '/vmedata/???/file1nsl'.
DATA: FILE2(25) VALUE '/vmedata/???/file2'.
DATA: W_MESSAGE(50).
DATA: RLBES LIKE RLBES.
FILE1+9(3) = SY-SYSID.
FILE2+9(3) = SY-SYSID.
* sxpg_command_execute parameters
DATA: REMOVE_FILE LIKE SXPGCOLIST-PARAMETERS.
DATA: PROTOCOL LIKE BTCXPM OCCURS 0.
*
OPEN DATASET FILE2 FOR APPENDING IN TEXT MODE MESSAGE W_MESSAGE.
IF SY-SUBRC NE 0 .
MESSAGE E114 WITH FILE2 W_MESSAGE.
ENDIF.
OPEN DATASET FILE1 FOR INPUT IN TEXT MODE MESSAGE W_MESSAGE.
IF SY-SUBRC NE 0.
MESSAGE E114 WITH FILE1 W_MESSAGE.
ENDIF.
DO.
READ DATASET FILE1 INTO RLBES.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
TRANSFER RLBES TO FILE2.
IF SY-SUBRC NE 0.
MESSAGE E009 WITH FILE2 SY-SUBRC.
ENDIF.
ENDDO.
MESSAGE I114 WITH FILE1 'appended'.
***----------------------------------------------------------------****
DATA: COMMAND3(60)
* VALUE 'rm /vmedata/???/rlbesnsl' .
VALUE 'rm /vmedata/???/file1nsl' .
COMMAND3+12(3) = SY-SYSID.
*submit the unix command remove file1
REMOVE_FILE = COMMAND3+3.
* create y_remove command in sm69
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
COMMANDNAME = 'Y_REMOVE'
* OPERATINGSYSTEM = SY-OPSYS
* TARGETSYSTEM = SY-HOST
* STDOUT = 'X'
* STDERR = 'X'
* TERMINATIONWAIT = 'X'
* TRACE = ' '
ADDITIONAL_PARAMETERS = REMOVE_FILE
* IMPORTING
* STATUS =
TABLES
EXEC_PROTOCOL = PROTOCOL
EXCEPTIONS
NO_PERMISSION = 1
COMMAND_NOT_FOUND = 2
PARAMETERS_TOO_LONG = 3
SECURITY_RISK = 4
WRONG_CHECK_CALL_INTERFACE = 5
PROGRAM_START_ERROR = 6
PROGRAM_TERMINATION_ERROR = 7
X_ERROR = 8
PARAMETER_EXPECTED = 9
TOO_MANY_PARAMETERS = 10
ILLEGAL_COMMAND = 11
WRONG_ASYNCHRONOUS_PARAMETERS = 12
CANT_ENQ_TBTCO_ENTRY = 13
JOBCOUNT_GENERATION_ERROR = 14
OTHERS = 15.
IF SY-SUBRC = 0.
MESSAGE I114 WITH FILE1 'deleted'.
ENDIF.
Sample ABAP Program to Get Output in EXCEL
REPORT YLMM015A
MESSAGE-ID YL.
*-----------------------------------------------------------------------
*
* EDI FORECASTING INTERFACE - SHEILA TITCHENER JAN 1998
* L_IDOC_HEADER_CREATE, L_IDOC_SEGMENT_CREATE & L_IDOC_SEND
* left idoc ready to send but did not send automatically.
* these were replaced by ALE_MODEL_DETERMINE_IF_TO_SEND
* ALE_MODEL_INFO_GET & MASTER_IDOC_DISTRIBUTE
* 'in update task'. This solved the problem. Records are set up in table
* t_edidd.
*-----------------------------------------------------------------------
* TABLES - Database *
*-----------------------------------------------------------------------
TABLES: EORD,
MARC,
MARM,
EINA,
PLAF,
EBAN,
EDIDD.
*-----------------------------------------------------------------------
* DATA - Work Fields
*-----------------------------------------------------------------------
DATA: W_START_MONTH LIKE SY-DATUM.
DATA: W_NEXT_MONTH LIKE SY-DATUM.
DATA: W_THIRD_MONTH LIKE SY-DATUM.
DATA: W_END_DATE LIKE SY-DATUM.
DATA: W_COMP_DATE LIKE SY-DATUM.
DATA: W_BEG_DATE LIKE SY-DATUM.
DATA: W_DESP_DATE LIKE SY-DATUM.
DATA: W_DAY LIKE HRVSCHED-DAYNR.
DATA: W_DAY_TXT LIKE HRVSCHED-DAYTXT.
DATA: W_INDEX LIKE SY-TABIX.
DATA: W_TOTAL LIKE EBAN-MENGE.
DATA: W_ITEM_NUMBER TYPE I.
* IDOC DATA
DATA: W_E1EDK01_DATA LIKE E1EDK01.
DATA: W_E1EDK03_DATA LIKE E1EDK03.
DATA: W_E1EDKA1_DATA LIKE E1EDKA1.
DATA: W_E1EDP01_DATA LIKE E1EDP01.
DATA: W_E1EDP20_DATA LIKE E1EDP20.
DATA: W_E1EDP19_DATA LIKE E1EDP19.
* DATA - INTERNAL TABLES
*-----------------------------------------------------------------------
* forecast buckets - 8/9 weekly for first 2 months then 10 monthly
DATA: BEGIN OF FORECAST OCCURS 19,
DATE TYPE D, "start date of bucket
WEEK_MON, "weekly or monthly indicator
QTY LIKE EBAN-MENGE. "accumulated qty
DATA: END OF FORECAST.
*DATA: PRODUCTS LIKE EORD OCCURS 10 WITH HEADER LINE.
DATA: BEGIN OF PRODUCTS OCCURS 10,
MATNR LIKE EORD-MATNR,
WERKS LIKE EORD-WERKS,
LIFNR LIKE EORD-LIFNR.
DATA: END OF PRODUCTS.
* planned orders table PLAF
DATA: BEGIN OF T_PLAF OCCURS 10,
GSMNG LIKE PLAF-GSMNG,
PEDTR LIKE PLAF-PEDTR.
DATA: END OF T_PLAF.
* planned orders table EBAN
DATA: BEGIN OF T_EBAN OCCURS 10,
MENGE LIKE EBAN-MENGE,
LFDAT LIKE EBAN-LFDAT.
DATA: END OF T_EBAN.
* IDOC _SEND parameter
DATA: COMM_IDOC_CONTROL LIKE EDIDC OCCURS 1 WITH HEADER LINE.
*-----------------------------------------------------------------------
* new fields for new way of sending IDOC
DATA: W_EDIDC LIKE EDIDC OCCURS 5 WITH HEADER LINE,
L_EDIDC LIKE EDIDC,
L_SEND_FLAG,
W_SDATA LIKE EDIDD-SDATA.
DATA: T_BDI_MODEL LIKE BDI_MODEL OCCURS 0 WITH HEADER LINE.
DATA: T_EDIDC LIKE EDIDC OCCURS 0 WITH HEADER LINE.
DATA: T_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE.
*--------------------------------------------------------------------
* OUTPUT file layout
DATA: BEGIN OF OUTREC,
MATNR LIKE EBAN-MATNR,
D1 VALUE '$',
IDNLF LIKE EINA-IDNLF,
D2 VALUE '$',
WEEK_MON,
D3 VALUE '$',
PERIOD LIKE SY-DATUM,
D4 VALUE '$',
QTY(8),
ENDOFLINE TYPE X VALUE '0D',
END OF OUTREC.
*-----------------------------------------------------------------------
* SELECT-OPTIONS
*-----------------------------------------------------------------------
SELECT-OPTIONS P_LIFNR FOR EORD-LIFNR.
*-----------------------------------------------------------------------
* PARAMETERS *
*-----------------------------------------------------------------------
PARAMETERS: P_PART LIKE EDIDC-RCVPRN DEFAULT 'EDIFCAST',
P_FILE(30) DEFAULT '/vmedata/XXX/mdafcstddmmyy' LOWER CASE.
*-----------------------------------------------------------------------
* INITIALIZATION.
*-----------------------------------------------------------------------
INITIALIZATION.
* move hoot name to output file name
P_FILE+9(3) = SY-SYSID.
* move todays date to output file name
P_FILE+20(2) = SY-DATUM+6(2).
P_FILE+22(2) = SY-DATUM+4(2).
P_FILE+24(2) = SY-DATUM+2(2).
*-----------------------------------------------------------------------
START-OF-SELECTION.
*-----------------------------------------------------------------------
* OPEN $ delimited file
OPEN DATASET P_FILE FOR OUTPUT IN TEXT MODE.
* 4.1 create header idoc
* REPLACE function with alternative
* CALL FUNCTION 'L_IDOC_HEADER_CREATE'
* EXPORTING
* I_MESTYP = 'ORDERS'
* I_MESCOD = ' '
* I_IDOCTP = 'ORDERS01'
* I_RCVPRN = P_PART
* EXCEPTIONS
* OTHERS = 1.
*- Call function module to determine if message is to be distributed
CALL FUNCTION 'ALE_MODEL_DETERMINE_IF_TO_SEND'
EXPORTING
MESSAGE_TYPE = 'ORDERS'
IMPORTING
IDOC_MUST_BE_SENT = L_SEND_FLAG
EXCEPTIONS
OWN_SYSTEM_NOT_DEFINED = 1
OTHERS = 2.
*- Determine recipient systems
CALL FUNCTION 'ALE_MODEL_INFO_GET'
EXPORTING
MESSAGE_TYPE = 'ORDERS'
* RECEIVING_SYSTEM = ' '
* SENDING_SYSTEM = ' '
* VALIDDATE = SY-DATUM
TABLES
MODEL_DATA = T_BDI_MODEL
EXCEPTIONS
NO_MODEL_INFO_FOUND = 1
OWN_SYSTEM_NOT_DEFINED = 2
OTHERS = 3.
* 4.2 - 4.5 create idoc segments
PERFORM IDOC_CREATE.
* 4.6 Set up forecast bucket dates
* determine start of the next forecast month
W_START_MONTH = SY-DATUM.
* 12 months ago
*_LAST_12_MTH = SY-DATUM - 365.
IF W_START_MONTH+4(2) = '12'.
W_START_MONTH+4(2) = '01'.
W_START_MONTH(4) = W_START_MONTH(4) + '0001'.
ELSE.
W_START_MONTH+4(2) = W_START_MONTH+4(2) + '01'.
ENDIF.
W_START_MONTH+6 = '01'.
CALL FUNCTION 'RH_GET_DATE_DAYNAME'
EXPORTING
LANGU = 'E'
DATE = W_START_MONTH
* CHECK =
IMPORTING
DAYNR = W_DAY
DAYTXT = W_DAY_TXT
EXCEPTIONS
NO_LANGU = 1
NO_DATE = 2
NO_DAYTXT_FOR_LANGU = 3
INVALID_DATE = 4
OTHERS = 5.
CASE W_DAY.
WHEN 1.
WHEN 2.
W_START_MONTH = W_START_MONTH - 1.
WHEN 3.
W_START_MONTH = W_START_MONTH - 2.
WHEN 4.
W_START_MONTH = W_START_MONTH + 4.
WHEN 5.
W_START_MONTH = W_START_MONTH + 3.
WHEN 6.
W_START_MONTH = W_START_MONTH + 2.
WHEN 7.
W_START_MONTH = W_START_MONTH + 1.
ENDCASE.
* date of start of monthly forecasting
W_THIRD_MONTH = W_START_MONTH.
IF W_START_MONTH+4(2) < '11'. W_THIRD_MONTH+4(2) = W_THIRD_MONTH+4(2) + '02'. ELSE. W_THIRD_MONTH+4(2) = W_THIRD_MONTH+4(2) - '10'. W_THIRD_MONTH(4) = W_THIRD_MONTH(4) + '0001'. ENDIF. * day will be the first W_THIRD_MONTH+6 = '01'. * find nearest monday - removed *CALL FUNCTION 'RH_GET_DATE_DAYNAME' * EXPORTING * LANGU = 'E' * DATE = W_THIRD_MONTH ** CHECK = * IMPORTING * DAYNR = W_DAY * DAYTXT = W_DAY_TXT * EXCEPTIONS * NO_LANGU = 1 * NO_DATE = 2 * NO_DAYTXT_FOR_LANGU = 3 * INVALID_DATE = 4 * OTHERS = 5. *CASE W_DAY. * WHEN 1. * WHEN 2. * W_THIRD_MONTH = W_THIRD_MONTH - 1. * WHEN 3. * W_THIRD_MONTH = W_THIRD_MONTH - 2. * WHEN 4. * W_THIRD_MONTH = W_THIRD_MONTH + 4. * WHEN 5. * W_THIRD_MONTH = W_THIRD_MONTH + 3. * WHEN 6. * W_THIRD_MONTH = W_THIRD_MONTH + 2. * WHEN 7. * W_THIRD_MONTH = W_THIRD_MONTH + 1. *ENDCASE. * set up all dates in table DO. IF SY-INDEX = 1. FORECAST-DATE = W_START_MONTH. W_NEXT_MONTH = W_START_MONTH. ELSE. * if this takes us into the third month set to monthly IF W_NEXT_MONTH GE W_THIRD_MONTH. IF W_NEXT_MONTH+4(2) = '12'. " add 1 month W_NEXT_MONTH+4(2) = '01'. W_NEXT_MONTH(4) = W_NEXT_MONTH(4) + '0001'. ELSE. W_NEXT_MONTH+4(2) = W_NEXT_MONTH+4(2) + '01'. ENDIF. * W_NEXT_MONTH = W_NEXT_MONTH + 28. * IF W_NEXT_MONTH+4(2) = FORECAST-DATE+4(2). * W_NEXT_MONTH = W_NEXT_MONTH + 7. * ENDIF. ELSE. * add 1 week W_NEXT_MONTH = W_NEXT_MONTH + 7. ENDIF. FORECAST-DATE = W_NEXT_MONTH. ENDIF. IF FORECAST-DATE GE W_THIRD_MONTH. FORECAST-DATE+6(2) = '01'. "set start day to 1 FORECAST-WEEK_MON = '2'. ELSE. FORECAST-WEEK_MON = '1'. ENDIF. * year complete? IF FORECAST-DATE+4(2) = W_START_MONTH+4(2) AND FORECAST-DATE(4) > W_START_MONTH(4).
W_END_DATE = FORECAST-DATE.
EXIT.
ENDIF.
APPEND FORECAST.
ENDDO.
*-----------------------------------------------------------------------
* Start of selection processing
*-----------------------------------------------------------------------
* 4.7 select records from Purchasing Source list
*-----------------------------------------------------------------------
SELECT MATNR WERKS LIFNR FROM EORD INTO TABLE PRODUCTS
WHERE LIFNR IN P_LIFNR
AND FLIFN = 'X'
AND VDATU LE SY-DATUM
AND BDATU GE SY-DATUM.
* check within selection range
* CHECK P_LIFNR.
* add to table
* APPEND PRODUCTS.
*ENDSELECT.
* delete duplicates products
* table already in product code sequence
DELETE ADJACENT DUPLICATES FROM PRODUCTS COMPARING MATNR.
*-----------------------------------------------------------------------
* process selected vendors materials
*-----------------------------------------------------------------------
LOOP AT PRODUCTS.
*--------------------------------------
* 4.7 access material master
*--------------------------------------
SELECT SINGLE * FROM MARC
WHERE MATNR = PRODUCTS-MATNR
AND WERKS = PRODUCTS-WERKS .
CHECK MARC-DISMM = 'PD' OR MARC-DISMM = 'P3'
OR MARC-DISMM = 'ZD' OR MARC-DISMM = 'Z3'.
*--------------------------------------
* 4.8 access purchasing info record
*--------------------------------------
SELECT SINGLE * FROM EINA
WHERE MATNR = PRODUCTS-MATNR
AND LIFNR = PRODUCTS-LIFNR.
* record found?
CHECK SY-SUBRC = 0.
* vendor's material number begins with 45?
CHECK EINA-IDNLF(2) = '45'.
*--------------------------------------
* 4.10 clear forecast quantities
*--------------------------------------
LOOP AT FORECAST.
FORECAST-QTY = 0.
MODIFY FORECAST TRANSPORTING QTY.
ENDLOOP.
*--------------------------------------
* 4.10
*--------------------------------------
* calculate start & end dates
W_COMP_DATE = W_END_DATE + 9.
* W_BEG_DATE = W_START_MONTH + MARC-WEBAZ + 9.
* read all matching material records from planned orders table PLAF
SELECT GSMNG PEDTR FROM PLAF INTO CORRESPONDING FIELDS OF TABLE T_PLAF
WHERE MATNR = PRODUCTS-MATNR
AND PEDTR <> W_BEG_DATE.
*--------------------------------------
* 4.11 process any records found
*--------------------------------------
IF SY-SUBRC = 0.
LOOP AT T_PLAF.
W_DESP_DATE = T_PLAF-PEDTR - 9.
* IF date is < w_index =" 1."> despatch date.
LOOP AT FORECAST
WHERE DATE GE W_DESP_DATE.
W_INDEX = SY-TABIX.
EXIT.
ENDLOOP.
* read previous entry.
W_INDEX = W_INDEX - 1.
READ TABLE FORECAST INDEX W_INDEX.
ENDIF.
* convert to purchasing unit of measure
IF EINA-UMREZ NE 0.
T_PLAF-GSMNG = T_PLAF-GSMNG * EINA-UMREN / EINA-UMREZ.
ENDIF.
*
FORECAST-QTY = FORECAST-QTY + T_PLAF-GSMNG.
MODIFY FORECAST INDEX W_INDEX.
ENDLOOP.
ENDIF.
*--------------------------------------
* 4.12 read all matching material records from planned orders table EBAN
*--------------------------------------
SELECT MENGE LFDAT FROM EBAN INTO CORRESPONDING FIELDS OF TABLE T_EBAN
WHERE MATNR = PRODUCTS-MATNR
AND LFDAT <> W_BEG_DATE.
*--------------------------------------
* 4.13 process any records found
*--------------------------------------
IF SY-SUBRC = 0.
LOOP AT T_EBAN.
W_DESP_DATE = T_EBAN-LFDAT - 9.
* IF date is < w_index =" 1."> despatch date.
LOOP AT FORECAST
WHERE DATE GE W_DESP_DATE.
W_INDEX = SY-TABIX.
EXIT.
ENDLOOP.
* read previous entry.
W_INDEX = W_INDEX - 1.
READ TABLE FORECAST INDEX W_INDEX.
ENDIF.
* convert to purchasing unit of measure
IF EINA-UMREZ NE 0.
T_EBAN-MENGE = T_EBAN-MENGE * EINA-UMREN / EINA-UMREZ.
ENDIF.
* add to table
FORECAST-QTY = FORECAST-QTY + T_EBAN-MENGE.
MODIFY FORECAST INDEX W_INDEX.
ENDLOOP.
ENDIF.
*-----------------------------------------------------------------------
* 4.14 total all forecast buckets
*--------------------------------------
W_TOTAL = 0.
LOOP AT FORECAST.
W_TOTAL = W_TOTAL + FORECAST-QTY.
ENDLOOP.
CHECK W_TOTAL NE 0.
*--------------------------------------
* create idocs for material forecast
*--------------------------------------
W_ITEM_NUMBER = W_ITEM_NUMBER + 1.
IF W_ITEM_NUMBER > 80.
W_ITEM_NUMBER = 1.
PERFORM IDOC_CREATE.
ENDIF.
*--------------------------------------
* 4.14.3 create idoc E1EDP01
*--------------------------------------
W_E1EDP01_DATA-POSEX = W_ITEM_NUMBER.
WRITE W_TOTAL TO W_E1EDP01_DATA-MENGE DECIMALS 0.
* EDIDD-SDATA = W_E1EDP01_DATA.
T_EDIDD-SDATA = W_E1EDP01_DATA.
W_SDATA = W_E1EDP01_DATA. "????
T_EDIDD-SEGNAM = 'E1EDP01'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDP01'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
*--------------------------------------
* 4.14.4 create idoc E1EDP20
*--------------------------------------
LOOP AT FORECAST.
IF FORECAST-QTY NE 0.
WRITE FORECAST-QTY TO W_E1EDP20_DATA-WMENG DECIMALS 0.
W_E1EDP20_DATA-AMENG = FORECAST-WEEK_MON.
W_E1EDP20_DATA-EDATU = FORECAST-DATE.
* EDIDD-SDATA = W_E1EDP20_DATA.
T_EDIDD-SDATA = W_E1EDP20_DATA.
W_SDATA = W_E1EDP20_DATA. "????
T_EDIDD-SEGNAM = 'E1EDP20'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDP20'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
*--------------------------------------
* write record to $ delimited file
*--------------------------------------
OUTREC-MATNR = PRODUCTS-MATNR.
OUTREC-IDNLF = EINA-IDNLF.
OUTREC-WEEK_MON = FORECAST-WEEK_MON.
OUTREC-PERIOD = FORECAST-DATE.
WRITE FORECAST-QTY TO OUTREC-QTY DECIMALS 0.
TRANSFER OUTREC TO P_FILE.
ENDIF.
ENDLOOP.
* 4.14.5 End of this product
*--------------------------------------
W_E1EDP19_DATA-IDTNR = EINA-IDNLF.
* EDIDD-SDATA = W_E1EDP19_DATA.
T_EDIDD-SDATA = W_E1EDP19_DATA.
W_SDATA = W_E1EDP19_DATA. "????
T_EDIDD-SEGNAM = 'E1EDP19'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDP19'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
ENDLOOP.
*--------------------------------------
* end of all products
*-----------------------------------------------------------------------
* REPLACE WITH MASTER_IDOC_DISTRIBUTE
* CALL FUNCTION 'L_IDOC_SEND'
* TABLES
* T_COMM_IDOC = COMM_IDOC_CONTROL
* EXCEPTIONS
* ERROR_DISTRIBUTE_IDOC = 1
* OTHERS = 2.
READ TABLE T_BDI_MODEL INDEX 1. " maximum 1 recipient
MOVE 'ORDERS' TO L_EDIDC-MESTYP.
MOVE 'ORDERS01' TO L_EDIDC-IDOCTP.
MOVE 'LS' TO L_EDIDC-RCVPRT.
* MOVE T_BDI_MODEL-RCVSYSTEM TO L_EDIDC-RCVPRN.
* partner profile parameter
MOVE P_PART TO L_EDIDC-RCVPRN.
*- Distribute the iDoc
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE' IN UPDATE TASK
EXPORTING
MASTER_IDOC_CONTROL = L_EDIDC
TABLES
COMMUNICATION_IDOC_CONTROL = COMM_IDOC_CONTROL
MASTER_IDOC_DATA = T_EDIDD
EXCEPTIONS
ERROR_IN_IDOC_CONTROL = 01
ERROR_WRITING_IDOC_STATUS = 02
ERROR_IN_IDOC_DATA = 03
SENDING_LOGICAL_SYSTEM_UNKNOWN = 04.
COMMIT WORK.
*-----------------------------------------------------------------------
END-OF-SELECTION.
CLOSE DATASET P_FILE.
*-----------------------------------------------------------------------
FORM IDOC_CREATE.
*-----------------------------------------------------------------------
* 4.2 Create idoc segment E1EDK01
W_E1EDK01_DATA-BELNR = 'EDI FORECAST'.
* EDIDD-SDATA = W_E1EDK01_DATA.
T_EDIDD-SDATA = W_E1EDK01_DATA.
W_SDATA = W_E1EDK01_DATA. "????
T_EDIDD-SEGNAM = 'E1EDK01'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDK01'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
*--------------------------------------
* 4.3 Create idoc segments E1EDK03
*--------------------------------------
W_E1EDK03_DATA-IDDAT = '002'.
W_E1EDK03_DATA-DATUM = SY-DATUM.
* EDIDD-SDATA = W_E1EDK03_DATA.
T_EDIDD-SDATA = W_E1EDK03_DATA.
W_SDATA = W_E1EDK03_DATA. "????
T_EDIDD-SEGNAM = 'E1EDK03'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDK03'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
*--------------------------------------
* 4.4 Create idco E1EDKA1
*--------------------------------------
W_E1EDKA1_DATA-PARVW = 'LI'.
W_E1EDKA1_DATA-PARTN = P_PART.
* EDIDD-SDATA = W_E1EDKA1_DATA.
T_EDIDD-SDATA = W_E1EDKA1_DATA.
W_SDATA = W_E1EDKA1_DATA. "????
T_EDIDD-SEGNAM = 'E1EDKA1'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDKA1'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
ENDFORM.
Blog Archive
-
▼
2009
(81)
-
▼
June
(81)
- Lists in Unicode Systems
- The File Interface in Unicode Programs
- Character String and Byte String Processing in Uni...
- Structure Enhancements and Unicode Programs
- Structure Typing in Unicode Programs
- Conversion of Structures in Unicode Programs
- Access to memory sequences in Unicode programs
- Offset and Length Specifications in Unicode Programs
- Alignment in Unicode Systems
- Operand Types in Unicode Programs
- Names in Unicode Programs
- Comments and Literals in Non-Unicode Programs
- Differences between Unicode and Non-Unicode Programs
- Unicode - Overview
- Statements in Class and Interface Pools
- Statements for Defining Classes and Interfaces
- ABAP Objects - Keywords
- Inheritance Events
- Inheritance and Events
- Inheritance and Instantiation
- Inheritance and Constructors
- Inheritance and Static Components
- Inheritance and the Component Namespace
- Inheritance and Visibility
- Inheritance and Interfaces
- Inheritance and Polymorphism
- Abstract and Final Methods and Classes
- Redefining Methods
- Inheritance
- Definition of Classes and Interfaces
- Object Orientation
- CLASS-METHODS - FOR EVENT
- CLASS-METHODS - class_constructor
- CLASS-METHODS - RETURNING
- METHODS - IMPORTING, EXPORTING, CHANGING, RAISING
- CLASS-METHODS - IMPORTING, EXPORTING, CHANGING, RA...
- CLASS-METHODS
- Kernel Methods
- The C Destructor in Methods
- Interface Parameters in Methods
- Data Types and Constants
- Events In Components of classes
- Constructors In Components of Classes
- Methods in Components of classes
- Attributes
- Visibility Sections in Classes
- Components of Classes
- Classes
- ABAP Objects
- ABAP Programming Language - Overview
- Example of a Logical Database
- Logical Databases
- Position of the Basis System Within the R/3 System
- Running ABAP Programs
- Calling ABAP Dialog Modules
- Data Types in the ABAP Dictionary
- Pushbuttons on the Screen
- Processing Input/Output Fields
- Processing Screen
- Screens
- ABAP User Dialogs
- Reduce the Database Load
- Minimize the Search Overhead
- Minimize the Number of Data Transfers
- Minimize the Amount of Data Transferred
- Keep the Result Set Small
- Performance Notes
- Committing Database Changes
- Inserting or Changing Lines
- Deleting Lines
- Changing Line
- Inserting Lines into Tables
- Changing Data
- Reading Data
- Open SQL
- Checking User Authorizations
- Accessing the Database in the R/3 System
- ABAP Database Access
- ABAP HR Programming
- ABAP Tutorials for Beginners
- Download Abap certification material
-
▼
June
(81)
