ABAPREADYCODES
* Table declaration (old method)
DATA: BEGIN OF tab_ekpo OCCURS 0, "itab with header line
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
END OF tab_ekpo.
********************************************************************************************
*Table declaration (new method) "USE THIS WAY!!!
TYPES: BEGIN OF t_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
END OF t_ekpo.
DATA: it_ekpo TYPE STANDARD TABLE OF t_ekpo INITIAL SIZE 0, "itab
wa_ekpo TYPE t_ekpo. "work area (header line)
*******************************************************************************************
* Build internal table and work area from existing internal table
DATA: it_datatab LIKE tab_ekpo OCCURS 0, "old method
wa_datatab LIKE LINE OF tab_ekpo.
*******************************************************************************************
* Build internal table and work area from existing internal table,
* adding additional fields
TYPES: BEGIN OF t_repdata.
INCLUDE STRUCTURE tab_ekpo. "could include EKKO table itself!!
TYPES: bukrs TYPE ekpo-werks,
bstyp TYPE ekpo-bukrs.
TYPES: END OF t_repdata.
DATA: it_repdata TYPE STANDARD TABLE OF t_repdata INITIAL SIZE 0, "itab
wa_repdata TYPE t_repdata. "work area (header line)
********************************************************************************************
SAMPLE SELECT:
*Code to demonstrate select command
*Code to demonstrate select into internal table command
TYPES: BEGIN OF t_bkpf,
* include structure bkpf.
bukrs LIKE bkpf-bukrs,
belnr LIKE bkpf-belnr,
gjahr LIKE bkpf-gjahr,
bldat LIKE bkpf-bldat,
monat LIKE bkpf-monat,
budat LIKE bkpf-budat,
xblnr LIKE bkpf-xblnr,
awtyp LIKE bkpf-awtyp,
awkey LIKE bkpf-awkey,
END OF t_bkpf.
DATA: it_bkpf TYPE STANDARD TABLE OF t_bkpf INITIAL SIZE 0,
wa_bkpf TYPE t_bkpf.
TYPES: BEGIN OF t_bseg,
*include structure bseg.
bukrs LIKE bseg-bukrs,
belnr LIKE bseg-belnr,
gjahr LIKE bseg-gjahr,
buzei LIKE bseg-buzei,
mwskz LIKE bseg-mwskz, "Tax code
umsks LIKE bseg-umsks, "Special G/L transaction type
prctr LIKE bseg-prctr, "Profit Centre
hkont LIKE bseg-hkont, "G/L account
xauto LIKE bseg-xauto,
koart LIKE bseg-koart,
dmbtr LIKE bseg-dmbtr,
mwart LIKE bseg-mwart,
hwbas LIKE bseg-hwbas,
aufnr LIKE bseg-aufnr,
projk LIKE bseg-projk,
shkzg LIKE bseg-shkzg,
kokrs LIKE bseg-kokrs,
END OF t_bseg.
DATA: it_bseg TYPE STANDARD TABLE OF t_bseg INITIAL SIZE 0,
wa_bseg TYPE t_bseg.
*Select directly into an internal table
SELECT bukrs belnr gjahr buzei mwskz umsks prctr hkont xauto koart
dmbtr mwart hwbas aufnr projk shkzg kokrs
FROM bseg
INTO TABLE it_bseg.
* Select directly into an internal table where fields are in a
* different order or not all fields are specified
SELECT bukrs belnr gjahr buzei mwskz umsks prctr hkont xauto koart
dmbtr mwart hwbas aufnr projk shkzg kokrs
FROM bseg
INTO CORRESPONDING FIELDS OF TABLE it_bseg.
*Select... endselect command
SELECT bukrs belnr gjahr buzei mwskz umsks prctr hkont xauto koart
dmbtr mwart hwbas aufnr projk shkzg kokrs
FROM bseg
INTO wa_bseg.
APPEND wa_bseg TO it_bseg.
ENDSELECT.
*Select FOR ALL ENTRIES command
SELECT bukrs belnr gjahr bldat monat budat xblnr awtyp awkey
UP TO 100 ROWS
FROM bkpf
INTO TABLE it_bkpf.
IF sy-subrc EQ 0.
* The FOR ALL ENTRIES comand only retrieves data which matches
* entries within a particular internal table.
SELECT bukrs belnr gjahr buzei mwskz umsks prctr hkont xauto koart
dmbtr mwart hwbas aufnr projk shkzg kokrs
FROM bseg
INTO TABLE it_bseg
FOR ALL ENTRIES IN it_bkpf
WHERE bukrs EQ it_bkpf-bukrs AND
belnr EQ it_bkpf-belnr AND
gjahr EQ it_bkpf-gjahr.
ENDIF.
*&---------------------------------------------------------------------*
*& Report ZTEE_PD_EVER_MAIN1
*&
*&---------------------------------------------------------------------*
*&
*& Display functionality
*& Parameters from Screen
*& Single Query
*& Declare internal table
*& Populate internal table with select
*& Loop over table - print on screen
*& Format Line for File Output
*& Declare filename, open it
*& Print to file
*&
*&---------------------------------------------------------------------*
REPORT ZTEE_PD_EVER_MAIN1.
******************************************************************************
*
* Declaration of DB tables to be used
TABLES: ever.
*
******************************************************************************
******************************************************************************
* Declaration of Internal Table with specific fields
DATA: BEGIN OF gt_ever OCCURS 0,
vkonto LIKE ever-vkonto,
kofiz LIKE ever-kofiz,
bstatus LIKE ever-bstatus,
vrefer LIKE ever-vrefer,
END OF gt_ever.
* Declaration of Internal Table with structure like database table
DATA: gs_ever LIKE ever OCCURS 0 WITH HEADER LINE.
******************************************************************************
*******************************************************************************
* Selection Screen Format:
*
* This block of code is responsible with declaring the form fields to be used
* by the user and any othe parameters he wishes to have.
*
* Selection Screen : GoTo -> Text Elements -> Selection Texts
*
* Parameters:
* Syntax:
* PARAMETERS: <nameofparameter> LIKE basetable-field DEFAULT space. (optional)
* Parameters sets a singular field in the form, that takes values
* Values are preset from those that exist in the table
PARAMETERS: p_bstat LIKE ever-bstatus DEFAULT space. " '' or ' '
*
* Select-Options:
* Select-Options syntax:
* Select options creates two fields in the form, for start/end value
* also allows exclusion of values and queries for specific lists of values.
SELECT-OPTIONS: s_vrefer FOR ever-vrefer,
s_kofiz FOR ever-kofiz,
s_vkonto FOR ever-vkonto.
*
*
*
*
******************************************************************************
.
********************************************************************************
* START-OF-SELECTION
*
* Main part of code - Work Area
START-OF-SELECTION.
" We call on the FORM Get_Data
" FORM is like a function
PERFORM get_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&
*& Input: None - The parameter/selection fields are not required
*& to have a value.
*& Output: Writes to screen and File.
*& Usage: PERFORM get_data
*&
*& Job: Performs the query
*& Fills internal table with query results
*& Creates output filename and opens it
*& Sorts internal table containing query results
*& Loops over lines of internal table, writes on screen
*&
*&
*&
*&---------------------------------------------------------------------*
FORM get_data.
***************************************
* Basic Select with multiple fields
* Filling internal table gt_ever with contents of ever
* Notes : p_bstat, s_kofix, s_vrefer are the variables
* corresponding to the screen selection parameters.
SELECT *
"e~vkonto
"e~kofiz
"e~bstatus
"e~vrefer
FROM ever AS e
INTO CORRESPONDING FIELDS OF TABLE gt_ever
WHERE e~bstatus = p_bstat
AND e~kofiz IN s_kofiz
AND e~vrefer IN s_vrefer.
* SECOND SELECT TO FILL THE SECOND TABLE
SELECT a~vkonto
a~kofiz
"a~bstatus
a~vrefer
FROM ever AS a
INTO CORRESPONDING FIELDS OF TABLE gs_ever
WHERE a~bstatus = p_bstat
AND a~kofiz IN s_kofiz
AND a~vrefer IN s_vrefer.
************************************** .
* Declare filepath
DATA: ext_filename(128) TYPE c VALUE
'//tmp/'.
* Concatenate full file path to directory
CONCATENATE ext_filename 'PD701011_EVER_' sy-datum '.v00.3.txt'
INTO ext_filename.
**************************************
* OPEN FILE FOR WRITING
open dataset ext_filename for output in legacy text mode
code page '1700'.
**************************************
* SORT INTERNAL TABLE
SORT gt_ever BY vkonto.
**************************************
* LOOP AT FIRST INTERNAL TABLE AND WRITE TO SCREEN
* Declare the field separator for file printing
CONSTANTS: c_comma(5) value ' '.
* Declare the variale that will hold the line value to be printed
DATA: V_CON(100) TYPE C.
* Loop over internal table
LOOP AT gt_ever.
"MOVE-CORRESPONDING gt_ever TO gt_ever2.
"APPEND LINES OF gt_ever TO gt_ever2.
* Write to Screen
WRITE: / "'1',
gt_ever-vkonto,
gt_ever-kofiz,
gt_ever-bstatus,
gt_ever-vrefer.
* Construct new formatted line for output into file
CONCATENATE gt_ever-vkonto
gt_ever-kofiz
gt_ever-bstatus
gt_ever-vrefer
INTO V_CON separated by c_comma.
" AT END: will trigger at the end of each iteration
"AT END OF vkonto.
"WRITE: / text-t01, gt_ever-vkonto, '101'.
"TRANSFER gt_ever-vkonto TO ext_filename.
TRANSFER V_CON TO ext_filename.
"TRANSFER gt_ever TO ext_filename.
* TRANSFER gs_ever TO ext_filename.
"ENDAT.
ENDLOOP.
************************************************************
* LOOPING AND PRINTING TABLE DECLARED WITH THE SECOND METHOD.
* Print second internal table
WRITE: / 'NEW TABLE LOOP STARTS HERE'.
LOOP AT gs_ever.
WRITE: /"'1',
gs_ever-vkonto,
gs_ever-kofiz.
ENDLOOP.
CLOSE DATASET ext_filename.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Report ZTEE_PD_EVER_MAIN_CHECKBOX
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEE_PD_EVER_MAIN_CHECKBOX.
******************************************************************************
*
* Declaration of DB tables to be used
TABLES: ever.
*
******************************************************************************
DATA: gv_filename TYPE string,
gv_path TYPE string,
gv_result TYPE i.
******************************************************************************
* Declaration of Internal Table with specific fields
DATA: BEGIN OF gt_ever OCCURS 0,
vkonto LIKE ever-vkonto,
kofiz LIKE ever-kofiz,
bstatus LIKE ever-bstatus,
vrefer LIKE ever-vrefer,
END OF gt_ever.
* Declaration of Internal Table with structure like database table
DATA: gs_ever LIKE ever OCCURS 0 WITH HEADER LINE.
******************************************************************************
*******************************************************************************
* Selection Screen Format:
*
* This block of code is responsible with declaring the form fields to be used
* by the user and any othe parameters he wishes to have.
*
* Selection Screen : GoTo -> Text Elements -> Selection Texts
*
* Parameters:
* Syntax:
* PARAMETERS: <nameofparameter> LIKE basetable-field DEFAULT space. (optional)
* Parameters sets a singular field in the form, that takes values
* Values are preset from those that exist in the table
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-004.
PARAMETERS: p_bstat LIKE ever-bstatus DEFAULT space. " '' or ' '
SELECTION-SCREEN END OF BLOCK b2.
*
* Select-Options:
* Select-Options syntax:
* Select options creates two fields in the form, for start/end value
* also allows exclusion of values and queries for specific lists of values.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-004.
SELECT-OPTIONS: s_vrefer FOR ever-vrefer,
s_kofiz FOR ever-kofiz,
s_vkonto FOR ever-vkonto.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS: p_path TYPE string LOWER CASE. "File path
SELECTION-SCREEN END OF BLOCK b4.
PARAMETERS : P_CHK AS CHECKBOX .
START-OF-SELECTION.
IF P_CHK = 'X'.
WRITE:/ 'Check box is selected'.
ELSE.
WRITE: / 'Check Box is not selected'.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
*
*
******************************************************************************
* Display save dialog window
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title = ' '
default_extension = 'txt'
default_file_name = 'file_name'
initial_directory = 'C:\'
CHANGING
filename = gv_filename
path = gv_path
fullpath = p_path
user_action = gv_result.
.
********************************************************************************
* START-OF-SELECTION
*
* Main part of code - Work Area
START-OF-SELECTION.
" We call on the FORM Get_Data
" FORM is like a function
WRITE: / p_path.
PERFORM get_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&
*& Input: None - The parameter/selection fields are not required
*& to have a value.
*& Output: Writes to screen and File.
*& Usage: PERFORM get_data
*&
*& Job: Performs the query
*& Fills internal table with query results
*& Creates output filename and opens it
*& Sorts internal table containing query results
*& Loops over lines of internal table, writes on screen
*&
*&
*&
*&---------------------------------------------------------------------*
FORM get_data.
***************************************
* Basic Select with multiple fields
* Filling internal table gt_ever with contents of ever
* Notes : p_bstat, s_kofix, s_vrefer are the variables
* corresponding to the screen selection parameters.
SELECT *
* e~vkonto
* e~kofiz
* e~bstatus
* e~vrefer
FROM ever AS e
INTO CORRESPONDING FIELDS OF TABLE gt_ever
WHERE e~bstatus = p_bstat
AND e~kofiz IN s_kofiz
AND e~vrefer IN s_vrefer.
SELECT a~vkonto
a~kofiz
* e~bstatus
* e~vrefer
FROM ever AS a
INTO CORRESPONDING FIELDS OF TABLE gs_ever
WHERE a~bstatus = p_bstat
AND a~kofiz IN s_kofiz
AND a~vrefer IN s_vrefer.
************************************** .
* Declare filepath
DATA: ext_filename(128) TYPE c VALUE
'//tmp/'.
* Concatenate full file path to directory
CONCATENATE ext_filename 'PD701011_EVER_' sy-datum '.v00.3.txt'
INTO ext_filename.
**************************************
* OPEN FILE FOR WRITING
open dataset ext_filename for output in legacy text mode
code page '1700'.
**************************************
* SORT INTERNAL TABLE
SORT gt_ever BY vkonto.
**************************************
* LOOP AT FIRST INTERNAL TABLE AND WRITE TO SCREEN
* Declare the field separator for file printing
CONSTANTS: c_comma(5) value ' '.
* Declare the variale that will hold the line value to be printed
DATA: V_CON(100) TYPE C.
* IF THE CHECKBOX IS CHECKED:
IF P_CHK = 'X'.
* Loop over internal table
LOOP AT gt_ever.
"MOVE-CORRESPONDING gt_ever TO gt_ever2.
"APPEND LINES OF gt_ever TO gt_ever2.
* Write to Screen
WRITE: / "'1',
gt_ever-vkonto,
gt_ever-kofiz,
gt_ever-bstatus,
gt_ever-vrefer.
* Construct new formatted line for output into file
CONCATENATE gt_ever-vkonto
gt_ever-kofiz
gt_ever-bstatus
gt_ever-vrefer
INTO V_CON separated by c_comma.
" AT END: will trigger at the end of each iteration
"AT END OF vkonto.
"WRITE: / text-t01, gt_ever-vkonto, '101'.
"TRANSFER gt_ever-vkonto TO ext_filename.
TRANSFER V_CON TO ext_filename.
"TRANSFER gt_ever TO ext_filename.
* TRANSFER gs_ever TO ext_filename.
"ENDAT.
ENDLOOP.
************************************************************
* LOOPING AND PRINTING TABLE DECLARED WITH THE SECOND METHOD.
* Print second internal table
* IF THE CHECKBOX IS NOT CHECKED
ELSE.
WRITE: / 'NEW TABLE LOOP STARTS HERE'.
LOOP AT gs_ever.
WRITE: /"'1',
gs_ever-vkonto,
gs_ever-kofiz.
ENDLOOP.
ENDIF.
CLOSE DATASET ext_filename.
ENDFORM.
*&---------------------------------------------------------------------*
*& Report ZTEE_PD_EVER_COPYITAB
*&
*&---------------------------------------------------------------------*
*&
*& WAYS TO COPY INTERNAL TABLES:
*&
*&
*&
*& 1. Using LOOP to copy itab to another itab
*&
*& TYPES:
*& BEGIN OF ty_vbak,
*& vbeln TYPE vbak-vbeln,
*& auart TYPE vbak-auart,
*& vkorg TYPE vbak-vkorg,
*& END OF ty_vbak.
*&
*& DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.
*& DATA: ls_vbak LIKE LINE OF t_vbak.
*& DATA: t_vbeln TYPE STANDARD TABLE OF vbak-vbeln.
*& DATA: lv_lines TYPE i.
*&
*& * Some test data
*& SELECT vbeln auart vkorg
*& FROM vbak
*& INTO TABLE t_vbak
*& UP TO 500 ROWS.
*&
*& CLEAR t_vbeln.
*& LOOP AT t_vbak INTO ls_vbak.
*& APPEND ls_vbak-vbeln TO t_vbeln.
*& ENDLOOP.
*&
*& * Display number of entries in target table
*& lv_lines = LINES( t_vbeln ).
*& WRITE lv_lines.
*&
*&------------------------------------------------------------------------*
*&
*& 2. Using MOVE to copy
*&
*& CLEAR t_vbeln.
*& MOVE t_vbak TO t_vbeln.
*&
*& * Display number of entries in target table
*& lv_lines = LINES( t_vbeln ).
*& WRITE lv_lines.
*&
*&-------------------------------------------------------------------------*
*&
*& 3. Using APPEND LINES OF to copy
*&
*& CLEAR t_vbeln.
*& APPEND LINES OF t_vbak TO t_vbeln.
*&
*& * Display number of entries in target table
*& lv_lines = LINES( t_vbeln ).
*& WRITE lv_lines.
*&
*&--------------------------------------------------------------------------*
*&
*& 4. Using direct copy
*&
*& CLEAR t_vbeln.
*& t_vbeln = t_vbak.
*&
*& * Display number of entries in target table
*& lv_lines = LINES( t_vbeln ).
*& WRITE lv_lines.
*&
*&--------------------------------------------------------------------------*
*& FUNCTION FORM.
*&
*& FUNCTION z_move_corresponding_table.
*&*"----------------------------------------------------------------------
*&*"*"Local Interface:
*&*" IMPORTING
*&*" REFERENCE(IT_TABLE) TYPE TABLE
*&*" EXPORTING
*&*" REFERENCE(ET_TABLE) TYPE TABLE
*&*"----------------------------------------------------------------------
*&
*& DATA: er_line TYPE REF TO DATA.
*&
*& FIELD-SYMBOLS: TYPE ANY,
*& TYPE ANY.
*&
*& CLEAR et_table.
*&
*& CREATE DATA er_line LIKE LINE OF et_table.
*& ASSIGN er_line->* TO .
*&
*& LOOP AT it_table ASSIGNING .
*& MOVE-CORRESPONDING TO .
*& APPEND TO et_table.
*& ENDLOOP.
*&
*& ENDFUNCTION.
*&
*&---------------------------------------------------------------------*
REPORT ZTEE_PD_EVER_COPYITAB.
* Declare database table
TABLES: vbak.
* Declare line structure
TYPES:
BEGIN OF ty_vbak,
vbeln TYPE vbak-vbeln,
auart TYPE vbak-auart,
vkorg TYPE vbak-vkorg,
END OF ty_vbak.
* Declare itab using the line structure we declared (with Header Line)
* Declare variable like line-type of t_vbak.
"DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak WITH HEADER LINE.
DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak WITH HEADER LINE.
DATA: ls_vbak LIKE LINE OF t_vbak.
* Declare itab with one field, of the type vbak-vbeln. (without Header Line)
* Declare variable structure line the line-type of t_vbeln.
DATA: t_vbeln TYPE STANDARD TABLE OF vbak-vbeln.
DATA: ls_t_vbeln LIKE LINE OF t_vbeln.
* Declare itab with one field, of the type vbak-vbeln. (without Header Line)
* Declare variable structure line the line-type of t_vbeln2.
DATA: t_vbeln2 TYPE STANDARD TABLE OF vbak-vbeln.
DATA: ls_t_vbeln2 LIKE LINE OF t_vbeln2.
* Declare itab with one field, of the type vbak-vbeln. (with Header Line)
* Declare variable structure line the line-type of t_vbeln3.
DATA: t_vbeln3 TYPE STANDARD TABLE OF ty_vbak WITH HEADER LINE.
DATA: ls_t_vbeln3 LIKE LINE OF t_vbeln2.
* Declare itab with one field, of the type vbak-vbeln. (with Header Line)
* Declare variable structure line the line-type of t_vbeln3.
DATA: t_vbeln4 TYPE STANDARD TABLE OF ty_vbak WITH HEADER LINE.
DATA: ls_t_vbeln4 LIKE LINE OF t_vbeln2.
* Declare itab with one field, of the type vbak-vbeln. (with Header Line)
* Declare variable structure line the line-type of t_vbeln5.
DATA: t_vbeln5 TYPE STANDARD TABLE OF vbak-vbeln.
DATA: ls_t_vbeln5 LIKE LINE OF t_vbeln2.
* Declare integer variable
DATA: lv_lines TYPE i.
* Declare itab using the LIKE statement
* Declare line structure of itab
DATA: gs_vbak LIKE t_vbak OCCURS 0 WITH HEADER LINE.
DATA: ls_gs_vbak LIKE LINE of gs_vbak.
* Declare itab using BEGIN statement, with declared structure
* Declare line structure of gt_vbak.
DATA: BEGIN OF gt_vbak OCCURS 0,
vbeln LIKE vbak-vbeln,
auart LIKE vbak-auart,
vkorg LIKE vbak-vkorg,
END OF gt_vbak.
DATA: ls_gt_vbak LIKE LINE of gt_vbak.
************************************************************************
* Selection Screen.
SELECT-OPTIONS:
s_vbeln FOR vbak-vbeln,
s_auart FOR vbak-auart,
s_vkorg FOR vbak-vkorg.
************************************************************************
START-OF-SELECTION.
PERFORM get_data.
FORM get_data.
SELECT vbeln auart vkorg
FROM vbak as e
INTO CORRESPONDING FIELDS OF TABLE t_vbak
UP TO 500 ROWS
WHERE e~vbeln IN s_vbeln.
"UP TO 500 ROWS.
CLEAR t_vbeln.
CLEAR t_vbeln2.
CLEAR t_vbeln3.
CLEAR t_vbeln4.
CLEAR gs_vbak.
CLEAR gt_vbak.
" FIRST WAY TO COPY : USE LOOP + APPEND
LOOP AT t_vbak INTO ls_vbak.
APPEND ls_vbak-vbeln TO t_vbeln.
APPEND ls_vbak-vbeln TO gs_vbak.
APPEND ls_vbak TO gt_vbak.
ENDLOOP.
" SECOND WAY : USE MOVE
" BOTH TABLES NEED TO EITHER HAVE HEADER LIEN, OR NOT
MOVE t_vbeln TO t_vbeln2.
" THIRD WAY: USE APPEND LINES OF
" BOTH TABLES NEED TO EITHER HAVE HEADER LINE, OR NTO
" BETTER FOR CASES OF ITABS WITH HEADER LINE
APPEND LINES OF t_vbak TO t_vbeln3.
" FOURTH WAY: STANDARD COPY
t_vbeln4[] = t_vbak[].
t_vbeln5 = t_vbeln.
* Measure table lines
lv_lines = LINES( t_vbeln ).
WRITE lv_lines.
lv_lines = LINES( t_vbeln2 ).
WRITE lv_lines.
lv_lines = LINES( t_vbeln3 ).
WRITE lv_lines.
lv_lines = LINES( t_vbeln4 ).
WRITE lv_lines.
lv_lines = LINES( t_vbeln5 ).
WRITE lv_lines.
lv_lines = LINES( gs_vbak ).
WRITE lv_lines.
lv_lines = LINES( gt_vbak ).
WRITE lv_lines.
* Works because we have declared header line
LOOP AT t_vbak.
WRITE: / "'1',
t_vbak-vbeln,
t_vbak-auart.
ENDLOOP.
* Will not work, we have not declared header line
*LOOP AT t_vbeln.
* WRITE: / "'1',
* t_vbeln,
* "t_vbak-auart.
*ENDLOOP.
* Works
* LOOP AT gs_vbak.
* WRITE: / "'1',
* gs_vbak-vbeln.
*ENDLOOP.
* Works
*LOOP AT gt_vbak.
* WRITE: / "'1',
* gt_vbak-vbeln,
* gt_vbak-auart.
*ENDLOOP.
ENDFORM.
*& Report ZTEE_PD_EVER_MAIN3
*&
*&---------------------------------------------------------------------*
*&
*& Display functionality
*& Parameters from Screen
*& Single Query
*& Declare internal table
*& Populate internal table with select
*& Loop over table - print on screen
*& Format Line for File Output
*& Declare filename, open it
*& Print to file
*& Copy Internal Table to another with Various Methods
*& Count size of internal table using LINES
*&---------------------------------------------------------------------*
REPORT ZTEE_PD_EVER_MAIN3.
******************************************************************************
*
* Declaration of DB tables to be used
TABLES: ever.
*
******************************************************************************
******************************************************************************
*
* Declaration of 3 variables to hold all parts of filename
DATA: gv_filename TYPE string,
gv_path TYPE string,
gv_result TYPE i.
******************************************************************************
* Declaration of Internal Table with specific fields
DATA: BEGIN OF gt_ever OCCURS 0,
vkonto LIKE ever-vkonto,
kofiz LIKE ever-kofiz,
bstatus LIKE ever-bstatus,
vrefer LIKE ever-vrefer,
END OF gt_ever.
* Declaration of Internal Table with structure like database table
DATA: gs_ever LIKE ever OCCURS 0 WITH HEADER LINE.
DATA: ga_ever LIKE ever OCCURS 0 WITH HEADER LINE.
DATA: gb_ever LIKE ever OCCURS 0 WITH HEADER LINE.
DATA: gc_ever LIKE ever OCCURS 0 WITH HEADER LINE.
******************************************************************************
*******************************************************************************
* Selection Screen Format:
*
* This block of code is responsible with declaring the form fields to be used
* by the user and any othe parameters he wishes to have.
*
* Selection Screen : GoTo -> Text Elements -> Selection Texts
*
* Parameters:
* Syntax:
* PARAMETERS: <nameofparameter> LIKE basetable-field DEFAULT space. (optional)
* Parameters sets a singular field in the form, that takes values
* Values are preset from those that exist in the table
PARAMETERS: p_bstat LIKE ever-bstatus DEFAULT space. " '' or ' '
*
* Select-Options:
* Select-Options syntax:
* Select options creates two fields in the form, for start/end value
* also allows exclusion of values and queries for specific lists of values.
SELECT-OPTIONS: s_vrefer FOR ever-vrefer,
s_kofiz FOR ever-kofiz,
s_vkonto FOR ever-vkonto.
*
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS: p_path TYPE string LOWER CASE. "File path
SELECTION-SCREEN END OF BLOCK b4.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
*
*
******************************************************************************
* Display save dialog window
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title = ' '
default_extension = 'txt'
default_file_name = 'file_name'
initial_directory = 'C:\'
CHANGING
filename = gv_filename
path = gv_path
fullpath = p_path
user_action = gv_result.
.
********************************************************************************
* START-OF-SELECTION
*
* Main part of code - Work Area
START-OF-SELECTION.
" We call on the FORM Get_Data
" FORM is like a function
WRITE: / p_path.
PERFORM get_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&
*& Input: None - The parameter/selection fields are not required
*& to have a value.
*& Output: Writes to screen and File.
*& Usage: PERFORM get_data
*&
*& Job: Performs the query
*& Fills internal table with query results
*& Creates output filename and opens it
*& Sorts internal table containing query results
*& Loops over lines of internal table, writes on screen
*&
*&
*&
*&---------------------------------------------------------------------*
FORM get_data.
***************************************
* Basic Select with multiple fields
* Filling internal table gt_ever with contents of ever
* Notes : p_bstat, s_kofix, s_vrefer are the variables
* corresponding to the screen selection parameters.
SELECT *
* e~vkonto
* e~kofiz
* e~bstatus
* e~vrefer
FROM ever AS e
INTO CORRESPONDING FIELDS OF TABLE gt_ever
WHERE e~bstatus = p_bstat
AND e~kofiz IN s_kofiz
AND e~vrefer IN s_vrefer.
SELECT a~vkonto
a~kofiz
* e~bstatus
* e~vrefer
FROM ever AS a
INTO CORRESPONDING FIELDS OF TABLE gs_ever
WHERE a~bstatus = p_bstat
AND a~kofiz IN s_kofiz
AND a~vrefer IN s_vrefer.
************************************** .
* Declare filepath
DATA: ext_filename(128) TYPE c VALUE
'//tmp/'.
* Concatenate full file path to directory
CONCATENATE ext_filename 'PD701011_EVER_' sy-datum '.v00.3.txt'
INTO ext_filename.
**************************************
* OPEN FILE FOR WRITING
open dataset ext_filename for output in legacy text mode
code page '1700'.
**************************************
* SORT INTERNAL TABLE
SORT gt_ever BY vkonto.
**************************************
* LOOP AT FIRST INTERNAL TABLE AND WRITE TO SCREEN
* Declare the field separator for file printing
CONSTANTS: c_comma(5) value ' '.
* Declare the variale that will hold the line value to be printed
DATA: V_CON(100) TYPE C.
* Loop over internal table
LOOP AT gt_ever.
"MOVE-CORRESPONDING gt_ever TO gt_ever2.
"APPEND LINES OF gt_ever TO gt_ever2.
* Write to Screen
WRITE: / "'1',
gt_ever-vkonto,
gt_ever-kofiz,
gt_ever-bstatus,
gt_ever-vrefer.
* Construct new formatted line for output into file
CONCATENATE gt_ever-vkonto
gt_ever-kofiz
gt_ever-bstatus
gt_ever-vrefer
INTO V_CON separated by c_comma.
" AT END: will trigger at the end of each iteration
"AT END OF vkonto.
"WRITE: / text-t01, gt_ever-vkonto, '101'.
"TRANSFER gt_ever-vkonto TO ext_filename.
TRANSFER V_CON TO ext_filename.
"TRANSFER gt_ever TO ext_filename.
* TRANSFER gs_ever TO ext_filename.
"ENDAT.
ENDLOOP.
************************************************************
* LOOPING AND PRINTING TABLE DECLARED WITH THE SECOND METHOD.
* Print second internal table
WRITE: / 'NEW TABLE LOOP STARTS HERE'.
LOOP AT gs_ever.
WRITE: /"'1',
gs_ever-vkonto,
gs_ever-kofiz.
ENDLOOP.
*************************************************************
* Various ways to copy internal table into another one
"Copy second table to third internal table - Using append lines
"Count number of lines.
DATA: lv_lines TYPE i.
CLEAR ga_ever.
CLEAR gb_ever.
CLEAR gc_ever.
gb_ever[] = gs_ever[]. "- DIRECT COPY WORKS
APPEND LINES OF gs_ever TO ga_ever. "- WORKS
MOVE gs_ever TO gc_ever. "- DOESNT WORK
lv_lines = LINES( ga_ever ).
WRITE: / lv_lines.
lv_lines = LINES( gt_ever ).
WRITE: / lv_lines.
lv_lines = LINES( gs_ever ).
WRITE: / lv_lines.
lv_lines = LINES( gb_ever ).
WRITE: / lv_lines.
lv_lines = LINES( gc_ever ).
WRITE: / lv_lines.
CLOSE DATASET ext_filename.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Report ZTEE_PD_EVER_MAIN_CHECKBOX
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEE_PD_EVER_MAIN_CHECKBOX.
******************************************************************************
*
* Declaration of DB tables to be used
TABLES: ever.
*
******************************************************************************
DATA: gv_filename TYPE string,
gv_path TYPE string,
gv_result TYPE i.
******************************************************************************
* Declaration of Internal Table with specific fields
DATA: BEGIN OF gt_ever OCCURS 0,
vkonto LIKE ever-vkonto,
kofiz LIKE ever-kofiz,
bstatus LIKE ever-bstatus,
vrefer LIKE ever-vrefer,
END OF gt_ever.
* Declaration of Internal Table with structure like database table
DATA: gs_ever LIKE ever OCCURS 0 WITH HEADER LINE.
******************************************************************************
*******************************************************************************
* Selection Screen Format:
*
* This block of code is responsible with declaring the form fields to be used
* by the user and any othe parameters he wishes to have.
*
* Selection Screen : GoTo -> Text Elements -> Selection Texts
*
* Parameters:
* Syntax:
* PARAMETERS: <nameofparameter> LIKE basetable-field DEFAULT space. (optional)
* Parameters sets a singular field in the form, that takes values
* Values are preset from those that exist in the table
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-004.
PARAMETERS: p_bstat LIKE ever-bstatus DEFAULT space. " '' or ' '
SELECTION-SCREEN END OF BLOCK b2.
*
* Select-Options:
* Select-Options syntax:
* Select options creates two fields in the form, for start/end value
* also allows exclusion of values and queries for specific lists of values.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-004.
SELECT-OPTIONS: s_vrefer FOR ever-vrefer,
s_kofiz FOR ever-kofiz,
s_vkonto FOR ever-vkonto.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS: p_path TYPE string LOWER CASE. "File path
SELECTION-SCREEN END OF BLOCK b4.
PARAMETERS : P_CHK AS CHECKBOX .
START-OF-SELECTION.
IF P_CHK = 'X'.
WRITE:/ 'Check box is selected'.
ELSE.
WRITE: / 'Check Box is not selected'.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
*
*
******************************************************************************
* Display save dialog window
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title = ' '
default_extension = 'txt'
default_file_name = 'file_name'
initial_directory = 'C:\'
CHANGING
filename = gv_filename
path = gv_path
fullpath = p_path
user_action = gv_result.
.
********************************************************************************
* START-OF-SELECTION
*
* Main part of code - Work Area
START-OF-SELECTION.
" We call on the FORM Get_Data
" FORM is like a function
WRITE: / p_path.
PERFORM get_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&
*& Input: None - The parameter/selection fields are not required
*& to have a value.
*& Output: Writes to screen and File.
*& Usage: PERFORM get_data
*&
*& Job: Performs the query
*& Fills internal table with query results
*& Creates output filename and opens it
*& Sorts internal table containing query results
*& Loops over lines of internal table, writes on screen
*&
*&
*&
*&---------------------------------------------------------------------*
FORM get_data.
***************************************
* Basic Select with multiple fields
* Filling internal table gt_ever with contents of ever
* Notes : p_bstat, s_kofix, s_vrefer are the variables
* corresponding to the screen selection parameters.
SELECT *
* e~vkonto
* e~kofiz
* e~bstatus
* e~vrefer
FROM ever AS e
INTO CORRESPONDING FIELDS OF TABLE gt_ever
WHERE e~bstatus = p_bstat
AND e~kofiz IN s_kofiz
AND e~vrefer IN s_vrefer.
SELECT a~vkonto
a~kofiz
* e~bstatus
* e~vrefer
FROM ever AS a
INTO CORRESPONDING FIELDS OF TABLE gs_ever
WHERE a~bstatus = p_bstat
AND a~kofiz IN s_kofiz
AND a~vrefer IN s_vrefer.
************************************** .
* Declare filepath
DATA: ext_filename(128) TYPE c VALUE
'//tmp/'.
* Concatenate full file path to directory
CONCATENATE ext_filename 'PD701011_EVER_' sy-datum '.v00.3.txt'
INTO ext_filename.
**************************************
* OPEN FILE FOR WRITING
open dataset ext_filename for output in legacy text mode
code page '1700'.
**************************************
* SORT INTERNAL TABLE
SORT gt_ever BY vkonto.
**************************************
* LOOP AT FIRST INTERNAL TABLE AND WRITE TO SCREEN
* Declare the field separator for file printing
CONSTANTS: c_comma(5) value ' '.
* Declare the variale that will hold the line value to be printed
DATA: V_CON(100) TYPE C.
* IF THE CHECKBOX IS CHECKED:
IF P_CHK = 'X'.
* Loop over internal table
LOOP AT gt_ever.
"MOVE-CORRESPONDING gt_ever TO gt_ever2.
"APPEND LINES OF gt_ever TO gt_ever2.
* Write to Screen
WRITE: / "'1',
gt_ever-vkonto,
gt_ever-kofiz,
gt_ever-bstatus,
gt_ever-vrefer.
* Construct new formatted line for output into file
CONCATENATE gt_ever-vkonto
gt_ever-kofiz
gt_ever-bstatus
gt_ever-vrefer
INTO V_CON separated by c_comma.
" AT END: will trigger at the end of each iteration
"AT END OF vkonto.
"WRITE: / text-t01, gt_ever-vkonto, '101'.
"TRANSFER gt_ever-vkonto TO ext_filename.
TRANSFER V_CON TO ext_filename.
"TRANSFER gt_ever TO ext_filename.
* TRANSFER gs_ever TO ext_filename.
"ENDAT.
ENDLOOP.
************************************************************
* LOOPING AND PRINTING TABLE DECLARED WITH THE SECOND METHOD.
* Print second internal table
* IF THE CHECKBOX IS NOT CHECKED
ELSE.
WRITE: / 'NEW TABLE LOOP STARTS HERE'.
LOOP AT gs_ever.
WRITE: /"'1',
gs_ever-vkonto,
gs_ever-kofiz.
ENDLOOP.
ENDIF.
CLOSE DATASET ext_filename.
ENDFORM.
*&---------------------------------------------------------------------*
*& Report ZTEE_PD_CSR_TEST_2
*&
*&---------------------------------------------------------------------*
*&
*& Function:
*& Enter package or programmer name, output list with
*& all codes written by said programmer, or belonging
*& to that package.
*&
*& Using DB tables: TADIR.
*&
*& Techniques:
*& OPEN CURSOR
*& SELECTION-SCREEN PROGRAMMING
*& BASIC ALV REPORTS
*&
*&
*&
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEE_PD_CSR_TEST_2.
type-pools:slis.
TABLES: tadir.
DATA: go_alv TYPE REF TO cl_salv_table.
DATA gs_tadir LIKE tadir.
DATA gst_tadir TYPE tadir.
DATA t_tadir LIKE TABLE OF gs_tadir.
DATA t_wa_tadir LIKE LINE OF t_tadir.
"DATA gst_tadir LIKE LINE OF gs_tadir.
DATA crs_tadir TYPE cursor.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK BACKGROUND WITH FRAME TITLE A2BG.
SELECTION-SCREEN BEGIN OF BLOCK SELECTION WITH FRAME TITLE A1TITLE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (32) A1LINE1 FOR FIELD p_author.
"PARAMETERS:
SELECT-OPTIONS: p_author FOR tadir-author.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (29) A1LINE2 FOR FIELD p_dev.
SELECT-OPTIONS: p_dev FOR tadir-devclass.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (29) B11LINE1 FOR FIELD p_but1.
PARAMETERS: p_but1 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (30) B11LINE2 FOR FIELD p_but2.
PARAMETERS: p_but2 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (30) B11LINE3 FOR FIELD p_but3.
PARAMETERS: p_but3 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN: END OF BLOCK SELECTION.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK BACKGROUND.
INITIALIZATION.
PERFORM SELECTION_SCREEN_TEXT.
START-OF-SELECTION.
PERFORM get_data.
PERFORM out_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&
*& Input: None - The parameter/selection fields are not required
*& to have a value.
*& Output: Writes to screen and File.
*& Usage: PERFORM get_data
*&
*& Job: Performs the query
*& Fills internal table with query results
*& Creates output filename and opens it
*& Sorts internal table containing query results
*& Loops over lines of internal table, writes on screen
*&
*&
*&
*&---------------------------------------------------------------------*
FORM get_data.
***************************************
* Basic Select with multiple fields
* Filling internal table gt_ever with contents of ever
* Notes : p_bstat, s_kofix, s_vrefer are the variables
* corresponding to the screen selection parameters.
OPEN CURSOR crs_tadir
FOR SELECT *
* e~vkonto
* e~kofiz
* e~bstatus
* e~vrefer
FROM tadir as e
WHERE e~author IN p_author
AND e~devclass IN p_dev.
DO.
FETCH NEXT CURSOR crs_tadir
"FETCH NEXT CURSOR crs_tadir INTO gst_tadir.
INTO CORRESPONDING FIELDS OF gs_tadir.
"INSERT gs_tadir INTO t_tadir.
APPEND gs_tadir TO t_tadir.
IF sy-subrc <> 0.
CLOSE CURSOR crs_tadir.
EXIT.
ENDIF.
ENDDO.
ENDFORM. "get_data
*&---------------------------------------------------------------------*
*& Form out_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM out_data.
* LOOP AT t_tadir INTO gst_tadir.
* WRITE: /
* gst_tadir-obj_name,
* gst_tadir-devclass.
* ENDLOOP.
if p_but1 = 'X'.
try.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_alv
CHANGING
t_table = t_tadir.
go_alv->display( ).
endtry.
* CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "CALL FUNCTION MODULE TO DISPLAY ALV GRID
* EXPORTING
* I_CALLBACK_PROGRAM = SY-REPID "SY-REPID IS A SYSTEM VARIABLE WHICH STORES CURRENT PROGRAM NAME
* I_STRUCTURE_NAME = 'TADIR'
* TABLES
* T_OUTTAB = t_tadir. "PASS INTERNAL TABLE TO DISPLAY ALV FORMAT
ELSEIF p_but2 = 'X'.
LOOP AT t_tadir INTO gst_tadir.
WRITE: /
gst_tadir-obj_name,
gst_tadir-devclass.
ENDLOOP.
ELSEIF p_but3 = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "CALL FUNCTION MODULE TO DISPLAY ALV GRID
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID "SY-REPID IS A SYSTEM VARIABLE WHICH STORES CURRENT PROGRAM NAME
I_STRUCTURE_NAME = 'TADIR'
TABLES
T_OUTTAB = t_tadir. "PASS INTERNAL TABLE TO DISPLAY ALV FORMAT
ENDIF.
ENDFORM. "out_data
*&---------------------------------------------------------------------*
*& Form selection_screen_text
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM SELECTION_SCREEN_TEXT.
A1TITLE = 'Code Finder'.
A1LINE1 = 'Name of Programmer:'.
A1LINE2 = 'Name of Package:'.
A2BG = 'AOAOAOA'.
B11LINE1 = 'parameter'.
B11LINE2 = 'parameter2'.
ENDFORM. " selection_screen_text
1. abapqueryfilesave.abap - Shows how to declare itab, fill it with select, print on screen, print on file.
2. abapquerycheckbox.abap - Shows how to declare itab, etc, and function of CHECKBOX.
3. abapquerydialogformating.abap - Shows how to manipulat selection-screens and formatting of interface.
4. abapquerycopyitab.abap - Shows how to declare, populate and copy internal tables
5. abapquerycopyitabext.abap - Shows how to declare, populate, copy internal tables, advanced examples.
6. abapselectstatement.abap - Shows how to declare itab and populate with select statements.
7. abapcursoralv.abap - Shows how to use open cursor method, radio buttons, alv reports
8.
9.
10.
11.
12.
*&---------------------------------------------------------------------*
*& Report ZTEE_RF_PRODUCE_V1
*&
*&---------------------------------------------------------------------*
*&
*& Join fkkvkp and fkkvk and bring KHP from fkkvk into a file structure
*& Run with Parallel
*&
*& Programs run in parallel need:
*& 1. Select-option with many aggregator of parallel
*&
*& Notes: Needs parallel beacuse it searches with non keys
*& Notes: CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
*& Concatenate with Delim
*& Select / Inner Join / "IN" in where clause (Used for ranges,
*& or parameter ranges)aaaa
*&
*&---------------------------------------------------------------------*
REPORT ztee_rf_produce_v1.
* Problems
* Pedio Kodikos Ilektronikis pliromis (fkkvk? pou?)....
*
*
TABLES: fkkvkp, fkkvk.
DATA: gt_fkkvkp LIKE fkkvkp OCCURS 0 WITH HEADER LINE.
"DATA: gt_fkkvk LIKE fkkvk OCCURS 0 WITH HEADER LINE.
DATA: gt_ever LIKE ever OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF gt_rf_out OCCURS 0,
vkont LIKE fkkvkp-vkont,
rf_code LIKE fkkvkp-rf_code,
vkona LIKE fkkvk-vkona,
bstatus LIKE ever-bstatus,
END OF gt_rf_out.
FIELD-SYMBOLS : <fs_gt_rf_out> LIKE gt_rf_out.
INITIALIZATION.
PARAMETERS: p_count(5) TYPE n.
PARAMETERS: p_out LIKE rlgrap-filename DEFAULT
'//Interfaces/rfconvert.out'.
" This select-options will be used in the parallel job
" The parallel job program will parse and split a total range of vkont
" and feed them to this program, through select-options.
SELECT-OPTIONS: s_vkont FOR fkkvkp-vkont.
START-OF-SELECTION.
WRITE: / 'Start'.
SKIP 1.
PERFORM get_data.
END-OF-SELECTION.
PERFORM put_data.
SKIP 1.
WRITE: / 'END'.
********************************* FORMS **************************
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data.
*SELECT vkp~vkont vkp~rf_code vk~vkona
* FROM fkkvkp as vkp
* INNER JOIN fkkvk as vk ON
* vkp~vkont = vk~vkont
* " INTO CORRESPONDING FIELDS OF TABLE gt_rf_out.
* INTO wa_gt_rf_out
* WHERE vkp-vkont IN s_vkont.
* APPEND wa_gt_rf_out TO gt_rf_out.
*ENDSELECT.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_rf_out
FROM fkkvkp AS vkp
INNER JOIN fkkvk AS vk ON
vkp~vkont = vk~vkont
* inner join ever as e on
* e~vkonto = vkp~vkont
WHERE vkp~vkont IN s_vkont.
* and e~loevm = ''.
IF NOT gt_rf_out[] IS INITIAL. "Για for all entries -- check line of table
SELECT * INTO TABLE gt_ever
FROM ever FOR ALL ENTRIES IN gt_rf_out
WHERE vkonto = gt_rf_out-vkont
AND loevm = ''.
SORT gt_ever BY vkonto. " Sorting table *1
SORT gt_rf_out BY vkont.
LOOP AT gt_rf_out ASSIGNING <fs_gt_rf_out>.
READ TABLE gt_ever WITH KEY vkonto = <fs_gt_rf_out>-vkont
BINARY SEARCH. " Sorting table *1
IF sy-subrc = 0.
MOVE gt_ever-bstatus TO <fs_gt_rf_out>-bstatus.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. "get_data
*&---------------------------------------------------------------------*
*& Form put_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM put_data.
* Code block, necessary for declaring file name with delim
DATA: ext_filename LIKE rlgrap-filename,
msg(128) TYPE c,
line_out(1000) TYPE c,
delim TYPE c VALUE ';'.
"value cl_abap_char_utilities=>horizontal_tab.
MOVE p_out TO ext_filename.
REPLACE '&' WITH p_count INTO ext_filename.
OPEN DATASET ext_filename
FOR OUTPUT
IN LEGACY TEXT MODE
CODE PAGE '1700'
MESSAGE msg.
IF sy-subrc <> 0.
WRITE: / 'Problem in opening output file', ext_filename.
RETURN.
ENDIF.
* Final output loop + controls
* Looping at output table
* Checking values of fields, and writing.
LOOP AT gt_rf_out.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = gt_rf_out-vkont
IMPORTING
output = gt_rf_out-vkont.
" Format output line
CONCATENATE gt_rf_out-vkont
gt_rf_out-rf_code
gt_rf_out-vkona
gt_rf_out-bstatus
INTO line_out
SEPARATED BY delim.
CONCATENATE line_out
';'
INTO line_out.
" Move line to filename
TRANSFER line_out TO ext_filename.
"WRITE: / gt_fkkvkp-gpart, gt_fkkvkp-vkont, GT_FKKVKP-EBVTY, GT_FKKVKP-ABVTY.
ENDLOOP.
CLOSE DATASET ext_filename.
ENDFORM. "put_data
*&---------------------------------------------------------------------*
*& Report ZTEE_RF_PRODUCE_V1_PARALEL
*&
*&---------------------------------------------------------------------*
*& This program sends file to NEW Online cash desk system of PPC
*& Path: /Interfaces/Payments/NeoTameio/unprocessed/
*&
*&---------------------------------------------------------------------*
REPORT ztee_rf_produce_v1_paralel.
TABLES : fkkvkp, zbatch_control.
* For Parallel
DATA: wa_nriv LIKE nriv,
count TYPE i,
l_contador(5) TYPE n VALUE 0.
DATA: BEGIN OF i_jobs OCCURS 0,
jobname TYPE tbtcjob-jobname,
jobcount TYPE tbtcjob-jobcount,
END OF i_jobs.
RANGES r_vkont_main FOR fkkvk-vkont.
INCLUDE zbi_set_servers.
* Selection Screen.
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-h01.
PARAMETERS : p_job LIKE zbatch_control-key_job,
p_budat LIKE dfkkko-cpudt.
PARAMETERS : p_nr LIKE inri-nrrangenr.
SELECT-OPTIONS: pvkont FOR fkkvkp-vkont.
PARAMETERS : p_count TYPE i DEFAULT '500000',
p_jobs TYPE i.
PARAMETERS : p_out LIKE rlgrap-filename.
* DEFAULT '//Interfaces/EK/Outgoing/unprocessed/rfconvert_@_%_&.out'.
SELECTION-SCREEN END OF BLOCK b1.
*********************************************************************
AT SELECTION-SCREEN.
CLEAR zbatch_control.
IF NOT p_job IS INITIAL.
SELECT SINGLE * FROM zbatch_control
WHERE key_job = p_job.
IF NOT zbatch_control-laufd IS INITIAL.
MOVE zbatch_control-laufd TO p_budat.
move '//Interfaces/EK/Outgoing/unprocessed/rfconvert_@_%_&.out'
to p_out.
REPLACE '%' WITH p_budat INTO p_out.
ENDIF.
ENDIF.
REPLACE '@' WITH p_nr INTO p_out.
CALL FUNCTION 'NUMBER_GET_INFO'
EXPORTING
nr_range_nr = p_nr
object = 'FKK_KONTO'
* SUBOBJECT = ' '
* TOYEAR = '0000'
IMPORTING
interval = wa_nriv
* EXCEPTIONS
* INTERVAL_NOT_FOUND = 1
* OBJECT_NOT_FOUND = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CLEAR : pvkont[].
MOVE 'IBT' TO pvkont.
MOVE wa_nriv-fromnumber TO pvkont-low.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_nriv-nrlevel
IMPORTING
output = pvkont-high.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = pvkont-high
IMPORTING
output = pvkont-high.
APPEND pvkont.
**********************************************************************
START-OF-SELECTION.
DO.
IF r_vkont_main-high > pvkont-high.
EXIT.
ENDIF.
IF sy-index = 1.
MOVE 'IBT' TO r_vkont_main(3).
MOVE pvkont-low TO r_vkont_main-low.
r_vkont_main-high = r_vkont_main-low + p_count.
UNPACK r_vkont_main-high TO r_vkont_main-high.
APPEND r_vkont_main.
ELSE.
MOVE 'IBT' TO r_vkont_main(3).
r_vkont_main-low = r_vkont_main-high + 1.
UNPACK r_vkont_main-low TO r_vkont_main-low.
r_vkont_main-high = ( r_vkont_main-low + p_count ) - 1.
UNPACK r_vkont_main-high TO r_vkont_main-high.
APPEND r_vkont_main.
ENDIF.
ENDDO.
PERFORM execute_parallel_process.
PERFORM check_jobs_status.
*&---------------------------------------------------------------------*
*& Form EXECUTE_PARALLEL_PROCESS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM execute_parallel_process .
DATA: l_jobname TYPE tbtcjob-jobname,
l_jobcount TYPE tbtcjob-jobcount,
l_fch_job TYPE tbtcjob-sdlstrtdt,
l_job TYPE tbtcjob-sdlstrttm,
l_zdm_file_check TYPE zdm_file_check.
RANGES r_vkont FOR fkkvk-vkont.
* Start of changes by D.Makris 22/06/2015 -- Set Servers ---------------
DATA: wf_server_rc LIKE sy-subrc,
wf_central TYPE zbi_central,
wf_application TYPE zbi_application,
wf_process TYPE jobanz_kk,
wf_job_close_rc LIKE sy-subrc.
PERFORM get_server_parameters USING 'ZTEE_RF_PRODUCE_V1'
CHANGING wf_server_rc
wf_central
wf_application
wf_process.
* End of changes by D.Makris 22/06/2015 ---- Set Servers ---------------
CLEAR i_jobs[].
LOOP AT r_vkont_main.
CLEAR : r_vkont, r_vkont[].
MOVE-CORRESPONDING r_vkont_main TO r_vkont.
APPEND r_vkont.
l_contador = l_contador + 1.
CONCATENATE 'ZTEE_RF_PRODUCE_V1_' l_contador
INTO l_jobname.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = l_jobname
IMPORTING
jobcount = l_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc <> 0.
WRITE: text-e01, l_jobname.
ENDIF.
SUBMIT ztee_rf_produce_v1
VIA JOB l_jobname NUMBER l_jobcount
WITH p_count = l_contador
WITH s_vkont IN r_vkont
WITH p_out = p_out
AND RETURN.
* Start of changes by D.Makris 22/06/2015 -- Set Servers ---------------
CLEAR wf_job_close_rc.
PERFORM set_server_to_job_v3 TABLES i_jobs
USING l_jobcount
l_jobname
wf_server_rc
wf_central
wf_application
wf_process
l_contador
p_jobs
'ZTEE_RF_PRODUCE_V1'
CHANGING wf_job_close_rc.
IF wf_job_close_rc = 0.
* End of changes by D.Makris 22/06/2015 ---- Set Servers ---------------
CLEAR i_jobs.
i_jobs-jobname = l_jobname.
i_jobs-jobcount = l_jobcount.
APPEND i_jobs.
WRITE:/ text-e02, l_jobname.
ELSE.
WRITE:/ text-e03, l_jobname.
ENDIF.
ENDLOOP.
ENDFORM. " EXECUTE_PARALLEL_PROCESS
*&---------------------------------------------------------------------*
*& Form CHECK_JOBS_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_jobs_status .
DATA:
ab TYPE char1, "#EC NEEDED
fi TYPE char1, "#EC NEEDED
pr TYPE char1,
re TYPE char1, "#EC NEEDED
ru TYPE char1,
sc TYPE char1,
still_running TYPE char1.
DO.
LOOP AT i_jobs.
CLEAR still_running.
CALL FUNCTION 'SHOW_JOBSTATE'
EXPORTING
jobcount = i_jobs-jobcount
jobname = i_jobs-jobname
IMPORTING
aborted = ab
finished = fi
preliminary = pr
ready = re
running = ru
scheduled = sc
EXCEPTIONS
job_notex = 1 " dat heißt <job existiert net>
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.
IF sc = 'X' OR ru = 'X' OR pr = 'X' OR re = 'X'.
still_running = 'X'.
ELSEIF ab = 'X'.
MESSAGE a000(zdm00)
WITH text-a01 i_jobs-jobname '/' i_jobs-jobcount .
ENDIF.
IF still_running = 'X'.
* Just wait for the next pass.
ELSE.
DELETE i_jobs. " Job finished, delete line.
ENDIF.
ENDLOOP.
IF sy-subrc <> 0.
EXIT.
ENDIF.
WAIT UP TO 20 SECONDS.
ENDDO.
ENDFORM. " CHECK_JOBS_STATUS
*&---------------------------------------------------------------------*
*& Report ZTEE_RF_PRODUCE_V1
*&
*&---------------------------------------------------------------------*
*&
*& Join fkkvkp and fkkvk and bring KHP from fkkvk into a file structure
*& Run with Parallel
*&
*& Programs run in parallel need:
*& 1. Select-option with many aggregator of parallel
*&
*& Notes: Needs parallel beacuse it searches with non keys
*& Notes: CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
*& Concatenate with Delim
*& Select / Inner Join / "IN" in where clause (Used for ranges,
*& or parameter ranges)aaaa
*&
*&---------------------------------------------------------------------*
REPORT ztee_rf_produce_v1.
* Problems
* Pedio Kodikos Ilektronikis pliromis (fkkvk? pou?)....
*
*
TABLES: fkkvkp, fkkvk.
DATA: gt_fkkvkp LIKE fkkvkp OCCURS 0 WITH HEADER LINE.
"DATA: gt_fkkvk LIKE fkkvk OCCURS 0 WITH HEADER LINE.
DATA: gt_ever LIKE ever OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF gt_rf_out OCCURS 0,
vkont LIKE fkkvkp-vkont,
rf_code LIKE fkkvkp-rf_code,
vkona LIKE fkkvk-vkona,
bstatus LIKE ever-bstatus,
gpart LIKE fkkvkp-gpart,
name TYPE p19_ui_cname,
id TYPE but0id-idnumber,
passp TYPE but0id-idnumber,
taxno TYPE dfkkbptaxnum-taxnum,
doy TYPE dfkkbptaxnum-taxnum,
anlage TYPE eanl-anlage,
street_adr TYPE c LENGTH 45,
street_city TYPE c LENGTH 45,
street_tk TYPE c LENGTH 10,
street_e_adr TYPE c LENGTH 45,
street_e_city TYPE c LENGTH 45,
street_e_tk TYPE c LENGTH 10,
END OF gt_rf_out.
FIELD-SYMBOLS : <fs_gt_rf_out> LIKE gt_rf_out.
INITIALIZATION.
PARAMETERS: p_count(5) TYPE n.
PARAMETERS: p_out LIKE rlgrap-filename DEFAULT
'//Interfaces/rfconvert.out'.
" This select-options will be used in the parallel job
" The parallel job program will parse and split a total range of vkont
" and feed them to this program, through select-options.
SELECT-OPTIONS: s_vkont FOR fkkvkp-vkont.
START-OF-SELECTION.
WRITE: / 'Start'.
SKIP 1.
PERFORM get_data.
END-OF-SELECTION.
PERFORM put_data.
SKIP 1.
WRITE: / 'END'.
********************************* FORMS **************************
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data.
DATA: lt_but000 TYPE TABLE OF but000,
lt_but0id TYPE TABLE OF but0id,
lt_taxdoy TYPE TABLE OF dfkkbptaxnum,
ls_adrc_con TYPE adrc,
ls_adrc_mail TYPE adrc.
FIELD-SYMBOLS: <lfs_but000> TYPE but000,
<lfs_but0id> TYPE but0id,
<lfs_taxdoy> TYPE dfkkbptaxnum.
*SELECT vkp~vkont vkp~rf_code vk~vkona
* FROM fkkvkp as vkp
* INNER JOIN fkkvk as vk ON
* vkp~vkont = vk~vkont
* " INTO CORRESPONDING FIELDS OF TABLE gt_rf_out.
* INTO wa_gt_rf_out
* WHERE vkp-vkont IN s_vkont.
* APPEND wa_gt_rf_out TO gt_rf_out.
*ENDSELECT.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_rf_out
FROM fkkvkp AS vkp
INNER JOIN fkkvk AS vk ON
vkp~vkont = vk~vkont
* inner join ever as e on
* e~vkonto = vkp~vkont
WHERE vkp~vkont IN s_vkont.
* and e~loevm = ''.
IF NOT gt_rf_out[] IS INITIAL. "Για for all entries -- check line of table
SELECT * INTO TABLE gt_ever
FROM ever FOR ALL ENTRIES IN gt_rf_out
WHERE vkonto = gt_rf_out-vkont
AND loevm = ''.
SELECT * FROM but000
INTO TABLE lt_but000
FOR ALL ENTRIES IN gt_rf_out
WHERE partner EQ gt_rf_out-gpart.
SELECT * FROM but0id
INTO TABLE lt_but0id
FOR ALL ENTRIES IN gt_rf_out
WHERE partner EQ gt_rf_out-gpart
AND type IN ('FS0001', 'FS0002' ).
SELECT * FROM dfkkbptaxnum
INTO TABLE lt_taxdoy
FOR ALL ENTRIES IN gt_rf_out
WHERE partner EQ gt_rf_out-gpart
AND taxtype IN ('GR2', 'DOY' ).
SORT gt_ever BY vkonto. " Sorting table *1
SORT gt_rf_out BY vkont.
SORT lt_but000 BY partner.
SORT lt_but0id BY partner type.
SORT lt_taxdoy BY partner taxtype.
LOOP AT gt_rf_out ASSIGNING <fs_gt_rf_out>.
READ TABLE gt_ever WITH KEY vkonto = <fs_gt_rf_out>-vkont
BINARY SEARCH. " Sorting table *1
IF sy-subrc = 0.
MOVE gt_ever-bstatus TO <fs_gt_rf_out>-bstatus.
MOVE gt_ever-anlage TO <fs_gt_rf_out>-anlage.
ENDIF.
READ TABLE lt_but000 ASSIGNING <lfs_but000>
WITH KEY partner = <fs_gt_rf_out>-gpart
BINARY SEARCH.
IF sy-subrc = 0.
IF <lfs_but000>-type = '1'.
<fs_gt_rf_out>-name = <lfs_but000>-name_last.
IF <lfs_but000>-name_first IS NOT INITIAL AND
<lfs_but000>-name_first(1) NE '.'.
CONCATENATE <fs_gt_rf_out>-name <lfs_but000>-name_first
INTO <fs_gt_rf_out>-name
SEPARATED BY space.
ENDIF.
IF <lfs_but000>-name_lst2 IS NOT INITIAL AND
<lfs_but000>-name_lst2(1) NE '.'.
CONCATENATE <fs_gt_rf_out>-name <lfs_but000>-name_lst2
INTO <fs_gt_rf_out>-name
SEPARATED BY space.
ENDIF.
ELSEIF <lfs_but000>-type = '2'.
<fs_gt_rf_out>-name = <lfs_but000>-name_org1.
ENDIF.
ENDIF.
READ TABLE lt_but0id ASSIGNING <lfs_but0id>
WITH KEY partner = <fs_gt_rf_out>-gpart
type = 'FS0001'
BINARY SEARCH.
IF sy-subrc = 0.
<fs_gt_rf_out>-id = <lfs_but0id>-idnumber.
ENDIF.
READ TABLE lt_but0id ASSIGNING <lfs_but0id>
WITH KEY partner = <fs_gt_rf_out>-gpart
type = 'FS0002'
BINARY SEARCH.
IF sy-subrc = 0.
<fs_gt_rf_out>-passp = <lfs_but0id>-idnumber.
ENDIF.
READ TABLE lt_taxdoy ASSIGNING <lfs_taxdoy>
WITH KEY partner = <fs_gt_rf_out>-gpart
taxtype = 'GR2'
BINARY SEARCH.
IF sy-subrc = 0.
<fs_gt_rf_out>-taxno = <lfs_taxdoy>-taxnum.
ENDIF.
READ TABLE lt_taxdoy ASSIGNING <lfs_taxdoy>
WITH KEY partner = <fs_gt_rf_out>-gpart
taxtype = 'DOY'
BINARY SEARCH.
IF sy-subrc = 0.
<fs_gt_rf_out>-doy = <lfs_taxdoy>-taxnum.
ENDIF.
CLEAR: ls_adrc_con,
ls_adrc_mail.
CALL FUNCTION 'ZBI_GET_ADDRESS_DATA2'
EXPORTING
i_vkont = <fs_gt_rf_out>-vkont
i_gpart = <fs_gt_rf_out>-gpart
i_anlage = <fs_gt_rf_out>-anlage
IMPORTING
e_adrc_con = ls_adrc_con
e_adrc_mail = ls_adrc_mail.
CONCATENATE ls_adrc_con-street ls_adrc_con-house_num1
INTO <fs_gt_rf_out>-street_adr
SEPARATED BY ''.
MOVE ls_adrc_con-city1 TO <fs_gt_rf_out>-street_city.
IF ls_adrc_con-po_box IS INITIAL.
MOVE ls_adrc_con-post_code1 TO <fs_gt_rf_out>-street_tk.
ELSE.
CONCATENATE 'Τ.Θ.' ls_adrc_con-po_box
INTO <fs_gt_rf_out>-street_adr
SEPARATED BY ''.
MOVE ls_adrc_con-post_code2 TO <fs_gt_rf_out>-street_tk.
ENDIF.
CONCATENATE ls_adrc_mail-street ls_adrc_mail-house_num1
INTO <fs_gt_rf_out>-street_e_adr
SEPARATED BY ''.
MOVE ls_adrc_mail-city1 TO <fs_gt_rf_out>-street_e_city.
IF ls_adrc_mail-po_box IS INITIAL.
MOVE ls_adrc_mail-post_code1
TO <fs_gt_rf_out>-street_e_tk.
ELSE.
CONCATENATE 'Τ.Θ.' ls_adrc_mail-po_box
INTO <fs_gt_rf_out>-street_e_adr
SEPARATED BY ''.
MOVE ls_adrc_mail-post_code2
TO <fs_gt_rf_out>-street_e_tk.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. "get_data
*&---------------------------------------------------------------------*
*& Form put_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM put_data.
* Code block, necessary for declaring file name with delim
DATA: ext_filename LIKE rlgrap-filename,
msg(128) TYPE c,
line_out(1000) TYPE c,
delim TYPE c VALUE ';'.
"value cl_abap_char_utilities=>horizontal_tab.
MOVE p_out TO ext_filename.
REPLACE '&' WITH p_count INTO ext_filename.
OPEN DATASET ext_filename
FOR OUTPUT
IN LEGACY TEXT MODE
CODE PAGE '1704'
MESSAGE msg.
IF sy-subrc <> 0.
WRITE: / 'Problem in opening output file', ext_filename.
RETURN.
ENDIF.
* Final output loop + controls
* Looping at output table
* Checking values of fields, and writing.
LOOP AT gt_rf_out.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = gt_rf_out-vkont
IMPORTING
output = gt_rf_out-vkont.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = gt_rf_out-anlage
IMPORTING
output = gt_rf_out-anlage.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = gt_rf_out-gpart
IMPORTING
output = gt_rf_out-gpart.
" Format output line
CONCATENATE gt_rf_out-vkont
gt_rf_out-rf_code
gt_rf_out-vkona
gt_rf_out-bstatus
gt_rf_out-gpart
gt_rf_out-name
gt_rf_out-id
gt_rf_out-passp
gt_rf_out-taxno
gt_rf_out-doy
gt_rf_out-anlage
gt_rf_out-street_adr
gt_rf_out-street_city
gt_rf_out-street_tk
gt_rf_out-street_e_adr
gt_rf_out-street_e_city
gt_rf_out-street_e_tk
INTO line_out
SEPARATED BY delim.
CONCATENATE line_out
';'
INTO line_out.
" Move line to filename
TRANSFER line_out TO ext_filename.
"WRITE: / gt_fkkvkp-gpart, gt_fkkvkp-vkont, GT_FKKVKP-EBVTY, GT_FKKVKP-ABVTY.
ENDLOOP.
CLOSE DATASET ext_filename.
ENDFORM. "put_data