Shared Top Border

Enterprise Resource
Planning Portal

 

Advertise | Founder BLOG

ERPGenie.COM ABAP Tips and Tricks Database

THE ultimate
ERP website

 

Forums | Vote for us |

Google    Other Search Options

Login

Login to view more content!!!





Lost Password?
No account yet? Register

Registered Access

Poll

What area of ABAP are you interested in?
 
Home arrow Sample Code arrow ABAP Reports arrow Download table contents to PC local file
Download table contents to PC local file PDF Print E-mail
User Rating: / 2
PoorBest 
Sunday, 04 March 2007


[Selection Texts]
[Text Symbols]]
I005     Separetor
I006     Tab
I007     Other (Not space)
IB02     Table

R        Download table contents to PC local file

SP_COUNT         Display number of entries
SP_DIR           Directory
SP_ELSE          Others (except space)
SP_LANGU         Language
SP_ROWS          Maximum No. of Hits
SP_SEPAR         Separator
SP_TAB           Tab
SP_TABLE         Table name

*=====================================================================*
* Allow my poor English, English comments on this program are not good .
*=====================================================================*


************************************************************************
*&---------------------------------------------------------------------*
* Created  on  2007.02.15  by Y.SAITA  TOKYO,JAPAN
*&---------------------------------------------------------------------*

* You can do anything to this report without my permission.
* (modify,fix bugs,sell,republish,etc)
* This program is a use-at-your-own-risk-basis-program,
* So use at your own risk.
**
* In no event will the author be liable for indirect, special,
* Incidental, or consequental damages (if any) arising out of
* the use of this program.
* The person, who implements this program,
* have to be sure that such damage does not happen.
* I hope you'll find this program useful.
* &---------------------------------------------------------------------
*
* [Description]
*  This program downloads table of contents to a Pc file(text).
*  You can choose any separator (except space) as a delimiter.
*  You can use 'Dynamic selection' by pressing 'Filter records'.
*  You can filter fields by pressing 'Filter fields' which calls
*  the program filter fields(also you can use conversion-exit
*  by checking [cnv]).
*
*  Download file name will be
*   client + table name + system date + system time.
*
*  The table must be defined In Abap/4 Dictionary and
*  the table category must be 'TRANSP'or 'CLUSTER'or 'POOL' or 'VIEW'.
*  When the table category is a 'VIEW',the view type must be 'D' or 'P'.
*  Don't forget to implement program 'y_zsaita_430'.
*
*  [Compatibility]
*    Tested On 4.6C  and  Enterprise.
*
*  [NOTE1]
*   You do not need to create a gui status.
*
*  [NOTE2]
*     If you have Unicode check active in program attributes,
*       'Tab' must be defined as
*         CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
*         DATA C_TAB (1) TYPE C VALUE
*                CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
*     Otherwise, define
*      ‘DATA C_TAB (1) TYPE X VALUE '09'.’
*
*  [NOTE3]
*   Remember Excel 2003 Limits 256 Columns and 65536 rows.
*   Some codes are not needed with Excel 2007.

*  [NOTE4]
*   You may need to change the Japanese yen mark to backslash.
*
* [Security Notes]
*  If you want that only you can run this program,
*  You can use macro M_AUTH_CHK,M_AUTH_CHK2.
*  If you don't them,delete them.
*
*=============================================================*
*   For more information,see the attached pdf.file
*=============================================================*

*[Selection Texts]
"I 005     Separetor
"I 006     Tab
"I 007     Others (except space)
"I B02     Table

*[Text Symbols]
"S P_COUNT         Display number of entries
"S P_DIR           Directory
"S P_ELSE          Other (not space)
"S P_LANGU         Language
"S P_ROWS          Maximum No. of Hits
"S P_SEPAR         Separator
"S P_TAB           Tab
"S P_TABLE         Table name

REPORT Y_ZSAITA_420
                LINE-COUNT 65
                LINE-SIZE 1023
                NO STANDARD PAGE HEADING.
*
TABLES: DD02L.

*************
*  DATA     *
*************
TYPE-POOLS: RSDS.

DATA: D_REF      TYPE REF   TO DATA,
      I_ALV_CAT  TYPE TABLE OF LVC_S_FCAT,
      LS_ALV_CAT LIKE LINE  OF I_ALV_CAT.

DATA: SV_ALV_CAT LIKE LINE OF I_ALV_CAT.

*LVC_S_FCAT  I_ALV_CAT
TYPES TABNAME    LIKE DCOBJDEF-NAME .


*for dynamic internal table
DATA: BEGIN OF ITAB OCCURS 0.
        INCLUDE STRUCTURE DNTAB.
        DATA   SEL_FLAG(1).  " Selected or not
        DATA   SEL_CNV(1).   " CNV_EXIT
DATA: END OF ITAB.
*
DATA BEGIN OF NAMETABL OCCURS 30.
        INCLUDE STRUCTURE DNTAB.
        DATA   SEL_FLAG(1).  " Selected or not
        DATA   SEL_CNV(1).   " CNV_EXIT
DATA END OF NAMETABL.


*for download data
DATA : V_DATALINE(5000).
DATA : I_DOWN   LIKE V_DATALINE OCCURS 100 WITH HEADER LINE.
DATA : I_DOWN2  LIKE V_DATALINE OCCURS 100 WITH HEADER LINE.
*

DATA: W_SELID   TYPE RSDYNSEL-SELID,
      IT_TABLES TYPE TABLE OF RSDSTABS,
      IS_TABLES TYPE RSDSTABS,
      IT_FIELDS TYPE TABLE OF RSDSFIELDS,
      IT_EXPR   TYPE RSDS_TEXPR,
      IT_RANGES TYPE RSDS_TRANGE,
      IT_WHERE  TYPE RSDS_TWHERE,
      IS_WHERE  TYPE RSDS_WHERE,
      W_ACTIVE  TYPE I.


*for header text
DATA : W_TEXT_TITLE(1000)     TYPE C.
DATA : W_TEXT_SEQ(5000)       TYPE C.
DATA : W_TEXT_FIELDNAME(5000) TYPE C.
DATA : W_TEXT_FIELDTEXT(5000) TYPE C.

DATA : W_TEXT(5000)           TYPE C.
DATA : W_TEXT_BBB(100)        TYPE C.
*
DATA   W_ITAB_CNT             TYPE I.
DATA   W_TABIX(4)             TYPE C.

DATA  W_DBCNT                 LIKE SY-DBCNT.
DATA  W_DBCNT2                LIKE SY-DBCNT.

DATA: W_DD02T_DDTEXT          LIKE DD02T-DDTEXT,   "table text
      W_DD02L-TABCLASS        LIKE DD02L-TABCLASS,
      W_DD02L-VIEWCLASS       LIKE DD02L-VIEWCLASS.

 

*Tab for having Unicode check active
CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.

DATA  C_TAB(1) TYPE C VALUE
      CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

*********************************************
*Do not delete
*Tab for not having Unicode check active
*    DATA  C_TAB(1) TYPE X VALUE '09'.
*********************************************

DATA : W_VALUE(20)          TYPE C.
*
DATA W_FIELD(1)             TYPE C.
DATA W_FIELD_CNT            TYPE I.
DATA W_SELECTED_FIELD_CNT   TYPE I.

DATA L_DATAT                TYPE C.
DATA W_DATE(10)             TYPE C.
DATA W_TIME(10)             TYPE C.

DATA W_FILENM2              TYPE STRING.

DATA W_SEQ_CNT              TYPE I.
DATA W_SEQ_CNT2(5)          TYPE N.

DATA SV_TABLE               TYPE TABNAME.

DATA W_DIR_CHECK(1)         TYPE C.
DATA W_SEPARATOR(1)         TYPE C.

*FOR FM 'PC_SPLIT_COMPLETE_FILENAME'
DATA :  W_PCFILE-PATH       LIKE  PCFILE-PATH,
        W_COMPLETE_FILENAME LIKE  PCFILE-PATH,
        W_PCNAME(100)       TYPE  C.

DATA: COS_MAXLINE  TYPE I VALUE 65536.  "Excel 2003 max rows


*************
*  Marcros  *
*************
*
DATA  W_POPUP_ANSWER(1)   TYPE C.
*********************************************
*  Marcro for POPUP_TO_CONFIRM_WITH_MESSAGE *
*********************************************
DEFINE M_POPUP_TO_CONFIRM_MESSAGE.
*
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
  EXPORTING
    DEFAULTOPTION        = 'Y'
    DIAGNOSETEXT1        = &1
    DIAGNOSETEXT2        = &2
    DIAGNOSETEXT3        = &3
    TEXTLINE1            = &4
    TEXTLINE2            = &5
    TITEL                = &6
    START_COLUMN         = 25
    START_ROW            = 6
    CANCEL_DISPLAY       = 'X'
 IMPORTING
   ANSWER               =  &7.
*
END-OF-DEFINITION.

*********************************************
*  Marcro for POPUP_TO_INFORM               *
*********************************************
DEFINE M_POPUP_TO_INFORM.

CALL FUNCTION 'POPUP_TO_INFORM'
  EXPORTING
    TITEL         = &5
    TXT1          = &1
    TXT2          = &2
    TXT3          = &3
    TXT4          = &4.
*
END-OF-DEFINITION.

*
DEFINE M_AUTH_CHK.
*
 IF SY-UNAME = '???'.
 ELSE.
    MESSAGE E398(00) WITH
      'You do not have authorization'.
    EXIT.
 ENDIF.
END-OF-DEFINITION.

*
DEFINE M_AUTH_CHK2.
*
 IF SY-DATUM > '20070401'.
   MESSAGE E398(00) WITH
   'You do not have authorization'.

 ENDIF.
*
END-OF-DEFINITION.


********************************
* field-symbols
********************************
FIELD-SYMBOLS :
        <F_FS1>   TYPE TABLE,
        <F_FS2>   TYPE ANY,
        <F_FS3>   TYPE ANY.

*-------------------------------------------------*
* Selection Screen,Parameters and Select-Options  *
*-------------------------------------------------*
*Display Number of entries
PARAMETERS:
       P_COUNT   AS CHECKBOX .
SELECTION-SCREEN SKIP 1.

*Table name
SELECTION-SCREEN: BEGIN OF BLOCK B02 WITH FRAME TITLE TEXT-B02.
PARAMETERS: P_TABLE TYPE TABNAME OBLIGATORY
                                 MEMORY ID DTB
                                 MATCHCODE OBJECT DD_DBTB_16.

*Filter Records
SELECTION-SCREEN: BEGIN OF LINE,
                  PUSHBUTTON 33(20) P_SEL  USER-COMMAND SEL,
                  COMMENT    55(15) SELCNT,
                  END OF LINE.

*Filter FIELD
SELECTION-SCREEN: BEGIN OF LINE,
                  PUSHBUTTON 33(20) P_FIELD  USER-COMMAND FIELD,
                  COMMENT    55(15) SELFIELD,
                  END OF LINE.
SELECTION-SCREEN: END OF BLOCK B02.

*Separator tab
SELECTION-SCREEN BEGIN OF BLOCK B003 WITH FRAME TITLE TEXT-005.
SELECTION-SCREEN BEGIN OF LINE.
  PARAMETERS P_TAB RADIOBUTTON GROUP G002.   "Tab
SELECTION-SCREEN COMMENT (20) TEXT-006 FOR FIELD P_TAB.
SELECTION-SCREEN END OF LINE.

*Separator others(anything but space)
SELECTION-SCREEN BEGIN OF LINE.
  PARAMETERS P_ELSE RADIOBUTTON GROUP G002.
SELECTION-SCREEN COMMENT (20) TEXT-007 FOR FIELD P_ELSE.
SELECTION-SCREEN POSITION POS_LOW.
  PARAMETERS P_SEPAR(1) TYPE C.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B003.

*Langueage
PARAMETERS:
  P_LANGU   LIKE DOKIL-LANGU  DEFAULT SY-LANGU OBLIGATORY.

*Maximum No. of Hits
PARAMETERS:
       P_ROWS    TYPE I.
SELECTION-SCREEN SKIP 1.

*Directory
PARAMETERS:
   P_DIR    LIKE RLGRAP-FILENAME  OBLIGATORY.

**********************
*AT SELECTION-SCREEN *
**********************
AT SELECTION-SCREEN.
*
   M_AUTH_CHK.
*
   IF SV_TABLE  <>  P_TABLE.
      PERFORM SELECT_DD02L.
*
      PERFORM CALL_NAMETAB_GET.  "Get table definition
   ENDIF.
*
   IF P_COUNT = SPACE.
      IF P_ELSE = 'X'.
         IF P_SEPAR = ' '.
            SET CURSOR FIELD 'P_SEPAR'.
            MESSAGE E398(00) WITH
           'Please enter a separator except a space'.
         ENDIF.
      ENDIF.
  ENDIF.

* Filter records
  IF SY-UCOMM = 'SEL'.
     PERFORM UCOMM_SEL.
     EXIT.
  ENDIF.

* Filter fields
  IF SY-UCOMM = 'FIELD'.
     PERFORM UCOMM_FIELD.
     EXIT.
  ENDIF.
*


****************************
*AT SELECTION-SCREEN OUTPUT*
****************************
AT SELECTION-SCREEN OUTPUT.
*
 M_AUTH_CHK.

  IF W_ACTIVE IS INITIAL.
    CLEAR: SELCNT.
  ELSE.
    WRITE W_ACTIVE TO SELCNT LEFT-JUSTIFIED.
  ENDIF.
*
  IF  W_FIELD  IS INITIAL.
      CLEAR   SELFIELD.
  ELSE.
      WRITE W_SELECTED_FIELD_CNT TO SELFIELD  LEFT-JUSTIFIED.
  ENDIF.

*----------------------------------------------------------------------*
*       AT SELECTION-SCREEN ON VALUE-REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DIR.
*
  PERFORM FRM_GET_DLPATH.


******************************
*AT USER-COMMAND           *
******************************
*AT USER-COMMAND.
*


********************
*INITIALIZATION    *
********************
INITIALIZATION.
*
 M_AUTH_CHK.

*
  P_SEL    = 'Filter Records'.
  P_FIELD  = 'Filter Fields'.
*
  P_DIR    = 'M:\My Documents\temp\'. ""<--backslash??
  P_LANGU  = 'EN'.
*
  CLEAR  SV_TABLE.


**********************
*START-OF-SELECTION  *
**********************
START-OF-SELECTION.

  M_AUTH_CHK.
*
* Check directory exists
  PERFORM  CHECK_FILE.

  IF  W_DIR_CHECK = 'X'.  EXIT. ENDIF.

* Check  SY-BATCH = 'X' OR NOT
  IF SY-BATCH = 'X'.
    MESSAGE E398(00)
    WITH 'This program does not run in background'.
  ENDIF.

*
  IF P_COUNT =  SPACE.
     PERFORM CONFIRM_MESSAGE_RTN.
     CHECK W_POPUP_ANSWER = 'J'.
  ENDIF.
*
  IF P_COUNT =  'X'.
     PERFORM DETAIL_RTN .
     EXIT.
  ENDIF.

*
  DESCRIBE TABLE ITAB  LINES W_ITAB_CNT.
*
  PERFORM HEADER_RTN.
*
  PERFORM DETAIL_RTN.

  CHECK W_DBCNT  <> 0.

  CHECK W_POPUP_ANSWER = 'J'.

  CHECK P_COUNT = SPACE.

  CHECK W_POPUP_ANSWER = 'J'.

* Download table of contents to a pc file
  PERFORM CALL_GUI_DOWNLOAD_RTN.
*

*
********************
*END-OF-SELECTION  *
********************
END-OF-SELECTION.

 


*&---------------------------------------------------------------------*
*&      Form  call_NAMETAB_GET
*&---------------------------------------------------------------------*
*       Get table definition
*----------------------------------------------------------------------*
FORM CALL_NAMETAB_GET .
*
  CALL FUNCTION 'NAMETAB_GET'
       EXPORTING
                LANGU        = P_LANGU
                TABNAME      = P_TABLE
       TABLES   NAMETAB      = ITAB
       EXCEPTIONS
         INTERNAL_ERROR            = 1
         TABLE_HAS_NO_FIELDS       = 2
         TABLE_NOT_ACTIV           = 3
         NO_TEXTS_FOUND            = 4
         OTHERS                    = 5.

*
  IF SY-SUBRC <>  0.
     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
     EXIT.
  ENDIF.
*
  DESCRIBE TABLE ITAB  LINES W_FIELD_CNT.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  HEADER_RTN
*&---------------------------------------------------------------------*
*       Edit header
*----------------------------------------------------------------------*
FORM HEADER_RTN .
*
 REFRESH I_DOWN.
 CLEAR  W_TEXT .

* In case of all fields are selected
  IF W_FIELD <> 'X'.
     LOOP AT ITAB.
        MOVE-CORRESPONDING  ITAB TO NAMETABL.
        NAMETABL-SEL_FLAG = 'X'.
        APPEND NAMETABL.
  ENDLOOP.
 ENDIF.

*Header
 PERFORM EDIT_HEADER_1.

 PERFORM EDIT_HEADER_2.

*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  DETAIL_RTN
*&---------------------------------------------------------------------*
*    Create internaltable dynamicaly and read data from table
*----------------------------------------------------------------------*
FORM DETAIL_RTN .

*  Prepare for building internal table build
   PERFORM  EDIT_DETAIL_1.

* Build internal table build
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
       EXPORTING IT_FIELDCATALOG = I_ALV_CAT
       IMPORTING EP_TABLE = D_REF .

*
  ASSIGN D_REF->* TO <F_FS1>.
*
  PERFORM TABLE_SELECT.  "read table

  IF SY-DBCNT  = 0.
     MESSAGE S398(00) WITH
         'No records selected with the search criteria'.
     EXIT.
  ENDIF.
*
  W_DBCNT  =  SY-DBCNT.
*
 IF P_COUNT = 'X'.
    MESSAGE S398(00) WITH
                    'Number of entries which meet'
                    'the selection criteria:'
                    W_DBCNT.
    EXIT.
 ENDIF.
*
  PERFORM CONFIRM_MESSAGE_RTN_2.

  CHECK W_POPUP_ANSWER = 'J'.

*Excel 2003 rows limit  check (65536)
  W_DBCNT2 =  W_DBCNT + 4.
*
  IF W_DBCNT2 >= COS_MAXLINE.
     PERFORM CONFIRM_MESSAGE_RTN_3.

     CHECK W_POPUP_ANSWER = 'J'.

  ENDIF.
*
 IF W_FIELD <> 'X'.
    W_SELECTED_FIELD_CNT  =   W_FIELD_CNT .
 ENDIF.

* Excel 2003 Columns  limit  check (256)
  IF W_SELECTED_FIELD_CNT > 256. "may not need in the future?
     PERFORM CONFIRM_MESSAGE_RTN_4.

     CHECK W_POPUP_ANSWER = 'J'.

  ENDIF.

* Get field
  PERFORM GET_FIELD.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  GET_FIELD
*&---------------------------------------------------------------------*
*       Edit each  field depending on the field type
*----------------------------------------------------------------------*
FORM GET_FIELD.
*
LOOP AT <F_FS1>    ASSIGNING <F_FS2>.
*
  CLEAR W_TEXT.

  DO W_SELECTED_FIELD_CNT   TIMES.

     ASSIGN COMPONENT SY-INDEX OF STRUCTURE <F_FS2>   TO <F_FS3>.
     IF SY-SUBRC <> 0. EXIT. ENDIF.
*
     DESCRIBE FIELD <F_FS3> TYPE L_DATAT.

*   * Numric
     IF L_DATAT = 'P'.
        IF <F_FS3>  <  0.
           PERFORM FM_CLOI_PUT_SIGN_IN_FRONT USING <F_FS3> .
           W_TEXT_BBB = W_VALUE.
        ELSE.
           W_TEXT_BBB =   <F_FS3> .
        ENDIF.
     ELSE.
         W_TEXT_BBB =   <F_FS3> .
     ENDIF.

*   DATE  20060101--> 2006/01/01
    IF L_DATAT = 'D'.
       WRITE <F_FS3>  TO  W_DATE.
       W_TEXT_BBB =    W_DATE .
    ENDIF.

*   TIME 123456  --> 12:34:56
    IF L_DATAT = 'T'.
       WRITE <F_FS3>  TO  W_TIME.
       W_TEXT_BBB =     W_TIME .
    ENDIF.

*
    CONDENSE W_TEXT_BBB  .

* Check conversion exits
  IF W_TEXT_BBB <>  SPACE.
     PERFORM FM_CONVEXIT.
  ENDIF.
*
    IF SY-INDEX = 1.
        CONCATENATE W_TEXT W_TEXT_BBB INTO W_TEXT.
        CONTINUE.
    ENDIF.
*
   CONCATENATE W_TEXT W_TEXT_BBB   INTO W_TEXT
               SEPARATED BY  W_SEPARATOR.
*
  ENDDO.
*
  CLEAR  I_DOWN.
  APPEND W_TEXT TO I_DOWN .
*
 ENDLOOP.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  CALL_GUI_DOWNLOAD_RTN
*&---------------------------------------------------------------------*
*     Download table contents
*----------------------------------------------------------------------*
FORM CALL_GUI_DOWNLOAD_RTN .
*
* Edit Pc local filename
*    Download file name will be
*      client + table name + system date + system time.
*
  CONCATENATE
              P_DIR
              SY-MANDT
              '-'
              P_TABLE
              '-'
              SY-DATUM+4(4)
              '-'
              SY-UZEIT+0(4)
              '.TXT'
              INTO W_FILENM2.
*
   LOOP AT I_DOWN  FROM 1 TO  4. "HEADER 1-4.
*
     I_DOWN2  = I_DOWN.
     APPEND  I_DOWN2.
*
   ENDLOOP.
*
   CLEAR I_DOWN2.
   APPEND  I_DOWN2.

*
  LOOP AT I_DOWN  FROM 6.   "DETAIL
*
    ADD 1 TO W_SEQ_CNT.

    IF P_TAB = 'X'.
       W_SEQ_CNT2 =   W_SEQ_CNT.
       CONCATENATE    W_SEQ_CNT2  I_DOWN  INTO I_DOWN2
                      SEPARATED BY   C_TAB.
    ELSE.
       W_SEQ_CNT2 = W_SEQ_CNT.
       CONCATENATE   W_SEQ_CNT2 I_DOWN    INTO I_DOWN2
                      SEPARATED BY   P_SEPAR.
    ENDIF.

    APPEND  I_DOWN2.

  ENDLOOP.
*
  PERFORM FM_GUI_DOWNLOAD.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&    Form  CONFIRM_MESSAGE_RTN
*&---------------------------------------------------------------------*
*     Display confirm message
*----------------------------------------------------------------------*
FORM CONFIRM_MESSAGE_RTN .
*
DATA :W_TEXT0(300) TYPE C,
      W_TEXT1(300) TYPE C,
      W_TEXT2(300) TYPE C,
      W_TEXT3(300) TYPE C,
      W_TEXT4(300) TYPE C,
      W_TEXT5(300) TYPE C.
*
    W_TEXT1+0(30) = 'Download?'.

    W_TEXT2+0(30)   = 'From table'.
    W_TEXT2+32(70)  = P_TABLE.
    W_TEXT2+105(01) = '-'.
    W_TEXT2+110(40) = W_DD02T_DDTEXT.

    CONDENSE W_TEXT2.
*
    IF P_TAB = 'X'.
       W_TEXT3+0(30) = 'Separator as Tab'.
    ELSE.
       W_TEXT3+0(30) = 'Separator as'.
       W_TEXT3+40(2) = P_SEPAR.
    ENDIF.

    CONDENSE W_TEXT3.

    W_TEXT4+0(30) = 'Continue?'.

*
    M_POPUP_TO_CONFIRM_MESSAGE
      W_TEXT1
      W_TEXT2
      W_TEXT3
      W_TEXT4
      W_TEXT5
      'Confirm'
      W_POPUP_ANSWER.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  CONFIRM_MESSAGE_RTN_2
*&---------------------------------------------------------------------*
*     Display confirm pop up  message for number of entries
*----------------------------------------------------------------------*
FORM CONFIRM_MESSAGE_RTN_2 .
*
DATA :W_TEXT0(300) TYPE C,
      W_TEXT1(300) TYPE C,
      W_TEXT2(300) TYPE C,
      W_TEXT3(300) TYPE C,
      W_TEXT4(300) TYPE C,
      W_TEXT5(300) TYPE C.
*
    W_TEXT1+0(30) = 'Number of entries:'.
    W_TEXT1+32(70) = W_DBCNT.
    CONDENSE W_TEXT1.
*
    W_TEXT2+0(30) = 'Continue?'.
    CONDENSE W_TEXT2.
*
    M_POPUP_TO_CONFIRM_MESSAGE
      W_TEXT1
      W_TEXT2
      W_TEXT3
      W_TEXT4
      W_TEXT5
      'Confirm'
      W_POPUP_ANSWER.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  CONFIRM_MESSAGE_RTN_3
*&---------------------------------------------------------------------*
* Excel 2003 rows limit  check
*   Excel can handle only 65536 rows,
*   Download data has 4 header lines,
*   so download data must be within 65532.
*(In the futrue,these codes will not be needed)
*----------------------------------------------------------------------*
FORM CONFIRM_MESSAGE_RTN_3.
*
DATA :W_TEXT0(300) TYPE C,
      W_TEXT1(300) TYPE C,
      W_TEXT2(300) TYPE C,
      W_TEXT3(300) TYPE C,
      W_TEXT4(300) TYPE C,
      W_TEXT5(300) TYPE C.
*
    W_TEXT1+0(70) = 'Number of entires is over 65,532'.
    CONDENSE W_TEXT1.
*
    W_TEXT2+0(80) =
    'Excel 2003 cannot handle 65,532 rows!'.

    CONDENSE W_TEXT2.
*
    M_POPUP_TO_CONFIRM_MESSAGE
      W_TEXT1
      W_TEXT2
      W_TEXT3
      W_TEXT4
      W_TEXT5
      'Confirm'
      W_POPUP_ANSWER.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  CONFIRM_MESSAGE_RTN_4
*&---------------------------------------------------------------------*
*  If Number of Selected field is over 256,
*  Mesaage will be displayed.
*  (In the futute,these codes  will not be needed)
*----------------------------------------------------------------------*
FORM CONFIRM_MESSAGE_RTN_4.
*
DATA :W_TEXT0(300) TYPE C,
      W_TEXT1(300) TYPE C,
      W_TEXT2(300) TYPE C,
      W_TEXT3(300) TYPE C,
      W_TEXT4(300) TYPE C,
      W_TEXT5(300) TYPE C.
*
    W_TEXT1+0(30) = 'Number of Select field'.
    W_TEXT1+32(10) = W_FIELD_CNT.
*
    CONDENSE W_TEXT1.
*
    W_TEXT2+0(80) =
    'Excel 2003 cannot handle over 256 columns!'.
*
    CONDENSE W_TEXT2.
*
    M_POPUP_TO_CONFIRM_MESSAGE
      W_TEXT1
      W_TEXT2
      W_TEXT3
      W_TEXT4
      W_TEXT5
      'Confirm'
      W_POPUP_ANSWER.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_CLOI_PUT_SIGN_IN_FRONT
*&---------------------------------------------------------------------*
*       Reverse the minus sign using fm cloi_put_sign_in_front'
*       12345-    ---> -12345
*----------------------------------------------------------------------*
FORM FM_CLOI_PUT_SIGN_IN_FRONT USING    P_NUM.
*
  CLEAR  W_VALUE.
*
  W_VALUE   =  P_NUM.

  CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING  VALUE  =  W_VALUE  .

*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  STRUCTURE_COMPONENTS
*&---------------------------------------------------------------------*
*       Calls a program  which filters table fields
*       and check  the conversion exits(00123 -> 123 )
*----------------------------------------------------------------------*
FORM STRUCTURE_COMPONENTS.
*
   NAMETABL[] = ITAB[].
*
   FREE MEMORY   ID 'XTMP'.
   EXPORT NAMETABL W_DD02T_DDTEXT  TO MEMORY ID 'XTMP'.

" Change program ID,otherwise a runtime error will occur!
   SUBMIT Y_ZSAITA_0430  AND RETURN.

   IMPORT NAMETABL FROM MEMORY ID 'XTMP'.

   ITAB[] = NAMETABL[] .
*
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  SELECT_DD02L
*&---------------------------------------------------------------------*
*    Check table exists from table DD02L
*----------------------------------------------------------------------*
FORM SELECT_DD02L.
*
  M_AUTH_CHK.
*
  CLEAR :  W_DD02T_DDTEXT.

  SELECT  B~DDTEXT
          A~TABCLASS
          A~VIEWCLASS

          INTO (W_DD02T_DDTEXT,
                W_DD02L-TABCLASS,
                W_DD02L-VIEWCLASS)

          UP TO 1 ROWS
          FROM DD02L AS A JOIN DD02T AS B
          ON A~TABNAME = B~TABNAME

       WHERE A~TABNAME    = P_TABLE
         AND A~AS4LOCAL   = 'A'
         AND A~TABCLASS  IN  ('TRANSP','CLUSTER','POOL','VIEW')
         AND B~DDLANGUAGE = P_LANGU.

  ENDSELECT.
*
  IF SY-SUBRC <>  0.
    MESSAGE E398(00)  WITH 'Table does not exist'.
  ENDIF.

*
  IF W_DD02L-TABCLASS = 'VIEW'.
     IF W_DD02L-VIEWCLASS =  'D' OR
        W_DD02L-VIEWCLASS =  'P'.
     ELSE.
        SET CURSOR FIELD 'P_TABLE'.
        MESSAGE E398(00) WITH
        'Data selection is not possible'
        'View type must be ''D'' OR  ''P'' '.
     ENDIF.
  ENDIF.

*
  CLEAR W_TEXT_TITLE.
*
  CONCATENATE  SY-MANDT '-' P_TABLE '-' W_DD02T_DDTEXT '-'
               SY-DATUM '-' SY-UZEIT
               INTO         W_TEXT_TITLE.
*
 SV_TABLE   =  P_TABLE.

*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_FREE_SELECTIONS_INIT
*&---------------------------------------------------------------------*
*   Initialize dynamic selection: Declare permitted tables
*----------------------------------------------------------------------*
FORM FM_FREE_SELECTIONS_INIT.
    M_AUTH_CHK.

*
      CALL FUNCTION 'FREE_SELECTIONS_INIT'
           EXPORTING
                EXPRESSIONS  = IT_EXPR
           IMPORTING
                SELECTION_ID = W_SELID
                EXPRESSIONS  = IT_EXPR
           TABLES
                TABLES_TAB   = IT_TABLES
           EXCEPTIONS
                OTHERS       = 1.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_FREE_SELECTIONS_DIALOG
*&---------------------------------------------------------------------*
*       Dialog for entering dynamic selection conditions
*----------------------------------------------------------------------*
FORM FM_FREE_SELECTIONS_DIALOG.

*   Display free selection dialog
    CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
         EXPORTING
              SELECTION_ID            = W_SELID
              TITLE                   = 'SELECTION'
              STATUS                  = 1
              AS_WINDOW               = 'X'

         IMPORTING
              EXPRESSIONS             = IT_EXPR
              FIELD_RANGES            = IT_RANGES
              NUMBER_OF_ACTIVE_FIELDS = W_ACTIVE
         TABLES
              FIELDS_TAB              = IT_FIELDS
         EXCEPTIONS
              OTHERS                  = 1.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  UCOMM_SEL
*&---------------------------------------------------------------------*
*       Filter record using dynamic selection
*----------------------------------------------------------------------*
FORM UCOMM_SEL.
*
  REFRESH IT_TABLES.
  IS_TABLES-PRIM_TAB = P_TABLE.
  APPEND IS_TABLES TO IT_TABLES.
  CLEAR: W_SELID.

* free selection dialog
*     Init free selection dialog
  CHECK W_SELID IS INITIAL.

*     IF W_SELID IS INITIAL.
  PERFORM FM_FREE_SELECTIONS_INIT.

  IF SY-SUBRC = 0.
    PERFORM FM_FREE_SELECTIONS_DIALOG.
  ENDIF.

ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  UCOMM_FIELD
*&---------------------------------------------------------------------*
*       Filter Fields
*----------------------------------------------------------------------*
FORM UCOMM_FIELD.
*
  CLEAR : W_FIELD,W_SELECTED_FIELD_CNT.
*
  PERFORM STRUCTURE_COMPONENTS.

  LOOP AT NAMETABL  WHERE SEL_FLAG =  'X'.

         ADD 1 TO W_SELECTED_FIELD_CNT.

  ENDLOOP.

  IF W_SELECTED_FIELD_CNT > 0.
     W_FIELD =  'X'.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  EDIT_HEADER_1
*&---------------------------------------------------------------------*
*       Edit header2-4
*----------------------------------------------------------------------*
FORM EDIT_HEADER_1.
*
 LOOP AT ITAB.

*   Selected  Fields only
    IF W_FIELD = 'X'.
       READ TABLE NAMETABL WITH  KEY  FIELDNAME =  ITAB-FIELDNAME.
       IF SY-SUBRC <> 0. CONTINUE.  ENDIF.
       IF NAMETABL-SEL_FLAG <> 'X'.  CONTINUE.  ENDIF.
    ENDIF.
*
    W_TABIX = SY-TABIX .

*   Separator
    IF P_TAB = 'X'.
       W_SEPARATOR = C_TAB.
    ELSE.
       W_SEPARATOR = P_SEPAR.
    ENDIF.

*   Second line - seqential number counting from client(mandt)
    CONCATENATE  W_TEXT_SEQ         W_TABIX
                 INTO W_TEXT_SEQ
                 SEPARATED BY       W_SEPARATOR.

*   Third line - field name
    CONCATENATE  W_TEXT_FIELDNAME   ITAB-FIELDNAME
                 INTO               W_TEXT_FIELDNAME
                 SEPARATED BY       W_SEPARATOR.

*   Fouth  line - field text
    CONCATENATE  W_TEXT_FIELDTEXT ITAB-FIELDTEXT
                 INTO W_TEXT_FIELDTEXT
                 SEPARATED BY       W_SEPARATOR.

*
 ENDLOOP.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  EDIT_HEADER_2
*&---------------------------------------------------------------------*
*      Append to internal table for download
*----------------------------------------------------------------------*
FORM EDIT_HEADER_2.

*First line
  CLEAR  I_DOWN.
  CONDENSE W_TEXT_TITLE NO-GAPS.
  APPEND W_TEXT_TITLE  TO I_DOWN .

*Second line
  CLEAR  I_DOWN.
  CONDENSE   W_TEXT_SEQ  NO-GAPS.
  APPEND W_TEXT_SEQ TO I_DOWN .

*Third line
  CLEAR  I_DOWN.
  CONDENSE W_TEXT_FIELDNAME  NO-GAPS.
  APPEND W_TEXT_FIELDNAME TO I_DOWN .

*Fourth line
  CLEAR  I_DOWN.
  CONDENSE W_TEXT_FIELDTEXT. " NO-GAPS.
  APPEND W_TEXT_FIELDTEXT TO I_DOWN .
*
  CLEAR  I_DOWN.
  APPEND I_DOWN .

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  EDIT_DETAIL_1
*&---------------------------------------------------------------------*
*     Prepare for building internal table build
*----------------------------------------------------------------------*
FORM EDIT_DETAIL_1.

*Prepare for building internal table build
 LOOP AT ITAB .

   IF W_FIELD = 'X'.
      READ TABLE NAMETABL WITH  KEY  FIELDNAME =  ITAB-FIELDNAME.
      IF SY-SUBRC <> 0. CONTINUE.  ENDIF.
      IF NAMETABL-SEL_FLAG <> 'X'.  CONTINUE.  ENDIF.
   ENDIF.

*
   CLEAR  LS_ALV_CAT.
   LS_ALV_CAT-FIELDNAME = ITAB-FIELDNAME.
   LS_ALV_CAT-REF_TABLE = P_TABLE.
   LS_ALV_CAT-REF_FIELD = ITAB-FIELDNAME.

   LS_ALV_CAT-CONVEXIT =   ITAB-CONVEXIT.

   APPEND LS_ALV_CAT TO I_ALV_CAT.
*
 ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  TABLE_SELECT
*&---------------------------------------------------------------------*
*    Select Table  with or without parameters
*----------------------------------------------------------------------*
FORM TABLE_SELECT.

* Without parameters
  IF W_ACTIVE = 0.
    SELECT * FROM (P_TABLE)
             INTO CORRESPONDING FIELDS OF TABLE <F_FS1>
             UP TO P_ROWS ROWS.
    EXIT.

  ENDIF.

* Selection with parameters
  PERFORM FM_FREE_SELECTIONS_RANGE_2.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_FREE_SELECTIONS_RANGE_2
*&---------------------------------------------------------------------*
* Dynamic Selections: Convert Format from RSDS_TRANGE ==> RSDS_TWHERE
*----------------------------------------------------------------------*
FORM FM_FREE_SELECTIONS_RANGE_2.
*
  CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_WHERE'
       EXPORTING
            FIELD_RANGES  = IT_RANGES
       IMPORTING
              WHERE_CLAUSES = IT_WHERE.
*
  CHECK SY-SUBRC = 0.
*
  READ TABLE IT_WHERE INTO IS_WHERE
       WITH KEY TABLENAME = P_TABLE.
*
  CHECK SY-SUBRC = 0.
*
  SELECT * FROM (P_TABLE)
           INTO CORRESPONDING FIELDS OF TABLE <F_FS1>
           UP TO P_ROWS ROWS
           WHERE (IS_WHERE-WHERE_TAB).
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_GUI_DOWNLOAD
*&---------------------------------------------------------------------*
*       Download using fm 'GUI_DOWNLOAD'
*----------------------------------------------------------------------*
FORM FM_GUI_DOWNLOAD.
*
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
*   BIN_FILESIZE                    =
      FILENAME                        = W_FILENM2
      FILETYPE                        = 'ASC'
*   APPEND                          = ' '
      WRITE_FIELD_SEPARATOR           = ' '
*   HEADER                          = '00'
      TRUNC_TRAILING_BLANKS           = 'X'
*   WRITE_LF                        = 'X'
*   COL_SELECT                      = ' '
*   COL_SELECT_MASK                 = ' '
*   DAT_MODE                        = ' '
*   CONFIRM_OVERWRITE               = ' '
*   NO_AUTH_CHECK                   = ' '

    "   CODEPAGE                     = '8000'
    "   "<--for japanese unicode,delete if this you don't need

*   IGNORE_CERR                     = ABAP_TRUE
*   REPLACEMENT                     = '#'
*   WRITE_BOM                       = ' '
*   TRUNC_TRAILING_BLANKS_EOL       = 'X'
* IMPORTING
*   FILELENGTH                      =
    TABLES
*      DATA_TAB                        = i_down
      DATA_TAB                        = I_DOWN2
*    DATA_TAB                       = I_DATA2
*   FIELDNAMES                      =
 EXCEPTIONS
   FILE_WRITE_ERROR                = 1
   NO_BATCH                        = 2
   GUI_REFUSE_FILETRANSFER         = 3
   INVALID_TYPE                    = 4
   NO_AUTHORITY                    = 5
   UNKNOWN_ERROR                   = 6
   HEADER_NOT_ALLOWED              = 7
   SEPARATOR_NOT_ALLOWED           = 8
   FILESIZE_NOT_ALLOWED            = 9
   HEADER_TOO_LONG                 = 10
   DP_ERROR_CREATE                 = 11
   DP_ERROR_SEND                   = 12
   DP_ERROR_WRITE                  = 13
   UNKNOWN_DP_ERROR                = 14
   ACCESS_DENIED                   = 15
   DP_OUT_OF_MEMORY                = 16
   DISK_FULL                       = 17
   DP_TIMEOUT                      = 18
   FILE_NOT_FOUND                  = 19
   DATAPROVIDER_EXCEPTION          = 20
   CONTROL_FLUSH_ERROR             = 21
   OTHERS                          = 22.
*
DATA W_TEXT100(200) TYPE C.

  IF SY-SUBRC <> 0.
     MESSAGE E398(00)  WITH  W_FILENM2
                             'Download error'.
  ELSE.
     MESSAGE S398(00) WITH 'Data downloaded successfully  to  '
                         W_FILENM2
                        'Number of records is'
                         W_DBCNT.
  ENDIF.

ENDFORM.
*
*&---------------------------------------------------------------------*
*&      Form  FM_CONVEXIT
*&---------------------------------------------------------------------*
*       Conversion exit
*----------------------------------------------------------------------*
FORM FM_CONVEXIT.
*
  READ TABLE  I_ALV_CAT INTO SV_ALV_CAT INDEX SY-INDEX.

  LOOP AT NAMETABL WHERE FIELDNAME = SV_ALV_CAT-FIELDNAME.
          EXIT.
  ENDLOOP.

  CHECK SY-SUBRC = 0.
  CHECK NAMETABL-SEL_CNV = 'X'.
*
  CHECK  SV_ALV_CAT-CONVEXIT <>   SPACE.

  PERFORM CNV_EXIT_OUTOUT USING   SV_ALV_CAT-CONVEXIT
                                  W_TEXT_BBB .
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  CNV_EXIT_OUTOUT
*&---------------------------------------------------------------------*
*    Conversion exit2
*----------------------------------------------------------------------*
FORM CNV_EXIT_OUTOUT USING   P_CONVEXIT
                             P_TEXT_BBB.
*
  DATA SV_CONEXIT(16)  TYPE C.

  CONCATENATE '==' P_CONVEXIT  INTO SV_CONEXIT.

  WRITE  P_TEXT_BBB  TO P_TEXT_BBB USING EDIT MASK SV_CONEXIT.

ENDFORM.
*
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DLPATH
*&---------------------------------------------------------------------*
*     Call fm  'TMP_GUI_BROWSE_FOR_FOLDER'
*----------------------------------------------------------------------*
FORM FRM_GET_DLPATH.
*
  CALL FUNCTION 'TMP_GUI_BROWSE_FOR_FOLDER'
       EXPORTING
            WINDOW_TITLE    = 'Select folder'
            INITIAL_FOLDER  = 'C:\TEMP\'      "<--backslash??
       IMPORTING
            SELECTED_FOLDER = P_DIR
       EXCEPTIONS
            CNTL_ERROR      = 1
            OTHERS          = 2.
*
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*
  CONCATENATE  P_DIR '\' INTO P_DIR.   "<--backslash??
*
ENDFORM.

*&---------------------------------------------------------------------*
*&   Form  CHECK_FILE
*&---------------------------------------------------------------------*
*    Check directory exist?
*----------------------------------------------------------------------*
FORM CHECK_FILE.
*
  CHECK P_COUNT = SPACE.
*
  CLEAR W_DIR_CHECK.
*
  PERFORM FM_PC_SPLIT_COMPLETE_FILENAME  USING P_DIR.

  CHECK SY-SUBRC = 0.

  IF W_PCNAME <> SPACE.
     MESSAGE S398(00) WITH
           'Enter directory only'.
     W_DIR_CHECK = 'X'.
     EXIT.
  ENDIF.
*
  DATA L_RETURN(1)   TYPE C.

  CALL FUNCTION 'WS_QUERY'
    EXPORTING
      FILENAME             = P_DIR
      QUERY                = 'DE'  "'DE' FILENAME
    IMPORTING
      RETURN               = L_RETURN  "RETURN = '0' No '1' Yes
    EXCEPTIONS
      INV_QUERY            = 1
      NO_BATCH             = 2
      FRONTEND_ERROR       = 3
      OTHERS               = 4.
*
  CASE SY-SUBRC.
    WHEN '0'.
        IF L_RETURN = '0'.
           MESSAGE S398(00) WITH
                'Directory does not exist on the PC'.
           W_DIR_CHECK = 'X'.
           EXIT.
       ENDIF.
   WHEN OTHERS.
  ENDCASE.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_PC_SPLIT_COMPLETE_FILENAME
*&---------------------------------------------------------------------*
* Divides a complete PC file name into disk drive, path, file and exten
*----------------------------------------------------------------------*
FORM FM_PC_SPLIT_COMPLETE_FILENAME  USING P_FILENM.
*
W_COMPLETE_FILENAME = P_FILENM.

*
  CALL FUNCTION 'PC_SPLIT_COMPLETE_FILENAME'
    EXPORTING
      COMPLETE_FILENAME       = W_COMPLETE_FILENAME
*     CHECK_DOS_FORMAT        =
   IMPORTING
*     DRIVE                   =
*     EXTENSION               =
      NAME                    =  W_PCNAME
*     NAME_WITH_EXT           =
      PATH                    =  W_PCFILE-PATH
   EXCEPTIONS
     INVALID_DRIVE           = 1
     INVALID_EXTENSION       = 2
     INVALID_NAME            = 3
     INVALID_PATH            = 4
     OTHERS                  = 5.
*
  IF SY-SUBRC <> 0.
     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*
ENDFORM.

*end of program

*=============================================*
second program.

 


[Text Symbols]]
I001     Select fields for table
I002     Chk
I003     Seq
I004     Field Name
I005     Text
I010     Cnv
I011     Cnversion exits

R        Filter table Fields 


*=====================================================================*
* Allow my poor English, English comments on this program are not good .
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Created  on  2007.02.15   by Y.SAITA  TOKYO,JAPAN
*&---------------------------------------------------------------------*
* You can do anything to this program without my permission.
* (modify, fix bugs ,sell,republish,etc)
* This program is a use-at-your-own-risk-basis-program,
* So use at your own risk.
*
* In no event will the author be liable for indirect, special,
* Incidental, or consequental damages (if any) arising out of
* the use of this program. The person, who implements this program,
* have to be sure that such damage does not happen.
*----------------------------------------------------------------------*
* [Description]
*  This program is called from another program and
*  filters fields by checking field name and check conversion exit.
*
* [NOTE]
* Create a gui status (LIST) with
*   PICK(F2)   Jump to the trn 'SE11'
*   COPY       Copy selected fields and returns to the calling program
*   RETURN     Returns to the callingr program
*              (Does not Copy selected fields)
*
*   ALLF       Select   all fields
*   DELA       Deselect all fields

*   ALLF_CNV   Select   all conversion exitsf(CNV)
*   DELA_CNV   Deselect all conversion exitsf(CNV)
*
* [Security Notes]
*  If you want that only you can run this program,
*  You can use macro M_AUTH_CHK,M_AUTH_CHK2.
*  If you don't them,delete them.
*
*  Any feedback will be welcome. E-mail is This e-mail address is being protected from spam bots, you need JavaScript enabled to view it
*=============================================================*
*  For more information,see the attached PDF.file
*=============================================================*
*
REPORT Y_ZSAITA_0430
       NO STANDARD PAGE HEADING
       LINE-SIZE  170
       LINE-COUNT 300.

*
DATA BEGIN OF NAMETABL OCCURS 30.
       INCLUDE STRUCTURE DNTAB.
       DATA    SEL_FLAG(1). "Selected?
       DATA    SEL_CNV(1).  "CNV_EXIT
   DATA END OF NAMETABL.
*

DATA W_CURSORFIELD(60)    TYPE C.

DATA W_SELECTED_FIELD_CNT TYPE I.
DATA W_TEXT1(200)         TYPE C.

DATA W_DD02T_DDTEXT       LIKE DD02T-DDTEXT.

DATA W_POPUP_ANSWER(1)    TYPE C.
DATA W_CHKBOX(1)          TYPE C.
DATA W_CHKBOX_2(1)        TYPE C.  "CNV_EXIT

DATA  W_N                 TYPE I.

DATA W_NAMETABL_INDEX LIKE SY-INDEX.

*
DEFINE M_AUTH_CHK.
*
 IF SY-UNAME = '????'.
 ELSE.
    MESSAGE E398(00) WITH
      'You do not have authorization'.
    EXIT.
 ENDIF.
END-OF-DEFINITION.

*
DEFINE M_AUTH_CHK2.
*
 IF SY-DATUM > '20070401'.
   MESSAGE E398(00) WITH
   'You do not have authorization'.

 ENDIF.
*
END-OF-DEFINITION.

*
********************
*INITIALIZATION    *
********************
INITIALIZATION.
*
  M_AUTH_CHK.

  IMPORT NAMETABL  W_DD02T_DDTEXT  FROM MEMORY ID 'XTMP'.

********************
*START-OF-SELECTION*
********************
START-OF-SELECTION.

*
  M_AUTH_CHK.

  SET PF-STATUS 'LIST'. "Don't forget to create this gui status.
*
  PERFORM FM_NAMETABL_WRITE.
*

END-OF-SELECTION.
*
 FREE MEMORY   ID 'XTMP'.

**********************
*TOP-OF-PAGE         *
**********************
*
TOP-OF-PAGE.

  M_AUTH_CHK.

  WRITE : /1   TEXT-001.

  FORMAT  COLOR  3.
  WRITE : 28   NAMETABL-TABNAME.
  FORMAT  COLOR  OFF.
  HIDE NAMETABL-TABNAME.

  WRITE : 80  W_DD02T_DDTEXT.

  ULINE.

  WRITE: /1  TEXT-002.  "CHECK
  WRITE:  6  TEXT-003.  "Sequential number
  WRITE:  12 TEXT-004.  "Field Name
  WRITE:  44 TEXT-005.  "Text
*

  WRITE: /90  TEXT-010.  "CHECK-Cnv
  WRITE:  95  TEXT-011.  "Cnversion exits
*
  ULINE.
*
  SKIP.
*
******************************
*AT USER-COMMAND             *
******************************
AT USER-COMMAND.
*
 CASE SY-UCOMM.

  WHEN 'ENTR'.
        PERFORM FM_UCOMM_ENTR.

  WHEN 'COPY'.
        PERFORM FM_UCOMM_COPY.

  WHEN 'RETN'.
        LEAVE.

  WHEN 'ALLF'.
        PERFORM FM_UCOMM_ALLF.

  WHEN 'DELA'.
        PERFORM FM_UCOMM_DELA.

  WHEN 'ALLF_CNV'.
        PERFORM FM_UCOMM_ALLF_CNV.

  WHEN 'DELA_CNV'.
        PERFORM FM_UCOMM_DELA_CNV.

 ENDCASE.


******************************
*AT LINE-SELECTION           *
******************************
AT LINE-SELECTION.
*
  M_AUTH_CHK.

  GET CURSOR FIELD W_CURSORFIELD.
*
  IF W_CURSORFIELD <> 'NAMETABL-TABNAME'.
     SET CURSOR  LINE 1  OFFSET  27.

     MESSAGE S398(00)  WITH
     'Please position the cursor on a table name'.
     EXIT.
  ENDIF.

* Jump to the trx 'se11'
  PERFORM  FM_RS_DD_DEF_SHOW.
*
  CLEAR NAMETABL-TABNAME.

 

*&---------------------------------------------------------------------*
*&      Form  FM_UCOMM_ENTR
*&---------------------------------------------------------------------*
*       ENTER
*----------------------------------------------------------------------*
FORM FM_UCOMM_ENTR.
*
   DO.

     READ LINE SY-INDEX.
     IF SY-SUBRC <>  0. EXIT. ENDIF.

     CHECK SY-INDEX  > 5.
     MODIFY LINE SY-INDEX.

   ENDDO.

*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_UCOMM_COPY
*&---------------------------------------------------------------------*
*      Copy the fields
*----------------------------------------------------------------------*
FORM FM_UCOMM_COPY.
     M_AUTH_CHK.
*
  LOOP AT NAMETABL.
*
    PERFORM READ_LINE.  "read lists
*
  ENDLOOP.

*
   CLEAR W_SELECTED_FIELD_CNT.

   LOOP AT NAMETABL  WHERE SEL_FLAG =  'X'.

       ADD 1 TO W_SELECTED_FIELD_CNT.

   ENDLOOP.
*
 CLEAR W_TEXT1.
 W_TEXT1+0(30)    = 'Number of Selected field is'.
 W_TEXT1+32(6)    = W_SELECTED_FIELD_CNT.
 CONDENSE W_TEXT1.
*
   PERFORM POPUP_TO_CONFIRM USING
             W_TEXT1
             'Returns to the callingr program?'
             'Confirm'
             W_POPUP_ANSWER.
*
  IF W_POPUP_ANSWER <> 'J'.     EXIT.  ENDIF.
*
  EXPORT NAMETABL  TO MEMORY ID 'XTMP'.

  LEAVE.

*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  READ_LINE
*&---------------------------------------------------------------------*
*       Read lines
*----------------------------------------------------------------------*
FORM READ_LINE.
*
  W_N  =   SY-TABIX   +   6.

  CLEAR : W_CHKBOX,W_CHKBOX_2.
*
  READ LINE  W_N  FIELD VALUE
             NAMETABL-SEL_FLAG INTO W_CHKBOX     "CHEKC BOX
             NAMETABL-SEL_CNV  INTO W_CHKBOX_2.  "CNV_EXIT

  CHECK SY-SUBRC = 0.

  NAMETABL-SEL_FLAG   = W_CHKBOX.
  NAMETABL-SEL_CNV    = W_CHKBOX_2.

*
  MODIFY  NAMETABL TRANSPORTING SEL_FLAG  SEL_CNV .
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_UCOMM_ALLF
*&---------------------------------------------------------------------*
*       Select all for fields
*----------------------------------------------------------------------*
FORM FM_UCOMM_ALLF.
*
  DO.
*
     READ LINE SY-INDEX.
     IF SY-SUBRC NE 0. EXIT. ENDIF.
     CHECK SY-INDEX  > 6.

     SY-LISEL(1) = 'X'.
     MODIFY LINE SY-INDEX.
*
   ENDDO.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_UCOMM_DELA
*&---------------------------------------------------------------------*
*       Deselect all for fields
*----------------------------------------------------------------------*
FORM FM_UCOMM_DELA.
*
  DO.
*
     READ LINE SY-INDEX.
     IF SY-SUBRC <> 0. EXIT. ENDIF.
     CHECK SY-INDEX  > 6.
     SY-LISEL(1) = ' '.
     MODIFY LINE SY-INDEX.
*
  ENDDO.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_UCOMM_ALLF_CNV
*&---------------------------------------------------------------------*
*       Select all for conversion exits
*----------------------------------------------------------------------*
FORM FM_UCOMM_ALLF_CNV.
*
  DO.
*
     READ LINE SY-INDEX.
     IF SY-SUBRC NE 0. EXIT. ENDIF.
     CHECK SY-INDEX  > 6.

     W_NAMETABL_INDEX = SY-INDEX - 6.

     READ TABLE NAMETABL  INDEX W_NAMETABL_INDEX.

     CHECK  NAMETABL-CONVEXIT <> SPACE.

     SY-LISEL+89(1) = 'X'.
     MODIFY LINE SY-INDEX.
*
   ENDDO.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_UCOMM_DELA_CNV
*&---------------------------------------------------------------------*
*       Deselect all for conversion exits
*----------------------------------------------------------------------*
FORM FM_UCOMM_DELA_CNV.
*
  DO.
*
     READ LINE SY-INDEX.
     IF SY-SUBRC <> 0. EXIT. ENDIF.
     CHECK SY-INDEX  > 6.

     W_NAMETABL_INDEX = SY-INDEX - 6.
     READ TABLE NAMETABL  INDEX W_NAMETABL_INDEX.
     CHECK  NAMETABL-CONVEXIT <> SPACE.
*
     SY-LISEL+89(1) = ' '.
     MODIFY LINE SY-INDEX.
*
  ENDDO.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_NAMETABL_WRITE
*&---------------------------------------------------------------------*
*       Display table field and conversion exit
*----------------------------------------------------------------------*
FORM FM_NAMETABL_WRITE.
*
  M_AUTH_CHK.
*
  READ TABLE NAMETABL INDEX 1.

*
  LOOP AT NAMETABL.

       WRITE: /   NAMETABL-SEL_FLAG INPUT ON AS CHECKBOX,
               6  NAMETABL-POSITION,

              12  NAMETABL-FIELDNAME,
              44  NAMETABL-FIELDTEXT+0(40).
*
      IF   NAMETABL-CONVEXIT <> SPACE.
           WRITE:  90  NAMETABL-SEL_CNV INPUT ON AS CHECKBOX,
                   95  NAMETABL-CONVEXIT.
      ENDIF.
*
       HIDE:  NAMETABL.
*
  ENDLOOP.
*
ENDFORM.

****************************************************
* Call 'POPUP_TO_CONFIRM_STEP'
****************************************************
FORM POPUP_TO_CONFIRM USING  TEXT_A TEXT_B TEXT_C  ANSWER.
*
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
       EXPORTING
            DEFAULTOPTION = 'Y'
            TEXTLINE1     = TEXT_A
            TEXTLINE2     = TEXT_B
            TITEL         = TEXT_C
       IMPORTING
            ANSWER        = ANSWER
       EXCEPTIONS
            OTHERS        = 1.
*
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_RS_DD_DEF_SHOW
*&---------------------------------------------------------------------*
*       CALL FM 'RS_DD_DEF_SHOW'  jump to the trx 'SE11'
*----------------------------------------------------------------