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

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'
*----------------------------------------------------------------------*
FORM FM_RS_DD_DEF_SHOW.
  M_AUTH_CHK.

*
  CALL FUNCTION 'RS_DD_DEF_SHOW'
       EXPORTING
         OBJNAME = NAMETABL-TABNAME.
*
ENDFORM.


*END-OF-PROGRAM*

 


Last Updated ( Monday, 05 March 2007 )
 
< Prev   Next >

Google Search

Google Ads

Shared Bottom Border