onlyforbopi
6/13/2017 - 8:50 AM

ABAPREADYCODES

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-&gt;* 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