FM : FILE_GET_NAME_USING_PATH

Hi,
I am using the FM : FILE_GET_NAME_USING_PATH
can anyone help in identifying the scnario where it can give a dump.
When going through a few sample codes.I have observed that many developers avoid using the standard Mssg ID and Msg description which the SAP provides..when a sy-subrc check fails so I was a bit confused as why the standard message has been commented and instead a new message has been given.
By default we get :
if sy-subrc ne 0.
MESSAGE MSGID sy-msgno ...
endif.
but most of the time it is commented and replaced with
message text type 'E'.
can anyone throw soem light on this.
Thanks and reagrds,
Avinash.

Hai Avinash
F.M 'WS_FILENAME_GET' was abosolete in Higher versions
replace 'WS_FILENAME_GET' with Class CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(Method)
Check with the following Code
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME.     "local file with contracts
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
Begin of delete by Neelimab on 03/11/2005.
  CALL FUNCTION 'WS_FILENAME_GET'
      EXPORTING
           DEF_FILENAME     = ''
           DEF_PATH         = 'C:\'
           MASK             = ',..'
           TITLE            = 'Find File'
      IMPORTING
           FILENAME         = P_FILE
      EXCEPTIONS
           INV_WINSYS       = 1
           NO_BATCH         = 2
           SELECTION_CANCEL = 3
           SELECTION_ERROR  = 4
           OTHERS           = 5.
End   of delete by Neelimab on 03/11/2005.
Begin of Add by Neelimab on 03/11/2005.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
   EXPORTING
     WINDOW_TITLE            = 'Find File'
     DEFAULT_EXTENSION       = 'C:\'
     DEFAULT_FILENAME        = ''
     FILE_FILTER             = ',..'
   INITIAL_DIRECTORY       =
   MULTISELECTION          =
   WITH_ENCODING           =
  CHANGING
    FILE_TABLE               = I_FILETABLE
    RC                       = V_RC
   USER_ACTION             =
   FILE_ENCODING           =
  EXCEPTIONS
    FILE_OPEN_DIALOG_FAILED = 1
    CNTL_ERROR              = 2
    ERROR_NO_GUI            = 3
    NOT_SUPPORTED_BY_GUI    = 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.
READ TABLE I_FILETABLE INTO P_FILE INDEX 1.
End   of Add by Neelimab on 03/11/2005.
Thanks & Regards
Sreenivasulu P
Message was edited by: Sreenivasulu Ponnadi

Similar Messages

  • Help in FM 'FILE_GET_NAME_USING_PATH'.

    Hi,
    I have to upload data in a flat file from the internal table to the application server.I am trying to use the FM 'FILE_GET_NAME_USING_PATH' to get the phiysical file path for upload into the application server.The FM is giving an error that 'definition of path is missing'. I checked in FILE transaction, the logical path exists there.I don't know where I am going wrong.
    Please help me understand the functionality of the FM nad how it works.
    Thanks,
    Sandeep.

    HI,
    give the logical file path, file name,you will get physical file path in the importing pareameter.FILE_NAME_WITH_PATH
    CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
      EXPORTING
        logical_path                     = logical_path
        file_name                        = file_name
    IMPORTING
       FILE_NAME_WITH_PATH              = FILE_NAME_WITH_PATH
    EXCEPTIONS
      PATH_NOT_FOUND                   = 1
      MISSING_PARAMETER                = 2
      OPERATING_SYSTEM_NOT_FOUND       = 3
      FILE_SYSTEM_NOT_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.
    ENDIF.
    Edited by: venu gopal on Sep 29, 2008 10:12 AM

  • How to see the file at the application server

    HI TO ALL SDNERS ,
                                 THIS IS MY CODE WHERE TO CHECK THE DOWNLOADED FILE AT THE APPLICATION SERVER.IN TCODE AL11 I HAVE SEEN THERE IS NO FILE GETTING CREATED.WHEN TRANSFERRING THE SY-SUBRC VALUE IS ZERO.
    Program Name        : ZME11_BDC.
    Title               : PURCHASE INFORMATION RECORD LOAD PROGRAM
    Program Objective   : THIS PROGRAM READS IN THE PURCHASE
                          INFORMATION FILE. IT CREATES A BDC SESSION TO
                          USE TO LOAD THE PURCHASE INFORMATION RECORDS
                          INTO SAP using the ME11 Transaction.
    REPORT  ZME11_BDC no standard page heading MESSAGE-ID ZHNC line-size 55.
                constants declaration
    constants: c_x value 'X',
               c_sess type apqi-groupid value 'zcustomer',
               c_xd01 type tstc-tcode value 'ME11'.
                  DECLARING VARIABLES
    DATA: V_MSG(255),
          V_ERREC TYPE I,"NO OF FAILED RECORDS
          V_LINES."NO OF RECORDS
           FLAG DECLARATIONS
    DATA: FG_DATA_EXIST VALUE 'X',"CHECK FOR DATA
          FG_SESSION_OPEN VALUE ''.
          STRUCTURES AND INTERNAL TABLE DECLARATIONS
    TYPES :BEGIN OF TY_PIR,
             LIFNR TYPE EINA-LIFNR,
             MATNR TYPE EINA-MATNR,
             EKORG TYPE EINE-EKORG,
             WERKS TYPE EINE-WERKS,
             VERKF TYPE EINA-VERKF,"sales person
             TELF1 TYPE EINA-TELF1,"telephone
             URZLA TYPE EINA-URZLA,"country
             REGIO TYPE EINA-REGIO,"region
             APLFZ(5),"plan deleivery time
             EKGRP TYPE EINE-EKGRP,"purchase group
             NORBM(13),
             NETPR(13),
         END OF TY_PIR.
    DATA : IT_PIR TYPE TABLE OF TY_PIR,
           WA_PIR LIKE LINE OF IT_PIR.
    DATA: BEGIN OF IT_BDCDATA.
    INCLUDE STRUCTURE BDCDATA.
    DATA END OF IT_BDCDATA.
    DATA : BEGIN OF IT_BDCMSG.
    INCLUDE STRUCTURE BDCMSGCOLL.
    DATA END OF IT_BDCMSG.
                      SELECTION SCREEN
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    PARAMETER : FNAME TYPE RLGRAP-FILENAME.
    SELECTION-SCREEN END OF BLOCK B1.
                           AT SELECTION ON VALUE REQUEST
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR FNAME.
    CALL FUNCTION 'F4_FILENAME'
    EXPORTING
       PROGRAM_NAME        = SYST-CPROG
       DYNPRO_NUMBER       = SYST-DYNNR
       FIELD_NAME          = ' '
    IMPORTING
       FILE_NAME           = FNAME.
                             START OF SELECTION
    START-OF-SELECTION.
    PERFORM F_GET_DATA USING FNAME
                       CHANGING IT_PIR.
    PERFORM F_GENERATE_DATASET USING FNAME
                               CHANGING IT_PIR WA_PIR.
    *&      Form  F_GET_DATA
          text
         -->P_V_FNAME  text
         <--P_IT_PIR  text
    FORM F_GET_DATA  USING    P_FNAME LIKE FNAME
                     CHANGING P_IT_PIR LIKE IT_PIR.
    DATA: LV_FILE TYPE STRING.
    LV_FILE  = FNAME.
    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        FILENAME                      = LV_FILE
       FILETYPE                      = 'DAT'
      HAS_FIELD_SEPARATOR           = 'X'
      HEADER_LENGTH                 = 0
      READ_BY_LINE                  = 'X'
      DAT_MODE                      = ' '
      CODEPAGE                      = ' '
      IGNORE_CERR                   = ABAP_TRUE
      REPLACEMENT                   = '#'
      CHECK_BOM                     = ' '
    IMPORTING
      FILELENGTH                    =
      HEADER                        =
      TABLES
        DATA_TAB                      = P_IT_PIR
    EXCEPTIONS
       FILE_OPEN_ERROR               = 1
       FILE_READ_ERROR               = 2
       NO_BATCH                      = 3
       GUI_REFUSE_FILETRANSFER       = 4
       INVALID_TYPE                  = 5
       NO_AUTHORITY                  = 6
       UNKNOWN_ERROR                 = 7
       BAD_DATA_FORMAT               = 8
       HEADER_NOT_ALLOWED            = 9
       SEPARATOR_NOT_ALLOWED         = 10
       HEADER_TOO_LONG               = 11
       UNKNOWN_DP_ERROR              = 12
       ACCESS_DENIED                 = 13
       DP_OUT_OF_MEMORY              = 14
       DISK_FULL                     = 15
       DP_TIMEOUT                    = 16
       OTHERS                        = 17
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    IF P_IT_PIR IS INITIAL.
    FG_DATA_EXIST = ''.
    ENDIF.
    ENDFORM.                    " F_GET_DATA
    *&      Form  F_GENERATE_DATASET
          text
         -->P_V_FNAME  text
         <--P_IT_PIR  text
    FORM F_GENERATE_DATASET  USING    P_V_FNAME LIKE FNAME
                             CHANGING P_IT_PIR LIKE IT_PIR
                                      P_WA_PIR LIKE WA_PIR.
    MESSAGE I001(ZHNC).
    *OPENING FILE AT THE APPLICATION SERVER FOR WRITING
    OPEN DATASET FNAME FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
    IF SY-SUBRC  EQ 0.
    MESSAGE I002(ZHNC).
    LOOP AT P_IT_PIR INTO P_WA_PIR.
    SPLIT P_WA_PIR AT '*' INTO P_WA_PIR-LIFNR
                               P_WA_PIR-MATNR
                               P_WA_PIR-EKORG
                               P_WA_PIR-WERKS
                               P_WA_PIR-VERKF
                               P_WA_PIR-TELF1
                               P_WA_PIR-URZLA
                               P_WA_PIR-REGIO
                               P_WA_PIR-APLFZ
                               P_WA_PIR-EKGRP
                               P_WA_PIR-NORBM.
    *TRANSFER THE FILE FROM INTERNAL TABLE TO APPLICATION SERVER
    MESSAGE I003(ZHNC).
    TRANSFER P_WA_PIR TO FNAME.
    ENDLOOP.
    *CLOSING THE FILE AT THE APPLICATION SERVER
    CLOSE DATASET FNAME.
    ENDIF.

    Hello,
    I made a similar program. You can have a look at it.
    *&      Form  write_to_app_server
          text
    -->  p1        text
    <--  p2        text
    FORM write_to_app_server.
    To get filename
      PERFORM get_filename.
    To write into the application server
      OPEN DATASET g_filename_with_path FOR OUTPUT IN TEXT MODE.
      IF sy-subrc = 0.
        LOOP AT <l_table> INTO <l_line>.
          TRANSFER <l_line> TO g_filename_with_path.
        ENDLOOP.
        CLOSE DATASET g_filename_with_path.
      ELSE.
        CLOSE DATASET g_filename_with_path.
      ENDIF.
    To send mail
      PERFORM send_mail.
    ENDFORM.                    " write_to_app_server
    *&      Form  get_filename
          text
    -->  p1        text
    <--  p2        text
    FORM get_filename.
      DATA : l_log_path TYPE  filepath-pathintern
                          VALUE 'Y28M_DOWNLOADS_BACKGROUND' .
      CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
           EXPORTING
                client                     = sy-mandt
                logical_path               = l_log_path
                operating_system           = sy-opsys
                file_name                  = p_fname
           IMPORTING
                file_name_with_path        = g_filename_with_path
           EXCEPTIONS
                path_not_found             = 1
                missing_parameter          = 2
                operating_system_not_found = 3
                file_system_not_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.
      ENDIF.
    ENDFORM.                    " get_filename
    You may find it useful.
    Regards,
    Karuna.

  • How to upload a file in application server to an internal table

    Hi,
          I am asked to upload a file from application server to internal table. Can you please suggest me the ways to do it or the function module which helps to browse the application server file names.
      I have done a program. But its giving problem in searching the files from application server. I am pasting my code for ur review. Please tell me which part i have to correct or suggest me some other ways to do it.
    *& Report  ZUPLOAD1
    REPORT  ZUPLOAD1.
    type-pools: truxs.
    parameters: p_upl_ps radiobutton group g1 default 'X', "upload from pres. server
                 p_path type rlgrap-filename, 
                 p_upl_as radiobutton group g1,   "upload from appln server
                 <b>p_dir LIKE filepath-pathintern DEFAULT 'Y_ABAP', 
                 p_file LIKE filepath-pathintern lower case,</b>      
                 p_test as checkbox.
    constants: c_x value 'X',
               c_tab type c value cl_abap_char_utilities=>horizontal_tab.
    types: ty_data(1000) type c.    "structure to hold legacy data
    data: i_data type standard table of ty_data. "internal table of ty_data
    types: begin of stritab,
          land1 type v_t604-land1,  "structure of legacy file.
          stawn type v_t604-stawn,
          bemeh type v_t604-bemeh,
          impma type v_t604-impma,
          minol type v_t604-minol,
          end of stritab.
    data: gi_itab type standard table of stritab, "internal table of legacy file
          gw_itab type stritab.  "work area
    data: i_raw type truxs_t_text_data,
          v_fullpath type string.
    at selection-screen on value-request for p_path.
    if p_upl_ps = c_x. "if presentation server is selected
    perform get_file.
    else.            "if application server is selected
    perform set_file_path.      
    perform upload_from_server.
    perform split_data.
    endif.
    form get_file.
    CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      PROGRAM_NAME        = SYST-CPROG
      DYNPRO_NUMBER       = SYST-DYNNR
      FIELD_NAME          = ' '
    IMPORTING
       FILE_NAME           = p_path.     "getting the file name of pres server
    CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
      EXPORTING
      I_FIELD_SEPERATOR          =
        I_LINE_HEADER              = 'X'              "converting excel to sap and filling in
        I_TAB_RAW_DATA             = i_raw      "internal table
        I_FILENAME                 = p_path
      TABLES
        I_TAB_CONVERTED_DATA       = gi_itab
    EXCEPTIONS
       CONVERSION_FAILED          = 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.
    endform.
    form set_file_path.                 "Getting the file path of application server
    data: lv_file type p_file.
          lv_file = p_file.
          CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
            EXPORTING
            CLIENT                           = SY-MANDT
              LOGICAL_PATH                     = p_dir
            OPERATING_SYSTEM                 = SY-OPSYS
            PARAMETER_1                      = ' '
            PARAMETER_2                      = ' '
            PARAMETER_3                      = ' '
            USE_BUFFER                       = ' '
              FILE_NAME                        = lv_file
            USE_PRESENTATION_SERVER          = ' '
            ELEMINATE_BLANKS                 = 'X'
           IMPORTING
             FILE_NAME_WITH_PATH              = v_fullpath
           EXCEPTIONS
             PATH_NOT_FOUND                   = 1
             MISSING_PARAMETER                = 2
             OPERATING_SYSTEM_NOT_FOUND       = 3
             FILE_SYSTEM_NOT_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.
          ENDIF.
    endform.
    form upload_from_server.
    data: lv_msg type string,
          lw_data type ty_data.
    open dataset v_fullpath for input message lv_msg in text mode encoding default.
    if sy-subrc <> 0.
    message lv_msg type 'i'.
    stop.
    endif.
    do.
    read dataset v_fullpath into lw_data.
    if sy-subrc <> 0.
    write:/5 'Error in processign data set'.
    exit.
    endif.
    append lw_data to i_data.
    enddo.
    close dataset v_fullpath.
    if sy-subrc <> 0.
    write: /5 'Error closing dataset'.
    endif.
    endform.
    form split_data.
    data: lw_data type ty_data.
    data: lw_itab type stritab.
    data: begin of ty_itab,
          land1 type v_t604-land1,
          stawn type v_t604-stawn,
          bemeh type v_t604-bemeh,
          impma type v_t604-impma,
          minol type v_t604-minol,
          end of ty_itab.
    loop at i_data into lw_data.
    split lw_data at c_tab into
          ty_itab-land1
          ty_itab-stawn
          ty_itab-bemeh
          ty_itab-impma
          ty_itab-minol.
    lw_itab-land1 = ty_itab-land1.
    lw_itab-stawn = ty_itab-stawn.
    lw_itab-bemeh = ty_itab-bemeh.
    lw_itab-impma = ty_itab-impma.
    lw_itab-minol = ty_itab-minol.
    append lw_itab to gi_itab.
    endloop.
    endform.
    start-of-selection.
    loop at gi_itab into gw_itab.
    write: /5 'COUNTRY', 'IMPORT CODE', 'SUP UNIT', 'FIRST UOM', 'SECOND UOM',
           /5 gw_itab-land1, gw_itab-stawn,gw_itab-bemeh,gw_itab-impma,gw_itab-minol.
    endloop.
    end-of-selection.
    I hope problem must be in p_dir and p_file which are in bold.. Kindly help me out. Thanks in advance.

    see the following ex:
    *&      Form  SUB_GET_FILEPATH
          text
    -->  p1        text
    <--  p2        text
    FORM SUB_GET_FILEPATH .
        GFILE = 'D:\SAP_INT\INBOUND\INBOX'.  "Path
    ENDFORM.                    " SUB_GET_FILEPATH
    *&      Form  SUB_GET_FILE
          text
    -->  p1        text
    <--  p2        text
    FORM SUB_GET_FILE .
      DATA: P_FDIR(200) TYPE C.
      DATA: IT_FILEDIR1 TYPE STANDARD TABLE OF TY_FILEDIR WITH HEADER LINE.
      P_FDIR = GFILE.
      CALL FUNCTION 'RZL_READ_DIR_LOCAL'
        EXPORTING
          NAME     = P_FDIR
        TABLES
          FILE_TBL = IT_FILEDIR.
      REFRESH : IT_FILEDIR1.
      LOOP AT IT_FILEDIR.
        IF IT_FILEDIR-NAME(4) = 'ZINC' OR IT_FILEDIR-NAME(4) = 'zinc'.
          MOVE IT_FILEDIR-NAME TO IT_FILEDIR1-NAME.
          APPEND IT_FILEDIR1.
        ENDIF.
      ENDLOOP.
      IF IT_FILEDIR1[] IS INITIAL.
        STOP.
      ENDIF.
      LOOP AT IT_FILEDIR1.
        REFRESH: I_TAB.
        CLEAR: I_TAB.
        NAME = IT_FILEDIR1-NAME.
        CONCATENATE: GFILE '\' NAME INTO G_FILE.
        OPEN DATASET G_FILE FOR INPUT IN TEXT MODE
                                         ENCODING DEFAULT
                                         IGNORING CONVERSION ERRORS.
        IF SY-SUBRC EQ 0.
          CONCATENATE 'FILENAME  : ' G_FILE INTO I_MSG1.
          APPEND I_MSG1.
          DO.
            READ DATASET G_FILE INTO RECORD.
            IF SY-SUBRC = 0.
              SPLIT RECORD AT ',' INTO I_TAB-BUKRS  I_TAB-EBELN
                  I_TAB-BLDAT  I_TAB-XBLNR I_TAB-LIFNR I_TAB-AMOUNT
                  I_TAB-CURR  I_TAB-BUSAREA
                  I_TAB-BKTXT I_TAB-DMBTR I_TAB-MENGE I_TAB-SRNO.
              MOVE-CORRESPONDING I_TAB TO I_TAB1.
            ELSE.
              EXIT.
            ENDIF.
            APPEND I_TAB1.
            CLEAR: I_TAB, I_TAB1.
          ENDDO.
        ENDIF.
        CLOSE DATASET G_FILE.

  • Material Cost estimate modification

    Hi Experts
    I want to modified this report and add cost estimate value from MBEW (field is STPRS) for each material  to this report. I have used the table MBEW but unable to locate where to start.
    Can anyone have a look and comment on this report
    REPORT  command_extract                    .
    *CLASS cl_gui_control DEFINITION LOAD.
    *CLASS cl_gui_frontend_services DEFINITION LOAD.
    Tables
    TABLES:
      kna1,
      knb1,
      knvv,
      mara,
      mast,                                       "JPC20061107
      marc,
      makt,
      sscrfields.
    CONSTANTS: BEGIN OF gc_status,
                 acc  TYPE zcrstat1 VALUE ' ACC',
                 hol  TYPE zcrstat1 VALUE ' HOL',
                 sto  TYPE zcrstat1 VALUE ' STO',
                 ok   TYPE zcrstat1 VALUE '  OK',
                 hold TYPE zcrstat1 VALUE 'HOLD',
               END OF gc_status.
    CONSTANTS: BEGIN OF gc_reason,
                 000 TYPE zreason VALUE '000',
                 001 TYPE zreason VALUE '001',
                 002 TYPE zreason VALUE '002',
                 003 TYPE zreason VALUE '003',
                 004 TYPE zreason VALUE '004',
                 005 TYPE zreason VALUE '005',
                 006 TYPE zreason VALUE '006',
                 007 TYPE zreason VALUE '007',
                 008 TYPE zreason VALUE '008',
                 010 TYPE zreason VALUE '010',
                 011 TYPE zreason VALUE '011',
                 021 TYPE zreason VALUE '021',
                 022 TYPE zreason VALUE '022',
                 023 TYPE zreason VALUE '023',
                 024 TYPE zreason VALUE '024',
                 025 TYPE zreason VALUE '025',
                 026 TYPE zreason VALUE '026',
                 999 TYPE zreason VALUE '999',
               END OF gc_reason.
    TYPES: BEGIN OF ty_kna1_fields,
             kunnr TYPE kna1-kunnr,
             sperr TYPE kna1-sperr,
             aufsd TYPE kna1-aufsd,
             lifsd TYPE kna1-lifsd,
             faksd TYPE kna1-faksd,
             loevm TYPE kna1-loevm,
           END OF ty_kna1_fields.
    TYPES: BEGIN OF ty_knb1_fields,
             kunnr TYPE knb1-kunnr,
             bukrs TYPE knb1-bukrs,
             sperr TYPE knb1-sperr,
             loevm TYPE knb1-loevm,
           END OF ty_knb1_fields.
    TYPES: BEGIN OF ty_knvv_fields,
             kunnr TYPE knvv-kunnr,
             vkorg TYPE knvv-vkorg,
             vtweg TYPE knvv-vtweg,
             spart TYPE knvv-spart,
             aufsd TYPE knvv-aufsd,
             lifsd TYPE knvv-lifsd,
             faksd TYPE knvv-faksd,
           END OF ty_knvv_fields.
    TYPES: BEGIN OF ty_knkk_fields,
             kunnr TYPE knkk-kunnr,
             kkber TYPE knkk-kkber,
             ctlpc TYPE knkk-ctlpc,
             crblb TYPE knkk-crblb,
             knkli TYPE knkk-knkli,
             klimk TYPE knkk-klimk,
             skfor TYPE knkk-skfor,
             ssobl TYPE knkk-ssobl,
           END OF ty_knkk_fields.
    TYPES: BEGIN OF ty_cust_stat_output,
             kunnr(10) TYPE c, "Customer #
             stat(4)   TYPE c, "Customer status
           END OF ty_cust_stat_output.
    TYPES:
      BEGIN OF ty_customers,
        kunnr(10)  TYPE c,  " Customer #
        div1(1)    TYPE c,  " Pipe delimiter
        name1(32)  TYPE c,  " Customer name
        div2(1)    TYPE c,  " Pipe delimiter
        altkn(8)   TYPE c,  " Old Customer #
        div3(1)    TYPE c,  " Pipe delimiter
        stras(30)  TYPE c,  " Street
        div4(1)    TYPE c,  " Pipe delimiter
        ort01(20)  TYPE c,  " City
        div5(1)    TYPE c,  " Pipe delimiter
        regio(3)   TYPE c,  " State
        div6(1)    TYPE c,  " Pipe delimiter
        pstlz(4)   TYPE c,  " Postcode
        div7(1)    TYPE c,  " Pipe delimiter
        telf1(14)  TYPE c,                                      " Phone 1
        div8(1)    TYPE c,  " Pipe delimiter
        telf2(14)  TYPE c,                                      " Phone 2
        div9(1)    TYPE c,  " Pipe delimiter
        erdat(10)  TYPE c,  " date
        div10(1)   TYPE c,  " Pipe delimiter
        splant(2)  TYPE c,  " plant
        div11(1)   TYPE c,  " Pipe delimiter
      END OF ty_customers,
      it_ty_customers TYPE ty_customers OCCURS 0,
      BEGIN OF ty_custstat,
        kunnr(11)  TYPE c,  " Customer #
        company(2) TYPE c,  " #
        status(3)  TYPE c,  " acc,cod,hol,
      END OF ty_custstat,
      it_ty_custstat TYPE ty_custstat OCCURS 0.
    TYPES:
      BEGIN OF ty_materialm,
        matnr(12)  TYPE c,  " Material #
        maktx2(40) TYPE c,  " Command sales desc.
        maktx(16)  TYPE c,  " Basic description
        extwg(6)   TYPE c,  " External Material Group
        flag1(1)   TYPE c,  "
        flag2(1)   TYPE c,  "
        flag3(1)   TYPE c,  "
        flag4(1)   TYPE c,  "
      END OF ty_materialm,
      it_ty_materialm TYPE ty_materialm OCCURS 0,
      BEGIN OF ty_materialp,
        matnr(12)  TYPE c,  " Material #
        werks(4)   TYPE c,  " plant
        batch(1)   TYPE c,  " download to batch
      END OF ty_materialp,
      it_ty_materialp TYPE ty_materialp OCCURS 0.
    TYPES:
      BEGIN OF ty_bom,
        matnr(12)  TYPE c,  " Material #
        werks(4)   TYPE c,  " Plant
        posnr(3)   TYPE c,  " position
        idnrk(12)  TYPE c,  " BOM material #
        menge(10)  TYPE c,  " Quantity
        meins(3)   TYPE c,  " Unit of Measure
      END OF ty_bom,
      it_ty_bom TYPE ty_bom OCCURS 0,
    *Start of block of changes for JPC20061107
      BEGIN OF ty_bom_sapfmt,
        matnr   TYPE MAST-MATNR,  " Material #
        werks   TYPE MAST-WERKS,  " Plant
        posnr   TYPE STPO-POSNR,  " position
        idnrk   TYPE STPO-IDNRK,  " BOM material #
        menge   TYPE STPO-MENGE,  " Quantity
        meins   TYPE STPO-MEINS,  " Unit of Measure
        potx1   TYPE STPO-POTX1,  " Text description for BOM
      END OF ty_bom_sapfmt.
    BEGIN OF ty_bomlist,
       matnr      LIKE mast-matnr,  " Material #
       stlnr      LIKE mast-stlnr,  " BOM #
       posnr      LIKE stpo-posnr,  " BOM item#
       idnrk      LIKE stpo-idnrk,  " BOM material #
       menge      LIKE stpo-menge,  " BOM material qty
       meins      LIKE stpo-meins,  " BOM material uom
    END OF ty_bomlist,
    it_ty_bomlist TYPE ty_bomlist OCCURS 0.
    *Ending block of changes for JPC20061107
    Selection screen definition
    SELECTION-SCREEN: BEGIN OF BLOCK gen WITH FRAME TITLE text-001.
    PARAMETERS:
    p_dir like rlgrap-filename obligatory, " extract directory
      p_ccust TYPE c DEFAULT ' ' AS CHECKBOX,   " Check box customers
      p_cmatm TYPE c DEFAULT ' ' AS CHECKBOX,   " Check box Materials
      p_cbom  TYPE c DEFAULT ' ' AS CHECKBOX,   " Check box BOMs
      p_ccst  TYPE c DEFAULT ' ' AS CHECKBOX.   " Check box credit stat
    SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-006.
    PARAMETERS:
      p_gui RADIOBUTTON GROUP rg1 USER-COMMAND u01,
      p_svr RADIOBUTTON GROUP rg1 DEFAULT 'X'.
    SELECTION-SCREEN END OF BLOCK a.
    SELECTION-SCREEN: END OF BLOCK gen.
    SELECTION-SCREEN: BEGIN OF BLOCK cust WITH FRAME TITLE text-002.
    PARAMETERS:
      p_dcust LIKE filepath-pathintern DEFAULT 'Z_COMMAND_CUST_EXTRACT',
      p_fcust LIKE rlgrap-filename,
      p_dcomp LIKE knb1-bukrs,
      p_dsale LIKE knvv-vkorg,
      p_dwerk(3) TYPE c.
    SELECTION-SCREEN: END OF BLOCK cust.
    SELECTION-SCREEN: BEGIN OF BLOCK matnr WITH FRAME TITLE text-003.
    PARAMETERS:
      p_dmatm LIKE filepath-pathintern
                   DEFAULT 'Z_COMMAND_MATERIAL_EXTRACT',
      p_fmatm LIKE rlgrap-filename,
      p_fmatp LIKE rlgrap-filename,
      p_dwerks LIKE marc-werks,
      p_dspras LIKE makt-spras,
      p_dbatch(1) TYPE c,
      p_dflag1(1) TYPE c,
      p_dflag2(1) TYPE c,
      p_dflag3(1) TYPE c,
      p_dflag4(1) TYPE c.
    SELECT-OPTIONS:
      s_dextwg FOR mara-extwg.
    SELECTION-SCREEN: END OF BLOCK matnr.
    SELECTION-SCREEN: BEGIN OF BLOCK bom WITH FRAME TITLE text-004.
    PARAMETERS:
      p_dbom LIKE filepath-pathintern DEFAULT 'Z_COMMAND_BOM_EXTRACT',
      p_fbom LIKE rlgrap-filename.
    p_bwerks LIKE mast-werks.          "Made a select-optoin JPC20061107
    SELECT-OPTIONS:
      s_bmatnr FOR MARA-MATNR,                                "JPC20061107
      s_bwerks FOR MAST-WERKS no-extension no intervals,      "JPC20061107
      s_bextwg FOR mara-extwg.
    SELECTION-SCREEN: END OF BLOCK bom.
    SELECTION-SCREEN: BEGIN OF BLOCK ccst WITH FRAME TITLE text-005.
    PARAMETERS:
      p_dccst LIKE filepath-pathintern
                   DEFAULT 'Z_COMMAND_CUST_STAT_EXTRACT',
      p_fccst LIKE rlgrap-filename,
      p_fccst2 LIKE rlgrap-filename,
      p_fccstl LIKE rlgrap-filename.
    SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-007.
    PARAMETERS: p_csall RADIOBUTTON GROUP gp2.
    PARAMETERS: p_csdlt RADIOBUTTON GROUP gp2 DEFAULT 'X'.
    PARAMETERS: p_append RADIOBUTTON GROUP GP3 DEFAULT 'X', "Append files output to server for cust credit data ?
                p_owrite RADIOBUTTON GROUP GP3.
    SELECTION-SCREEN END OF BLOCK b.
    SELECT-OPTIONS:
      s_kunnr FOR kna1-kunnr.
    SELECTION-SCREEN: END OF BLOCK ccst.
    DATA: clsdir TYPE REF TO cl_gui_frontend_services.
    DATA: strfolder TYPE string.
    DATA: folderln TYPE i.
    DATA: gva_error(1) TYPE c VALUE ' '.
    Initial procedure on START ***************
    INITIALIZATION.
      p_fcust = 'CUST.prn'.
      p_fmatm = 'MATM.prn'.
      p_fmatp = 'MATP.prn'.
      p_fbom  = 'BOM.prn'.
      p_fccst = 'CCSTAT.prn'.
      p_fccst2 = 'CCSTATC.prn'.
      p_fccstl = 'CCSTATL.prn'.
      s_dextwg-option = 'BT'.
      s_dextwg-low = '1'.
      s_dextwg-high = '8'.
      APPEND s_dextwg.
      s_bextwg-option = 'BT'.
      s_bextwg-low = '1'.
      s_bextwg-high = '1'.
      APPEND s_bextwg.
    AT SELECTION-SCREEN.
      IF p_ccust EQ 'X' AND ( p_fcust IS INITIAL OR p_dcust IS INITIAL ).
        MESSAGE s000(zppu)
        WITH 'You must specify the file details for the customer data'.
        gva_error = 'X'.
      ENDIF.
      IF p_cmatm EQ 'X' AND ( p_fmatm IS INITIAL OR
                              p_fmatp IS INITIAL OR
                              p_dmatm IS INITIAL ).
        MESSAGE s001(zppu)
        WITH 'You must specify the file details for the material data'.
        gva_error = 'X'.
      ENDIF.
      IF p_cbom EQ 'X' AND ( p_fbom IS INITIAL OR p_dbom IS INITIAL ).
        MESSAGE s002(zppu)
        WITH 'You must specify the file details for the BOM data'.
        gva_error = 'X'.
      ENDIF.
      IF p_cbom EQ 'X'.
        IF s_bwerks-low is initial.
          MESSAGE s002(zppu)
            WITH 'You must specify a plant to run BOM extract for'.
          gva_error = 'X'.
        ENDIF.
        IF LINES( s_bwerks ) > 1.
          MESSAGE s002(zppu)
            WITH 'You can only specify 1 plant for BOM extract'.
          gva_error = 'X'.
        ENDIF.
      ENDIF.
      IF p_ccst EQ 'X' AND ( p_fccst IS INITIAL OR
                             p_fccst2 IS INITIAL OR
                             p_fccstl IS INITIAL OR
                             p_dccst IS INITIAL ).
        MESSAGE s002(zppu)
        WITH 'You must specify the file details for the customer'
             'status data'.
        gva_error = 'X'.
      ENDIF.
    AT SELECTION-SCREEN OUTPUT.
      PERFORM user_command.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fcust.
      PERFORM get_gui_filename USING p_dcust p_fcust.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fmatm.
      PERFORM get_gui_filename USING p_dmatm p_fmatm.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fmatp.
      PERFORM get_gui_filename USING p_dmatm p_fmatp.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fbom.
      PERFORM get_gui_filename USING p_dbom p_fbom.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fccst.
      PERFORM get_gui_filename USING p_dccst p_fccst.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fccst2.
      PERFORM get_gui_filename USING p_dccst p_fccst2.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fccstl.
      PERFORM get_gui_filename USING p_dccst p_fccstl.
    END-OF-SELECTION.
    Data selection execution.
      DATA: lwa_kna1 TYPE kna1,
            lwa_knb1 TYPE knb1,
            lwa_knvv TYPE knvv.
      DATA: lwa_marc TYPE marc,
            lwa_mara TYPE marav,
            lwa_makt TYPE makt.
      DATA: lit_marav TYPE marav OCCURS 0.
      DATA: lit_customers TYPE it_ty_customers,
            lwa_customers TYPE ty_customers.
      DATA: lit_custstat  TYPE it_ty_custstat,
            lwa_custstat  TYPE ty_custstat.
      DATA: lit_materialm TYPE it_ty_materialm,
            lwa_materialm TYPE ty_materialm.
      DATA: lit_materialp TYPE it_ty_materialp,
            lwa_materialp TYPE ty_materialp.
    *(del)DATA: lwa_bomlist TYPE ty_bomlist,           "JPC20061107
    *(del)  lit_bomlist TYPE it_ty_bomlist.            "JPC20061107
      DATA: lwa_bom TYPE ty_bom_sapfmt,
            lit_bom TYPE it_ty_bom WITH HEADER LINE.   "JPC20061107
          lit_bom TYPE it_ty_bom.                    "JPC20061107
      DATA: output_file   TYPE string.
      DATA: lock_file     TYPE string.
      DATA: lva_mssage    TYPE string.
      DATA: lva_matnr(18) TYPE n.
      DATA: lva_date      TYPE datum.
      DATA: txtper(3)     TYPE c.
      DATA: custper       TYPE i.
      DATA: custcount     TYPE i.
      DATA: itemnum       TYPE i.
      CHECK gva_error <> 'X'.
      IF p_ccust EQ 'X'. " Do the customer file extract
        PERFORM extract_customer_details.
      ENDIF.
      IF p_cmatm EQ 'X'. " Do the Material file extract
        PERFORM extract_material_details.
      ENDIF.
      IF p_cbom EQ 'X'. " Do the BOM file extract
        PERFORM extract_bom_details.
      ENDIF.
      IF p_ccst EQ 'X'.  " Do the customer credit status file extract
        PERFORM extract_credit_status_details.
      ENDIF.
    *&      Form  extract_customer_details
          text
    -->  p1        text
    <--  p2        text
    FORM extract_customer_details.
      SELECT * FROM knb1
      INTO lwa_knb1
      WHERE bukrs = p_dcomp.
        MOVE-CORRESPONDING lwa_knb1 TO lwa_customers.
        MOVE-CORRESPONDING lwa_knb1 TO lwa_custstat.
        MOVE '#' TO lwa_custstat-company.
        MOVE p_dwerk TO lwa_customers-splant.
    WG1K903075: Start Delete---*
         move: '|' to lwa_customers-div1,
               '|' to lwa_customers-div2,
               '|' to lwa_customers-div3,
               '|' to lwa_customers-div4,
               '|' to lwa_customers-div5,
               '|' to lwa_customers-div6,
               '|' to lwa_customers-div7,
               '|' to lwa_customers-div8,
               '|' to lwa_customers-div9,
               '|' to lwa_customers-div10,
               '|' to lwa_customers-div11.
    WG1K903075: End Delete-----*
    WG1K903075: Start Insert---*
        MOVE: ' ' TO lwa_customers-div1,
              ' ' TO lwa_customers-div2,
              ' ' TO lwa_customers-div3,
              ' ' TO lwa_customers-div4,
              ' ' TO lwa_customers-div5,
              ' ' TO lwa_customers-div6,
              ' ' TO lwa_customers-div7,
              ' ' TO lwa_customers-div8,
              ' ' TO lwa_customers-div9,
              ' ' TO lwa_customers-div10,
              ' ' TO lwa_customers-div11.
    WG1K903075: End Insert-----*
        APPEND lwa_customers TO lit_customers.
        APPEND lwa_custstat TO lit_custstat.
      ENDSELECT.
      DESCRIBE TABLE lit_customers LINES custcount.
      LOOP AT lit_customers INTO lwa_customers.
        txtper = 100 * sy-tabix / custcount.
        custper = txtper.
        SELECT SINGLE * FROM kna1
        INTO lwa_kna1
        WHERE kunnr = lwa_customers-kunnr.
        MOVE-CORRESPONDING lwa_kna1 TO lwa_customers.
        lva_date = lwa_customers-erdat.
        CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
          EXPORTING
            date_internal            = lva_date
          IMPORTING
            date_external            = lwa_customers-erdat
          EXCEPTIONS
            date_internal_is_invalid = 1
            OTHERS                   = 2.
        REPLACE ALL OCCURRENCES OF '.'
        IN lwa_customers-erdat WITH '/'.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  = lwa_customers-kunnr
          IMPORTING
            output = lwa_customers-kunnr.
        WRITE: lwa_customers-kunnr RIGHT-JUSTIFIED TO lwa_customers-kunnr.
        MODIFY lit_customers FROM lwa_customers.
    Percentage indicator display
        lva_mssage = 'Extracting customers'.
        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            percentage = custper
            text       = lva_mssage.
      ENDLOOP.
      IF p_gui IS INITIAL.
        PERFORM get_file_path USING p_dcust p_fcust output_file.
        OPEN DATASET output_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
        IF sy-subrc EQ 0.
          LOOP AT lit_customers INTO lwa_customers.
            TRANSFER lwa_customers TO output_file.
          ENDLOOP.
          CLOSE DATASET output_file.
        ELSE.
          MESSAGE s002(zppu)
            WITH 'Dataset' output_file 'cannot be opened on the server'.
        ENDIF.
      ELSE.
        MOVE p_fcust TO output_file.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            filename = output_file
            filetype = 'ASC'
          TABLES
            data_tab = lit_customers
          EXCEPTIONS
            OTHERS   = 11.
      ENDIF.
      output_file = custcount.
      CONCATENATE
        output_file
        ' Customers extracted'
      INTO
        lva_mssage.
       message lva_mssage type 'I'.
    ENDFORM.                    " extract_customer_details
    *&      Form  extract_material_details
          text
    -->  p1        text
    <--  p2        text
    FORM extract_material_details.
       select maramatnr maramaktx
              maramatkl marcwerks
      SELECT *
      FROM marav AS mara
        INNER JOIN marc AS marc
          ON marc~matnr EQ mara~matnr
      INTO CORRESPONDING FIELDS OF lwa_mara
      WHERE marc~werks = p_dwerks
        AND mara~spras = 'EN'
        AND mara~extwg IN s_dextwg.
        MOVE-CORRESPONDING lwa_mara TO lwa_materialm.
        WRITE: lwa_mara-matnr TO lwa_materialm-matnr.
        MOVE: p_dflag1 TO lwa_materialm-flag1,
              p_dflag2 TO lwa_materialm-flag2,
              p_dflag3 TO lwa_materialm-flag3,
              p_dflag4 TO lwa_materialm-flag4.
        APPEND lwa_materialm TO lit_materialm.
      ENDSELECT.
      DESCRIBE TABLE lit_materialm LINES custcount.
      LOOP AT lit_materialm INTO lwa_materialm.
        txtper = 100 * sy-tabix / custcount.
        custper = txtper.
        CLEAR lwa_materialp.
        CLEAR lwa_mara.
        MOVE: lwa_materialm-matnr TO lwa_materialp-matnr,
              p_dwerks            TO lwa_materialp-werks,
              p_dbatch            TO lwa_materialp-batch.
        APPEND lwa_materialp TO lit_materialp.
        MOVE: lwa_materialm-matnr TO lva_matnr.
        MOVE: lva_matnr TO lwa_mara-matnr.
        SELECT SINGLE maktx FROM makt
        INTO lwa_materialm-maktx2
        WHERE matnr = lwa_mara-matnr
        AND spras = p_dspras.
        IF lwa_materialm-maktx2 IS INITIAL.
          lwa_materialm-maktx2 = lwa_materialm-maktx.
        ENDIF.
        MODIFY lit_materialm FROM lwa_materialm.
    Percentage indicator display
        lva_mssage = 'Extracting materials'.
        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            percentage = custper
            text       = lva_mssage.
      ENDLOOP.
      IF p_gui IS INITIAL.
        PERFORM get_file_path USING p_dmatm p_fmatm output_file.
        OPEN DATASET output_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
        IF sy-subrc EQ 0.
          LOOP AT lit_materialm INTO lwa_materialm.
            TRANSFER lwa_materialm TO output_file.
          ENDLOOP.
          CLOSE DATASET output_file.
        ELSE.
          MESSAGE s002(zppu)
            WITH 'Dataset' output_file 'cannot be opened on the server'.
        ENDIF.
      ELSE.
        MOVE p_fmatm TO output_file.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            filename              = output_file
            filetype              = 'ASC'
            write_field_separator = ' '
          TABLES
            data_tab              = lit_materialm
          EXCEPTIONS
            OTHERS                = 11.
      ENDIF.
      IF p_gui IS INITIAL.
        PERFORM get_file_path USING p_dmatm p_fmatp output_file.
        OPEN DATASET output_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
        IF sy-subrc EQ 0.
          LOOP AT lit_materialp INTO lwa_materialp.
            TRANSFER lwa_materialp TO output_file.
          ENDLOOP.
          CLOSE DATASET output_file.
        ELSE.
          MESSAGE s002(zppu)
            WITH 'Dataset' output_file 'cannot be opened on the server'.
        ENDIF.
      ELSE.
        MOVE p_fmatp TO output_file.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            filename              = output_file
            filetype              = 'ASC'
            write_field_separator = ' '
          TABLES
            data_tab              = lit_materialp
          EXCEPTIONS
            OTHERS                = 11.
      ENDIF.
      REFRESH lit_materialm.
    ENDFORM.                    " extract_material_details
    *&      Form  extract_bom_details
          text
    -->  p1        text
    <--  p2        text
    FORM extract_bom_details.
    Lines below commented out and replaced with SELECT from ABAP Query run from
    transaction ZBOM.  Previously duplicate materials were selected. JPC20061107
    REFRESH lit_materialm.
    SELECT *
    FROM marav AS mara
       INNER JOIN marc AS marc
         ON marcmatnr EQ maramatnr
    INTO CORRESPONDING FIELDS OF lwa_mara
    WHERE marc~werks = p_bwerks
       AND mara~spras = 'EN'
       AND mara~extwg IN s_bextwg.
       APPEND lwa_mara TO lit_marav.
    ENDSELECT.
    DESCRIBE TABLE lit_marav LINES custcount.
    LOOP AT lit_marav INTO lwa_mara.
    Percentage indicator calculation
       txtper = 100 * sy-tabix / custcount.
       custper = txtper.
       SELECT
         mast~matnr
         mast~stlnr
         stpo~posnr
         stpo~idnrk
         stpo~menge
         stpo~meins
       FROM mast AS mast
         LEFT OUTER JOIN stpo AS stpo
           ON stpostlnr EQ maststlnr
    INTO lwa_bomlist
    WHERE mast~matnr = lwa_mara-matnr.
         CLEAR lwa_bom.
         MOVE-CORRESPONDING lwa_bomlist TO lwa_bom.
         WRITE: lwa_bomlist-matnr TO lwa_bom-matnr.
         IF lwa_bomlist-idnrk IS INITIAL.
           WRITE: 'BACKBIN' TO lwa_bom-idnrk.
         ELSE.
           WRITE: lwa_bomlist-idnrk TO lwa_bom-idnrk.
         ENDIF.
         MOVE: lwa_bomlist-posnr TO itemnum.
         WRITE: itemnum TO lwa_bom-posnr RIGHT-JUSTIFIED.
           write: lwa_bomlist-menge
           to lwa_bom-menge
           decimals 2.
         MOVE: p_bwerks TO lwa_bom-werks.
         APPEND lwa_bom TO lit_bom.
       ENDSELECT.
    Percentage indicator display
       lva_mssage = 'Extracting material B.O.Ms'.
       CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
           percentage = custper
           text       = lva_mssage.
    ENDLOOP.
      select MASTMATNR MASTWERKS STPOPOSNR STPOIDNRK STPOMENGE STPOMEINS            "JPC20061220
        select MAST~MATNR MAST~WERKS STPO~POSNR STPO~IDNRK STPO~MENGE STPO~MEINS STPO~POTX1 "JPC20061220
          into lwa_bom
          from ( MAST
               inner join STKO
               on  STKO~STLAL = MAST~STLAL
               and STKO~STLNR = MAST~STLNR
               and STKO~WRKAN = MAST~WERKS
               inner join MARA  as MARA_H
               on  MARA_H~MATNR = MAST~MATNR
               left outer join STAS
               on  STAS~STLAL = STKO~STLAL
               and STAS~STLNR = STKO~STLNR
               and STAS~STLTY = STKO~STLTY
               inner join STPO
               on  STPO~STLKN = STAS~STLKN
               and STPO~STLNR = STAS~STLNR
               and STPO~STLTY = STAS~STLTY
             inner join MARA                   JPC20061220
               left outer join MARA             "JPC20061220
               on  MARA~MATNR = STPO~IDNRK )
             where MARA_H~MATNR in s_bmatnr
               and MAST~WERKS   in s_bwerks
               and MARA_H~EXTWG in s_bextwg.
        clear lit_bom.
        WRITE lwa_bom-matnr TO lit_bom-matnr.
        MOVE  lwa_bom-werks TO lit_bom-werks.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  = lwa_bom-posnr
          IMPORTING
            output = lit_bom-posnr.
        SHIFT lit_bom-posnr right deleting trailing space.
        IF lwa_bom-idnrk IS INITIAL.
        WRITE 'BACKBIN'     TO lit_bom-idnrk.               JPC20061220
          WRITE lwa_bom-potx1 TO lit_bom-idnrk.              "JPC20061220
        ELSE.
          WRITE lwa_bom-idnrk TO lit_bom-idnrk.
        ENDIF.
        MOVE: lwa_bom-menge TO lit_bom-menge,
              lwa_bom-meins TO lit_bom-meins.
        APPEND lit_bom.
      ENDSELECT.
      SORT lit_bom ascending.
    Ending for lines inserted for change 20061107
      IF p_gui IS INITIAL.  "write to server
        PERFORM get_file_path USING p_dbom p_fbom output_file.
        OPEN DATASET output_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
        IF sy-subrc EQ 0.
          custcount = lines( lit_bom ).
          LOOP AT lit_bom.
            txtper = 100 * sy-tabix / custcount.
            custper = txtper.
            lva_mssage = 'Extracting material B.O.Ms'.
            CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
              EXPORTING percentage = custper
                        text       = lva_mssage.
            TRANSFER lit_bom TO output_file.
          ENDLOOP.
          CLOSE DATASET output_file.
        ELSE.
          MESSAGE s002(zppu)
            WITH 'Dataset' output_file 'cannot be opened on the server'.
        ENDIF.
      ELSE.
        MOVE p_fbom TO output_file.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            filename              = output_file
            filetype              = 'ASC'
            write_field_separator = ' '
          TABLES
            data_tab              = lit_bom
          EXCEPTIONS
            OTHERS                = 11.
      ENDIF.
    ENDFORM.                    " extract_bom_details
    *&      Form  get_file_path
          text
         -->P_LOGICAL_PATH_NAME   text
         -->P_FILENAME            text
         -->P_FILENAME_WITH_PATH  text
    FORM get_file_path USING p_logical_path_name p_filename
                             p_filename_with_path.
      DATA: l_opsys TYPE sy-opsys,
            l_blank_filename TYPE c,
            l_filename TYPE string.
      IF p_gui IS INITIAL.
        MOVE 'WN32' TO l_opsys.
      ELSE.
        MOVE 'WN' TO l_opsys.
      ENDIF.
      IF p_filename IS INITIAL.
        MOVE 'XXX' TO l_filename.
        MOVE 'X' TO l_blank_filename.
      ELSE.
        MOVE p_filename TO l_filename.
      ENDIF.
      CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
        EXPORTING
          logical_path               = p_logical_path_name
          operating_system           = l_opsys
          file_name                  = l_filename
        IMPORTING
          file_name_with_path        = p_filename_with_path
        EXCEPTIONS
          path_not_found             = 1
          missing_parameter          = 2
          operating_system_not_found = 3
          file_system_not_found      = 4
          OTHERS                     = 5.
      IF NOT l_blank_filename IS INITIAL.
        REPLACE ALL OCCURRENCES OF 'XXX' IN p_filename_with_path WITH space.
      ENDIF.
    ENDFORM.                    "get_file_path
    *&      Form  value_request_p_fcust
          text
    -->  p1        text
    <--  p2        text
    FORM get_gui_filename USING p_path p_filename.
      DATA: l_fdir TYPE string.
      CHECK NOT p_gui IS INITIAL.
      PERFORM get_file_path USING p_path space
                                  l_fdir.
      CALL FUNCTION 'WS_FILENAME_GET'
        EXPORTING
          def_path         = l_fdir
          mask             = ',.prn,.prn.'
          title            = 'Select Excel file for download'
        IMPORTING
          filename         = p_filename
        EXCEPTIONS
          inv_winsys       = 1
          no_batch         = 2
          selection_cancel = 3
          selection_error  = 4
          OTHERS           = 5.
    ENDFORM.                    " value_request_p_fcust
    *&      Form  extract_credit_status_details
          text
    -->  p1        text
    <--  p2        text
    FORM extract_credit_status_details .
      DATA: lt_credit_stat   TYPE STANDARD TABLE OF zint_credit_stat,
            l_credit_stat    TYPE zint_credit_stat,
            l_current_stat1  TYPE zcrstat1,
            l_current_stat2  TYPE zcrstat2,
            l_current_reason TYPE zreason,
            lt_output_stat   TYPE STANDARD TABLE OF zint_credit_stat,
            l_output_stat    TYPE zint_credit_stat,
            lt_output1       TYPE STANDARD TABLE OF ty_cust_stat_output,
            lt_output2       TYPE STANDARD TABLE OF ty_cust_stat_output,
            l_output         TYPE ty_cust_stat_output.
      SELECT a~mandt a~kunnr a~name1 b~curstat1 b~curstat2 b~curtimestamp
             b~curreason b~prevstat1 b~prevstat2 b~prvtimestamp
             b~prevreason
        INTO TABLE lt_credit_stat
        FROM kna1 AS a
        LEFT OUTER JOIN zint_credit_stat AS b
        ON a~kunnr = b~kunnr
        WHERE a~kunnr IN s_kunnr.
      DESCRIBE TABLE lt_credit_stat LINES custcount.
      LOOP AT lt_credit_stat INTO l_credit_stat.
        txtper = 100 * sy-tabix / custcount.
        custper = txtper.
        PERFORM determine_current_status USING l_credit_stat-kunnr
                                               l_current_stat1
                                               l_current_stat2
                                               l_current_reason.
        IF NOT p_csdlt IS INITIAL.
        Only do delta download
          IF  l_current_stat1 NE l_credit_stat-curstat1 OR
              l_current_stat2 NE l_credit_stat-curstat2.
            PERFORM add_record_to_output TABLES lt_output_stat
                                         USING  l_current_stat1
                                                l_current_stat2
                                                l_current_reason
                                                l_credit_stat.
          ENDIF.
        ELSE.
        Download all records
          PERFORM add_record_to_output TABLES lt_output_stat
                                       USING  l_current_stat1
                                              l_current_stat2
                                              l_current_reason
                                              l_credit_stat.
        ENDIF.
      Percentage indicator display
        lva_mssage = 'Extracting customer status'.
        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            percentage = custper
            text       = lva_mssage.
      ENDLOOP.
    Create output table
      LOOP AT lt_output_stat INTO l_output_stat.
        CLEAR l_output.
        WRITE l_output_stat-kunnr TO l_output-kunnr.
        SHIFT l_output-kunnr RIGHT DELETING TRAILING space.
        MOVE l_output_stat-curstat1 TO l_output-stat.
        APPEND l_output TO lt_output1.
        MOVE l_output_stat-curstat2 TO l_output-stat.
        APPEND l_output TO lt_output2.
      ENDLOOP.
      SORT lt_output1.
      SORT lt_output2.
      IF p_gui IS INITIAL.
      Lock File
        PERFORM get_file_path USING p_dccst p_fccstl lock_file.
      If the file already exists then abort processing
        OPEN DATASET lock_file FOR INPUT IN TEXT MODE ENCODING DEFAULT.
        IF sy-subrc NE 8.
          MESSAGE s002(zppu)
            WITH 'Lock file' lock_file 'already exists on server,'
                 'processing aborted'.
          LEAVE PROGRAM.
        ENDIF.
        OPEN DATASET lock_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
        IF sy-subrc NE 0.
          MESSAGE s002(zppu)
            WITH 'Lock file' lock_file 'cannot be opened on the server,'
                 'processing aborted'.
          LEAVE PROGRAM.
        ENDIF.
      File 1
        PERFORM get_file_path USING p_dccst p_fccst output_file.
    If user requests cust status data to be appended use different OPEN
        IF p_append is initial.
          OPEN DATASET output_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
        ELSE.
          OPEN DATASET output_file FOR APPENDING IN TEXT MODE ENCODING DEFAULT.
        ENDIF.
        IF sy-subrc EQ 0.
          LOOP AT lt_output1 INTO l_output.
            TRANSFER l_output TO output_file.
          ENDLOOP.
          CLOSE DATASET output_file.
        ELSE.
          MESSAGE s002(zppu)
            WITH 'Dataset' output_file 'cannot be opened on the server'.
        ENDIF.
      File 2
        PERFORM get_file_path USING p_dccst p_fccst2 output_file.
    If user requests cust status data to be appended use different OPEN
        IF p_append is initial.
          OPEN DATASET output_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
        ELSE.
          OPEN DATASET output_file FOR APPENDING IN TEXT MODE ENCODING DEFAULT.
        ENDIF.
        IF sy-subrc EQ 0.
          LOOP AT lt_output2 INTO l_output.
            TRANSFER l_output TO output_file.
          ENDLOOP.
          CLOSE DATASET output_file.
        ELSE.
          MESSAGE s002(zppu)
            WITH 'Dataset' output_file 'cannot be opened on the server'.
        ENDIF.
        DELETE DATASET lock_file.
      ELSE.
        MOVE p_fccst TO output_file.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            filename = output_file
            filetype = 'ASC'
          TABLES
            data_tab = lt_output1
          EXCEPTIONS
            OTHERS   = 11.
        MOVE p_fccst2 TO output_file.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            filename = output_file
            filetype = 'ASC'
          TABLES
            data_tab = lt_output2
          EXCEPTIONS
            OTHERS   = 11.
      ENDIF.
      IF NOT p_svr IS INITIAL.
        PERFORM update_status_table TABLES lt_output_stat.
      ENDIF.
      output_file = custcount.
      CONCATENATE
        output_file
        ' Customers extracted'
      INTO
        lva_mssage.
    ENDFORM.                    " extract_credit_status_details
    *&      Form  user_command
          text
    -->  p1        text
    <--  p2        text
    FORM user_command .
      LOOP AT SCREEN.
        IF screen-name EQ 'P_DCUST' OR
           screen-name EQ '%_P_DCUST_%_APP_%-TEXT' OR
           screen-name EQ 'P_DMATM' OR
           screen-name EQ '%_P_DMATM_%_APP_%-TEXT' OR
           screen-name EQ 'P_DBOM' OR
           screen-name EQ '%_P_DBOM_%_APP_%-TEXT' OR
           screen-name EQ 'P_DCCST' OR
           screen-name EQ '%_P_DCCST_%_APP_%-TEXT' OR
           screen-name EQ 'P_FCCSTL' OR
           screen-name EQ '%_P_FCCSTL_%_APP_%-TEXT'.
          IF p_gui IS INITIAL.
            screen-input = 1.
            screen-output = 1.
            screen-invisible = 0.
            screen-active = 1.
          ELSE.
            screen-input = 0.
            screen-output = 0.
            screen-invisible = 1.
            screen-active = 0.
          ENDIF.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " user_command
    *&      Form  determine_current_status
          text
         -->P_L_CREDIT_STAT_KUNNR  text
         -->P_L_CURRENT_STAT1  text
         -->P_L_CURRENT_STAT2  text
    FORM determine_current_status USING p_kunnr p_stat1 p_stat2 p_reason.
      STATICS: lt_kna1 TYPE STANDARD TABLE OF ty_kna1_fields,
               lt_knb1 TYPE STANDARD TABLE OF ty_knb1_fields,
               lt_knvv TYPE STANDARD TABLE OF ty_knvv_fields,
               lt_knkk TYPE STANDARD TABLE OF ty_knkk_fields.
      DATA: l_kna1  TYPE ty_kna1_fields,
            l_knb1  TYPE ty_knb1_fields,
            l_knvv  TYPE ty_knvv_fields,
            l_knkk  TYPE ty_knkk_fields,
            l_faedt TYPE rfpos-faedt,
            l_days  TYPE p,
            l_used  TYPE rf02l-klprz.
      IF lt_kna1[] IS INITIAL.
        PERFORM load_kna1 TABLES lt_kna1.
      ENDIF.
      IF lt_knb1[] IS INITIAL.
        PERFORM load_knb1 TABLES lt_knb1.
      ENDIF.
      IF lt_knvv[] IS INITIAL.
        PERFORM load_knvv TABLES lt_knvv.
      ENDIF.
      IF lt_knkk[] IS INITIAL.
        PERFORM load_knkk TABLES lt_knkk.
      ENDIF.
      MOVE gc_status-acc TO p_stat1.
      MOVE gc_status-ok  TO p_stat2.
      MOVE gc_reason-000 TO p_reason.
    Customer Block/Unblock
      READ TABLE lt_kna1 INTO l_kna1 WITH KEY kunnr = p_kunnr BINARY SEARCH.
      IF sy-subrc EQ 0.
        IF NOT l_kna1-sperr IS INITIAL.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-001  TO p_reason.
        ENDIF.
        IF l_kna1-aufsd EQ '01'.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-002  TO p_reason.
        ENDIF.
        IF l_kna1-lifsd EQ '01'.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-003  TO p_reason.
        ENDIF.
        IF l_kna1-faksd EQ '01'.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-004  TO p_reason.
        ENDIF.
        IF NOT l_kna1-loevm IS INITIAL.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-999  TO p_reason.
        ENDIF.
      ENDIF.
      CHECK p_stat1 NE gc_status-sto.
      LOOP AT lt_knb1 INTO l_knb1 WHERE kunnr EQ p_kunnr.
        IF NOT l_kna1-sperr IS INITIAL.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-005  TO p_reason.
        ENDIF.
        IF NOT l_knb1-loevm IS INITIAL.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-999  TO p_reason.
        ENDIF.
        IF p_stat1 EQ gc_status-sto.
          EXIT.
        ENDIF.
      ENDLOOP.
      CHECK p_stat1 NE gc_status-sto.
      LOOP AT lt_knvv INTO l_knvv WHERE kunnr EQ p_kunnr.
        IF l_knvv-aufsd EQ '01'.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-006  TO p_reason.
        ENDIF.
        IF l_knvv-lifsd EQ '01'.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-007  TO p_reason.
        ENDIF.
        IF l_knvv-faksd EQ '01'.
          MOVE gc_status-sto  TO p_stat1.
          MOVE gc_status-hold TO p_stat2.
          MOVE gc_reason-008  TO p_reason.
        ENDIF.
        IF p_stat1 EQ gc_status-sto.
          EXIT.
        ENDIF.
      ENDLOOP.
      CHECK p_stat1 NE gc_status-sto.
      READ TABLE lt_knkk INTO l_knkk WITH KEY kunnr = p_kunnr
                                              kkber = 'BP01'
                                     BINARY SEARCH.
      IF sy-subrc EQ 0.
      Exceeded Trading Terms
        IF l_knkk-ctlpc EQ 'Z03' OR
           l_knkk-ctlpc EQ 'Z04' OR
           l_knkk-ctlpc EQ 'Z05'.
          CALL FUNCTION 'CUSTOMER_OLDEST_OPEN_ITEM'
            EXPORTING
              i_kkber      = l_knkk-kkber
              i_kunnr      = l_knkk-kunnr
            IMPORTING
              e_faedt      = l_faedt
            EXCEPTIONS
              invalid_call = 1
              no_bukrs     = 2
              no_items     = 3
              OTHERS       = 4.
          IF sy-subrc EQ 0.
            l_days = sy-datum - l_faedt.
          ELSE.
            l_days = 0.
          ENDIF.
          IF l_knkk-ctlpc EQ 'Z03' AND l_knkk-crblb IS INITIAL AND
             l_days GT 45.
            MOVE gc_status-hol  TO p_stat1.
            MOVE gc_status-hold TO p_stat2.
            MOVE gc_reason-021  TO p_reason.
          ENDIF.
          IF l_knkk-ctlpc EQ 'Z04' AND l_knkk-crblb IS INITIAL AND
             l_days GT 40.
            MOVE gc_status-hol  TO p_stat1.
            MOVE gc_status-hold TO p_stat2.
            MOVE gc_reason-022  TO p_reason.
          ENDIF.
          IF l_knkk-ctlpc EQ 'Z05' AND l_knkk-crblb IS INITIAL AND
             l_days GT 30.
            MOVE gc_status-hol  TO p_stat1.
            MOVE gc_status-hold TO p_stat2.
            MOVE gc_reason-023  TO p_reason.
          ENDIF.
          IF l_knkk-ctlpc EQ 'Z03' AND NOT l_knkk-crblb IS INITIAL AND
             l_days GT 45.
            MOVE gc_status-sto  TO p_stat1.
            MOVE gc_status-hold TO p_stat2.
            MOVE gc_reason-024  TO p_reason.
          ENDIF.
          IF l_knkk-ctlpc EQ 'Z04' AND NOT l_knkk-crblb IS INITIAL AND
             l_days GT 40.
            MOVE gc_status-sto  TO p_stat1.
            MOVE gc_status-hold TO p_stat2.
            MOVE gc_reason-025  TO p_reason.
          ENDIF.
          IF l_knkk-ctlpc EQ 'Z05' AND NOT l_knkk-crblb IS INITIAL AND
             l_days GT 30.
            MOVE gc_status-sto  TO p_stat1.
            MOVE gc_status-hold TO p_stat2.
            MOVE gc_reason-026  TO p_reason.
          ENDIF.
          CHECK p_stat1 NE gc_status-sto.
      Exceeded Credit Limit Checks
          PERFORM get_credit_exposure USING l_knkk-knkli l_knkk-kkber
                                            l_knkk-ctlpc l_knkk-klimk
                                            l_knkk-skfor l_knkk-ssobl
                                            l_used.
          IF l_used GE 95 AND l_knkk-crblb IS INITIAL.
            MOVE gc_status-hol  TO p_stat1.
            MOVE gc_status-hold TO p_stat2.
            MOVE gc_reason-010  TO p_reason.
          ENDIF.
          IF l_used GE 95 AND NOT l_knkk-crblb IS INITIAL.
            MOVE gc_status-

    Yes thread closed
    Prioz

  • Problem with ...FILE_GET_NAME ??

    hi,
    I am using function FILE_GET_NAME to return me the physical path for the supplied Logical Path.
    CALL FUNCTION 'FILE_GET_NAME'
    EXPORTING
    LOGICAL_FILENAME = 'MONTHLY_SALES_FILE'
    IMPORTING
    FILE_NAME = FILE
    Now the function returns a path /tmp/XXXXXXX in FILE,
    But when i go and check in AL11 there is no such directory XXXXXXX in /tmp .
    DO i need to do something else ??

    Please use the FM
    CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
           EXPORTING
             logical_path = 'MONTHLY_SALES_FILE'
             file_name = l_file
           IMPORTING
             file_name_with_path = l_file.
    Initialise your filename in the variable l_file.

  • How do I use FILE_GET_NAME and make my resulting dataset name unique?

    Okay, here's a case where I have a bunch of pieces to the puzzle -- a little knowledge here, a little knowledge there -- but I'm having trouble putting them together.
    I am working on an RFC that is called by XI as part of an interface.  This interface will execute every 15 minutes.  As part of the RFC's execution (which is very simple and straight-forward) I would like to write out a dataset of the processing results.  I have already learned how to use the OPEN DATASET, TRANSFER, and CLOSE DATASET commands, so I'm good to go there.
    Here's what I'd like to do:  Because this can run every 15 minutes, I don't want to keep overwriting my dataset file with the latest version.  I'd like to keep the dataset name unique so it doesn't happen.  Obviously, the first thought that comes to mind is adding a date/time stamp to the file name, but I'm not sure how -- or the best way -- to do this.
    Also, I was told I should put the file -- for now -- into the DIR_DATA directory.  I had no idea what this meant until I was told about t-code "FILE" and that this was the logical file name.  Someone in-house thought I'd need to use a function called FILE_GET_NAME to make things easier.
    Okay, so I need to use FILE_GET_NAME apparently, somehow plugging in DIR_DATA as the directory I need, and I want the resulting file name to have the date/time added at run time.  I'm thinking when it comes to batch processing and writing out datasets, this has to be something that someone's already "paved the road" doing.  Has anyone done this?  Do you have a little slice of code doing just this that you could post?  This would go a long way toward helping me understand how this "fits" together, and I would greatly appreciate any help you can provide.
    As always, points awarded to all helpful answers.  Thank you so much!

    hey,
    here is the brief description of logical & physical path.
    in the physical path, we will give total path of the file,where the file is located actually in the server.
    for example : /INT/D01/IN/MYFILE.
    this is the physical path in my client for a particular file.
    some times this have problems like D01 above in the path,
    is development system. if we move to quality, it will be Q01 etc..
    to make every file independent of the server location, we use logical path concept, which is nothing but, instead of giving the total physical path like above,we will give this logical path & file name. before that we will create a logical path in sap & assign some physical path to it.
    the below function module is used to get the actual physical path by giving the logical path name & file name
    *&      Form  GET_PHYSICAL_PATH
          text This form used to get the Physical Filepath by giving the Logical path & the File name.
    FORM GET_PHYSICAL_PATH.
      DATA : LV_FILE(132) TYPE C,
             V_LENGTH TYPE I   ,
             LV_LOGNAME LIKE FILEPATH-PATHINTERN.
      LV_LOGNAME = P_LPATH.
    *--this P_LPATH is a parameter in the selection screen
    *--this P_FNAME is the actual file name as below
    *--PARAMETERS : P_LPATH TYPE RLGRAP-FILENAME,
                    P_fname TYPE RLGRAP-FILENAME.
      CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
           EXPORTING
                CLIENT                     = SY-MANDT
                LOGICAL_PATH               = LV_LOGNAME
                OPERATING_SYSTEM           = SY-OPSYS
                FILE_NAME                  = p_fname
           IMPORTING
                FILE_NAME_WITH_PATH        = LV_FILE
           EXCEPTIONS
                PATH_NOT_FOUND             = 1
                MISSING_PARAMETER          = 2
                OPERATING_SYSTEM_NOT_FOUND = 3
                FILE_SYSTEM_NOT_FOUND      = 4
                OTHERS                     = 5.
      IF SY-SUBRC <> 0.
        MESSAGE E000 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ELSE.
    *--ur total physical(absolute) path will be in LV_FILE.
        V_FILEPATH = LV_FILE.
      ENDIF.
    ENDFORM.                    " GET_PHYSICAL_PATH
    unique naming for ur file names;
    after getting the physical path from the above function module, append date& time stamp to the file as below.
    CONCATENATE V_FILEPATH
                SY-DATUM
                SY-UZEIT
                INTO V_FILEPATH.
    This way you can make your file name unique always
    regards
    srikanth
    Message was edited by: Srikanth Kidambi

  • Open dataset......

    Hi Folks,
    I am trying to get some data using Open dataset.The program is not showing any errors and executing fine,but I was not able to find the data that I am going to get using OPEN DATASET.Where will I be able to see the data.In the given path there is no file downloaded.Kindly let me know.
    run the program
    enter some data in the blank fields of the alv
    save it
    now double click on the qty1 field in the alv.
    Thanks,
    K.Kiran.
    REPORT  zlabel.
    TYPE-POOLS:slis,icon.
    TABLES:makt.
    *Declarations for ALV
    DATA:itfieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
    DATA:itfieldcat1 TYPE slis_t_fieldcat_alv WITH HEADER LINE.
    DATA:itprintparams TYPE slis_print_alv.
    DATA:itrepid TYPE sy-repid.
    itrepid = sy-repid.
    DATA:itevent TYPE slis_t_event.
    DATA:itlistheader TYPE slis_t_listheader.
    DATA:walistheader LIKE LINE OF itlistheader.
    DATA:itlayout TYPE slis_layout_alv.
    DATA:top TYPE slis_formname.
    DATA:itsort TYPE slis_t_sortinfo_alv WITH HEADER LINE.
    DATA : grid  TYPE REF TO cl_gui_alv_grid.
    *Declaration for DSN
    <b>DATA : file(50) VALUE 'E:\userdata\labelfiles'.</b>
    DATA : dsn(150).
    DATA : dsn1(100).
    DATA : n1(4) TYPE n.
    *Declarations for Internal tables.
    DATA:BEGIN OF imakt OCCURS 0,
         matnr LIKE makt-matnr,
         spras LIKE makt-spras,
         maktx LIKE makt-maktx,
         label1(03) TYPE c,
         qty1(03) TYPE c,
         label2(03) TYPE c,
         qty2(03) TYPE c,
         END OF imakt.
    DATA:ITFINAL LIKE imakt OCCURS 0 WITH HEADER LINE.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS:matnr FOR makt-matnr OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK b1.
    START-OF-SELECTION.
    PERFORM getdata.
    IF sy-subrc = 0.
    PERFORM alv.
    ELSE.
    STOP.
    ENDIF.
    *&      Form  getdata
          text
    FORM getdata.
      SELECT matnr
             spras
             maktx
             FROM makt
             INTO CORRESPONDING FIELDS OF TABLE imakt
             WHERE spras = sy-langu.
    ENDFORM.                    "getdata
    *&      Form  ALV
          text
    FORM alv.
      DEFINE m_fieldcat.
        itfieldcat-fieldname = &1.
        itfieldcat-col_pos = &2.
        itfieldcat-seltext_l = &3.
        itfieldcat-do_sum = &4.
        itfieldcat-outputlen = &5.
        itfieldcat-edit = &6.
        append itfieldcat to itfieldcat.
        clear itfieldcat.
      END-OF-DEFINITION.
      m_fieldcat 'MATNR' '' 'MATERIAL No' '' 18 ''.
      m_fieldcat 'SPRAS' '' 'Language' '' 02 ''.
      m_fieldcat 'MAKTX' '' 'Description' '' 40 ''.
      m_fieldcat 'LABEL1' '' 'LABEL1' '' 12 'X'.
      m_fieldcat 'QTY1' '' 'QTY1' '' 12 'X'.
      m_fieldcat 'LABEL2' '' 'LABEL2' '' 12 'X'.
      m_fieldcat 'QTY2' '' 'QTY2' '' 12 'X'.
      itlayout-zebra = 'X'.
      itlayout-colwidth_optimize = 'X'.
      itlayout-no_subtotals = ' '.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
            EXPORTING
              i_callback_program      = sy-repid
              is_layout               = itlayout
           i_callback_pf_status_set = 'PF_STATUS'
              i_callback_user_command =  'LIST1'
              i_callback_top_of_page  = 'TOP'
              it_fieldcat             = itfieldcat[]
              i_save                  = 'X'
         is_variant              = ITVARIANT
              it_events               = itevent[]
            is_print                = itprintparams
              it_sort                 = itsort[]
            TABLES
              t_outtab                = imakt
              EXCEPTIONS
              program_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.
      CLEAR itfieldcat.
    ENDFORM.                    "ALV
    *&      Form  list1
          text
         -->R_UCOMM    text
         -->RS_SELFIELDtext
    FORM list1 USING r_ucomm LIKE sy-ucomm
                      rs_selfield TYPE slis_selfield.
      CASE r_ucomm.
      WHEN 'EXIT'.
      STOP.
      ENDCASE.
      CLEAR itfieldcat1.
      REFRESH itfieldcat1.
      DEFINE k_fieldcat.
        itfieldcat1-fieldname = &1.
        itfieldcat1-col_pos = &2.
        itfieldcat1-seltext_l = &3.
        itfieldcat1-outputlen = &4.
        append itfieldcat1 to itfieldcat1.
        clear itfieldcat1.
      END-OF-DEFINITION.
      k_fieldcat 'MATNR' '' 'MATERIAL No' 18 .
      k_fieldcat 'SPRAS' '' 'Language'    02 .
      k_fieldcat 'MAKTX' '' 'Description' 40 .
      k_fieldcat 'LABEL1' '' 'LABEL1'     12 .
      k_fieldcat 'QTY1' '' 'QTY1' 12 .
      k_fieldcat 'LABEL2' '' 'LABEL2' 12 .
      k_fieldcat 'QTY2' '' 'QTY2' 12 .
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
            EXPORTING
              i_callback_program      = sy-repid
              is_layout               = itlayout
           i_callback_pf_status_set = 'PF_STATUS'
              i_callback_user_command =  'LIST2'
              i_callback_top_of_page  = 'TOP'
              it_fieldcat             = itfieldcat1[]
              i_save                  = 'X'
         is_variant              = ITVARIANT
              it_events               = itevent[]
            is_print                = itprintparams
              it_sort                 = itsort[]
            TABLES
              t_outtab                = imakt
              EXCEPTIONS
              program_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.
      CLEAR:itfieldcat1,itfieldcat.
    ENDFORM.                                                    "list1
    *&      Form  list2
          text
         -->R_UCOMM    text
         -->RS_SELFIELDtext
    FORM list2 USING r_ucomm LIKE sy-ucomm
                      rs_selfield TYPE slis_selfield.
      CASE r_ucomm.
        WHEN '&IC1'.
        IF rs_selfield-fieldname = 'QTY1'.
        LOOP AT IMAKT.
        <b>CONCATENATE file n1 '.PJ' INTO dsn.</b>
       <b> PERFORM DSN.</b>  
       CLEAR DSN.
        N1 = N1 + 1.
        ENDLOOP.
        ENDIF.
    ENDCASE.
    ENDFORM.                                                    "list2
    *&      Form  top
          text
    FORM top.
      DATA:title(70) TYPE c.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
           EXPORTING
              i_list_type           = 0
           IMPORTING
              et_events             = itevent
    EXCEPTIONS
      LIST_TYPE_WRONG       = 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.
      title = 'LABEL'.
      walistheader-typ = 'H'.
      walistheader-info = title.
      APPEND walistheader TO itlistheader.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          it_list_commentary      = itlistheader
        I_LOGO                   = ''.
        I_END_OF_LIST_GRID       =
      CLEAR itlistheader.
    ENDFORM.                    "TOP
    *&      Form  DSN
          text
    -->  p1        text
    <--  p2        text
    <b>form DSN .</b>
    OPEN DATASET dsn FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
    IF sy-subrc <> 0.
    <b>LEAVE TO LIST-PROCESSING</b>
    <b>WRITE:/ 'FILE COULD NOT BE OPENED'.</b>
    EXIT.
    ENDIF.
    MOVE-CORRESPONDING IMAKT TO ITFINAL.
    APPEND ITFINAL.
    TRANSFER 'MDA.LBL' TO dsn.
    TRANSFER '1' TO dsn.
    TRANSFER: ITFINAL-MATNR TO DSN,
              ITFINAL-SPRAS TO DSN,
              ITFINAL-MAKTX TO DSN,
              ITFINAL-LABEL1 TO DSN,
              ITFINAL-QTY1 TO DSN,
              ITFINAL-LABEL2 TO DSN,
              ITFINAL-QTY2 TO DSN.
    <b>if sy-subrc <> 0.</b>
    write:/ 'Check your code'.
    endif.
    CLOSE DATASET DSN.
    ENDFORM.

    Hi Kiran,
    To my understanding your file is not being created cause you have not passed a location for your file to be put. Refer to my below code you see how its done.
    If you need more info let me know.
    TYPES DECLARATIONS                                                   *
    *Data type for Accounting Document Header Table
    TYPES: BEGIN OF gt_bkpf,
             bukrs TYPE bkpf-bukrs,      "Company Code
             belnr TYPE bkpf-belnr,      "Accounting Document Number
             gjahr TYPE bkpf-gjahr,      "Fiscal Year
             budat TYPE bkpf-budat,      "Posting Date
           END OF gt_bkpf.
    *Data type for Accounting Document Segment Table
    TYPES: BEGIN OF gt_bseg,
             bukrs TYPE bkpf-bukrs,        "Company Code
             belnr TYPE bkpf-belnr,        "Accounting Document Number
             gjahr TYPE bkpf-gjahr,        "Fiscal Year
             buzei TYPE bseg-buzei  ,      "Line Item
             shkzg TYPE bseg-shkzg  ,      "Debit/Credit Indicator
             wrbtr TYPE bseg-wrbtr  ,      "Amount in document currency
             kostl TYPE bseg-kostl  ,      "Cost Center
             aufnr TYPE bseg-aufnr  ,      "Project / Order Number
             hkont TYPE bseg-hkont  ,      "General Ledger Account Key
             prctr TYPE bseg-prctr  ,      "Profit Center
             segment  TYPE bseg-segment,      "Segment
             END OF gt_bseg.
    *Data type for Posting Summary Table of given file format
    TYPES: BEGIN OF gt_posting_summary,
             effective_date(10)  TYPE c,       "Date of last tuesday
             company_code(4)     TYPE c,       "Company Code
             gl_key(6)           TYPE c,       "General Ledger Account Key
             cost_centre(10)     TYPE c,       "Cost Center
             profit_centre(10)   TYPE c,       "Profit Center
             project(12)         TYPE c,       "Order Number
             segment(10)         TYPE c,       "Segment for Segmental Reporting
             amount(16)          TYPE c,       "Amount with minor denomination & debit/credit indicator
           END OF gt_posting_summary.
    INTERNAL TABLE DECLARATIONS                                          *
    DATA:
    *Internal table for Accounting Document Header Table
    gi_bkpf              TYPE STANDARD TABLE OF gt_bkpf,
    *Internal table for Accounting Document Segment Table
    gi_bseg              TYPE STANDARD TABLE OF gt_bseg,
    *Internal table for Posting Summary Table of given file format
    gi_posting_summary   TYPE STANDARD TABLE OF gt_posting_summary.
    RANGES DECLARATIONS                                                  *
    DATA:
    *Building ranges table for last saturday to current date
    gr_date  TYPE RANGE OF sy-datum.
    WORK AREA DECLARATIONS                                               *
    DATA:
    *Work area for Accounting Document Segment Table
    gwa_bseg              TYPE gt_bseg,
    *Work area for Accounting Document Segment Table
    gwa_bkpf              TYPE gt_bkpf,
    *Work area for Posting Summary Table of given file format
    gwa_posting_summary   TYPE gt_posting_summary,
    *Work area for ranges table for last saturday to current date
    gwa_date              LIKE LINE  OF gr_date.
    GLOBAL VARIABLE DECLARATIONS                                         *
    DATA: gv_to_date            TYPE sy-datum,
          gv_from_date          TYPE sy-datum,
          gv_effective_date(10) TYPE c,
          gv_posting_amount(16) TYPE c,
          gv_file_name          TYPE string,
          gv_server_file_name   TYPE fileextern,
          gv_suspense_accnt     TYPE hkont,
          gv_amount             TYPE wrbtr.
    GLOBAL CONSTANT DECLARATIONS                                         *
    DATA: gc_x                    TYPE c                     VALUE 'X',
          gc_s                    TYPE bseg-shkzg            VALUE 'S',
          gc_h                    TYPE bseg-shkzg            VALUE 'H',
          gc_i                    TYPE tvarv-sign            VALUE 'I',
          gc_bt                   TYPE tvarv-opti            VALUE 'BT',
          gc_ys                   TYPE bkpf-blart            VALUE 'YS',
          gc_zfii0431             TYPE filepath-pathintern   VALUE 'ZFII0431',
          gc_debit                TYPE c                     VALUE '+',
          gc_credit               TYPE c                     VALUE '-',
          gc_dot                  TYPE c                     VALUE '.',
          gc_suspense_key         TYPE zglkey                VALUE 'SUSPENSE_GL_ACCOUNT'.
       Selection Screen                                                 *
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
    SELECTION-SCREEN SKIP 1.
    *Accounting Document type for eSFA postings
    PARAMETERS       :  p_ys             TYPE bkpf-blart DEFAULT gc_ys.
    SELECTION-SCREEN SKIP 1.
    *Logical Path of file to be downloaded on Application Server
    PARAMETERS       :  p_l_path         TYPE filepath-pathintern DEFAULT gc_zfii0431.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
    SELECT-OPTIONS  :  s_date FOR sy-datum .
    SELECTION-SCREEN END OF BLOCK b2.
    ON LOAD EVENT         - Occurs only once, when the program is loaded *
    LOAD-OF-PROGRAM.
    ************************MAIN PROGRAM************************
    START-OF-SELECTION            - start of database access             *
    START-OF-SELECTION.
    Clear all global variables
      PERFORM clear_memory.
    Routine for calulating date of Last Saturday and Current Tuesday
      PERFORM calculate_posting_dates.
    Routine to select posted G/L records from database
      PERFORM posting_record_selection.
    Routine to compile posting summary table
      PERFORM build_posting_summary.
    Routine to make filename as eSFA_GL_CandC_YYYYMMDD.txt
      PERFORM build_file_name.
    Routine for compile physical path of file on Appln. Server
    from logical path and desired filename.
      PERFORM get_physical_path USING  p_l_path
                                       gv_file_name
                                       gc_x
                             CHANGING  gv_server_file_name.
    Routine to download file on application server
      PERFORM download_on_application_server.
    **************************INCLUDES***************************
      INCLUDE zfi_get_physical_path.
      INCLUDE zfi_file_status_change.
    *************************SUBROUTINES*************************
    *&     Form  calculate_posting_dates
         Routine for calulating date of Last Saturday and Current Tuesday
    FORM calculate_posting_dates .
      DATA: lv_monday    TYPE sy-datum.
    *Get the first day of the week.
      CALL FUNCTION 'BWSO_DATE_GET_FIRST_WEEKDAY'
        EXPORTING
          date_in  = sy-datum
        IMPORTING
          date_out = lv_monday.
    *Calculate the  to date (saturday)
      gv_to_date   =  lv_monday - 2.
    *Calculate the from date (sunday)
      gv_from_date =  lv_monday - 8.
      IF s_date-low IS NOT INITIAL.
        gv_from_date = s_date-low.
      ENDIF.
      IF s_date-high IS NOT INITIAL.
        gv_to_date = s_date-high.
      ENDIF.
    ENDFORM.                    " calculate_posting_dates
    *&      Form  build_posting_summary
          Routine for processing posting summary data table & compile
          in given output file table
    FORM build_posting_summary .
      DATA : lv_kostl      TYPE kostl,
             lv_amount     TYPE wrbtr,
             lv_amount_str TYPE wrbtr.
      DATA : li_posting_summary  TYPE TABLE OF gt_posting_summary.
      DATA : lwa_posting_summary TYPE gt_posting_summary.
      LOOP AT gi_bseg INTO gwa_bseg.
        READ TABLE gi_bkpf INTO gwa_bkpf
             WITH KEY bukrs = gwa_bseg-bukrs
                      belnr = gwa_bseg-belnr
                      gjahr = gwa_bseg-gjahr.
      Routine to calcualte effective date in format YYYY-MM-DD
        PERFORM calculate_effective_date.
        gwa_posting_summary-effective_date =  gv_effective_date.
        gwa_posting_summary-company_code   =  gwa_bseg-bukrs.
        gwa_posting_summary-gl_key         =  gwa_bseg-hkont+4(6).
        gwa_posting_summary-cost_centre    =  gwa_bseg-kostl.
        gwa_posting_summary-profit_centre  =  gwa_bseg-prctr.
        gwa_posting_summary-project        =  gwa_bseg-aufnr.
        gwa_posting_summary-segment        =  gwa_bseg-segment.
      Remove the derived fields created in SAP while posting
        IF gwa_bseg-kostl IS NOT INITIAL OR
           gwa_bseg-aufnr IS NOT INITIAL.
          CLEAR: gwa_posting_summary-profit_centre,
                 gwa_posting_summary-segment.
        ENDIF.
        IF gwa_bseg-aufnr IS NOT INITIAL.
      Substitution for internal order to costcenter for document type 'YS'
          SELECT SINGLE cost_centre
                   INTO lv_kostl
                   FROM ztfi_sub_costctr
                  WHERE internal_order = gwa_bseg-aufnr.
          IF sy-subrc = 0.
            gwa_posting_summary-cost_centre = lv_kostl.
            CLEAR gwa_posting_summary-project.
          ENDIF.
        ENDIF.
        IF gwa_bseg-shkzg = gc_h.
          gwa_bseg-wrbtr = gwa_bseg-wrbtr * -1.
          gwa_posting_summary-amount = gwa_bseg-wrbtr.
        ELSE.
          gwa_posting_summary-amount = gwa_bseg-wrbtr.
        ENDIF.
        APPEND gwa_posting_summary TO gi_posting_summary.
        CLEAR gwa_posting_summary.
        CLEAR gwa_bseg.
      ENDLOOP.        "LOOP AT gi_bseg INTO gwa_bseg
    Sort to find the summary
      SORT gi_posting_summary BY company_code
                                 gl_key
                                 cost_centre
                                 profit_centre
                                 project
                                 segment.
    *Summarise amount for unique entries
      LOOP AT gi_posting_summary INTO gwa_posting_summary.
        lv_amount_str = gwa_posting_summary-amount.
        lv_amount = lv_amount + lv_amount_str.
        AT END OF segment.
          gv_amount = lv_amount.
          PERFORM calculate_amount.
          gwa_posting_summary-amount = gv_posting_amount.
          APPEND gwa_posting_summary TO li_posting_summary.
          CLEAR lv_amount.
        ENDAT.
      ENDLOOP.
    *Copy the summarised table back to summary table
      gi_posting_summary = li_posting_summary.
    ENDFORM.                    " build_posting_summary
    *&      Form  calculate_effective_date
          Routine to calcualte effective date in format YYYY-MM-DD
    FORM calculate_effective_date .
      DATA: lv_date(8)            TYPE c,
            lv_yyyy(4)            TYPE c,
            lv_mm(2)              TYPE c,
            lv_dd(2)              TYPE c,
            lv_effective_date(10) TYPE c.
      DATA: lc_dash               TYPE c VALUE '-'.
      lv_date = gv_to_date.
      lv_yyyy = lv_date+0(4).
      lv_mm   = lv_date+4(2).
      lv_dd   = lv_date+6(2).
      CONCATENATE lv_yyyy
                  lc_dash
                  lv_mm
                  lc_dash
                  lv_dd
             INTO lv_effective_date.
      gv_effective_date = lv_effective_date.
    ENDFORM.                    " calculate_effective_date
    *&      Form  posting_record_selection
          Routine to select posted G/L records from database
    FORM posting_record_selection .
      gwa_date-sign   = gc_i.
      gwa_date-option = gc_bt.
      gwa_date-low    = gv_from_date.
      gwa_date-high   = gv_to_date.
      APPEND gwa_date TO gr_date.
    *Get the suspese GL accout number from ZTFI_SIXPARTKEY table.
      SELECT SINGLE gl_account
              FROM ztfi_sixpartkey
              INTO gv_suspense_accnt
            WHERE sixpartkey = gc_suspense_key .
      IF sy-subrc IS INITIAL.
    Selection of records (other than suspended acc. no. 999999) posted
    between last saturday and current tuesday where document type is 'YS'
        SELECT bukrs       "Company Code
               belnr       "Accounting Document Number
               gjahr       "Fiscal Year
               budat       "Posting Date
          FROM bkpf
          INTO TABLE gi_bkpf
          WHERE blart EQ p_ys
            AND budat IN gr_date.           "Change - MV - 16.04.2007 - FCDK902208
           AND cpudt IN gr_date.
        IF sy-subrc IS NOT INITIAL.
          WRITE / 'No records for current posting period, file not created.'(m03).
        ELSEIF sy-subrc IS INITIAL.
          READ TABLE gi_bkpf INTO gwa_bkpf INDEX 1.
          IF sy-subrc = 0.
            PERFORM calculate_effective_date.
          ENDIF.
      Selection of details of all records selected in above table
          SELECT bukrs          "Company Code
                 belnr          "Document Number
                 gjahr          "fiscal year
                 buzei          "Line Item
                 shkzg          "Debit/Credit Indicator
                 wrbtr          "Amount in document currency
                 kostl          "Cost Center
                 aufnr          "Project / Order Number
                 hkont          "General Ledger Account Key
                 prctr          "Profit Center
                 segment        "Segment
            FROM bseg
            INTO TABLE gi_bseg
            FOR ALL ENTRIES IN gi_bkpf
            WHERE bukrs = gi_bkpf-bukrs
              AND belnr = gi_bkpf-belnr
              AND gjahr = gi_bkpf-gjahr
              AND hkont <> gv_suspense_accnt.
          IF sy-subrc IS NOT INITIAL.
            WRITE / 'No records Found, file not created.'(002).
          ENDIF.
        ENDIF.
      ELSE.
        WRITE / 'Suspense GL account is not maintained in sixpart key look up table'(001).
      ENDIF.
    ENDFORM.                    " posting_record_selection
    *&      Form  calculate_amount
          Routine to concancate amouunt and debit/credit indicator
    FORM calculate_amount .
      DATA: lv_amount(15)   TYPE c,
            lv_amount_1(12)  TYPE c,
            lv_amount_2(2)  TYPE c,
            lv_debit_credit TYPE c.
      IF gv_amount <= 0.
        lv_debit_credit = gc_credit.
        gv_amount = gv_amount * -1.
      ELSE.
        lv_debit_credit = gc_debit.
      ENDIF.
      lv_amount  = gv_amount.
      SPLIT lv_amount AT gc_dot
                    INTO lv_amount_1
                         lv_amount_2.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = lv_amount_1
        IMPORTING
          output = lv_amount_1.
      CONCATENATE lv_amount_1
                  lv_amount_2
             INTO lv_amount
      SEPARATED BY gc_dot.
      CONCATENATE  lv_debit_credit lv_amount INTO gv_posting_amount.
    ENDFORM.                    " calculate_amount
    *&      Form  build_file_name
          Routine to make filename as eSFA_GL_CandC_YYYYMMDD.txt
    FORM build_file_name .
      DATA: lv_date(8)       TYPE c,
            lv_file_name     TYPE string.
      DATA: lc_file_prefix(14) TYPE c VALUE 'eSFA_GL_CandC_',
            lc_file_suffix(4)  TYPE c VALUE '.txt'.
      lv_date = gv_to_date.
      CONCATENATE lc_file_prefix lv_date lc_file_suffix INTO lv_file_name.
      gv_file_name = lv_file_name.
    ENDFORM.                    " build_file_name
    *&      Form  download_on_application_server
          Routine to download file on application server
    FORM download_on_application_server.
      DATA : lv_command   TYPE string,
             lv_lines     TYPE i.
      lv_command   = 'ZFII0431'.
    File should be downloaded only if it is not empty
      IF gi_bseg IS NOT INITIAL.
    Open file for output in text mode
        OPEN DATASET gv_server_file_name FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
        IF sy-subrc IS NOT INITIAL.
          WRITE / 'File could not be open.'(m01).
          EXIT.
        ENDIF.        "IF sy-subrc IS NOT INITIAL
        DESCRIBE TABLE gi_posting_summary LINES lv_lines.
        LOOP AT gi_posting_summary INTO gwa_posting_summary.
          IF sy-tabix <> lv_lines.
          Transfer data to application server
            TRANSFER gwa_posting_summary TO gv_server_file_name.
          ELSE.
          Transfer data to application server with out end of line
            TRANSFER gwa_posting_summary TO gv_server_file_name NO END OF LINE.
          ENDIF.
        ENDLOOP. " LOOP AT gi_posting_summary INTO gwa_posting_summary
    Close file for output in text mode
        CLOSE DATASET gv_server_file_name.
        IF sy-subrc IS NOT INITIAL.
          WRITE / 'File could not be close.'(m02).
          EXIT.
        ELSEIF sy-subrc IS INITIAL.
          WRITE : / 'File Name:', gv_file_name .
          WRITE : / 'File Downloaded to Application Server successfully.'(m04).
        Call the OS command to run Shell script.
          PERFORM change_file_status USING lv_command.
        ENDIF.
      ENDIF.
    ENDFORM.                    " download_on_application_server
    *&      Form  clear_memory
          Clear all global variables
    FORM clear_memory .
      REFRESH: gi_bkpf           ,
               gi_bseg           ,
               gi_posting_summary.
      REFRESH: gr_date.
      CLEAR: gwa_bseg           ,
             gwa_posting_summary,
             gwa_date           .
      CLEAR: gv_from_date       ,
             gv_to_date         ,
             gv_effective_date  ,
             gv_posting_amount  ,
             gv_file_name       ,
             gv_server_file_name.
    ENDFORM.                    " clear_memory
    ***INCLUDE ZFI_GET_PHYSICAL_PATH .
    *&      Form  get_physical_path
          Routine for compile physical path of file on Appln. Server
          from logical path and desired filename.
         -->P_P_L_PATH  text
         -->P_GV_FILE_NAME  text
         -->P_GC_OK  text
         <--P_GV_SERVER_FILE_NAME  text
    FORM get_physical_path  USING    p_p_l_path      TYPE any
                                     p_gv_file_name  TYPE any
                                     p_gc_ok         TYPE any
                            CHANGING p_gv_server_file_name    TYPE any.
      CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
        EXPORTING
          client                     = sy-mandt
          logical_path               = p_p_l_path
          operating_system           = sy-opsys
          file_name                  = p_gv_file_name
          eleminate_blanks           = p_gc_ok
        IMPORTING
          file_name_with_path        = p_gv_server_file_name
        EXCEPTIONS
          path_not_found             = 1
          missing_parameter          = 2
          operating_system_not_found = 3
          file_system_not_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.
      ENDIF.
    ENDFORM.                    " get_physical_path

  • OPEN DATA SET PROBLEM

    Hello ,
    I use the command OPEN DATA SET in order to upload file content from server ,
    the problem is that i getting error :_No such file or directory ._
    the file is exist in server I can see it when i put the path on windows  start->run
    and i give the permission for the folder to everyone .
    1. My question is what i miss here
    2. when i do little test and try to use GUI_UPLOAD i see the file content so i don't understand what is wrong here the file is not on my local PC
    Regards
    James

    hi James,
    the parameter file_name receives the name of the file (ja, ja, ja.......)
    here comes the explanation:
    in the transaction FILE you must define phisical and logical path for a file:
    for example:
    MY_FILE => pointing to the folder /host/temp/
    and here comes the call to the function in your program:
    CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
        EXPORTING
          client                     = sy-mandt
          logical_path               = l_path    " the name of your logical path defined in trx FILE (MY_FILE)
          file_name                  = p_filename " the name of the file you want to read (for example: file.txt     )
        IMPORTING
          file_name_with_path        = file_trg
        EXCEPTIONS
          path_not_found             = 1
          missing_parameter          = 2
          operating_system_not_found = 3
          file_system_not_found      = 4
          OTHERS                     = 5.
    in the variable file_trg you should  get the value /host/temp/file.txt  (from the example)  to do the open dataset.
    sorry about my english
    regards, Sebastiá

  • How to read file from server if I have a logical file path?

    Hi guys,
    I'm having a pretty "on the run" question,
    My program is currently reading a file from server using "open dataset" with file path like this (just example)
    /usr/interface/abc/bcd/testfile.dat
    Now I got a requirement to make it more consistent to read files, instead of reading that physical file name, I should read the files from a specific folder using logical path.
    So I go to T code "FILE" and created a logical path called ZABC_FILE_PATH, unix compatible, with physical path is (for example),
    /usr/interface/<sysid>/<client>/<filename>
    My question is, can I still use open dataset statement to read this? if yes, how do I do that? If no, there should be alternative way, please let me know what you think. Thanks,

    Thanks all, I figured it out.
    ONe thing is that typo double quote
    The other thing is the importing part, I need the full file path.
    CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
      EXPORTING
        CLIENT                           = SY-MANDT
        logical_path                     = 'ZABC_MY_LOGICAL_FILE_PATH'
    *   OPERATING_SYSTEM                 = SY-OPSYS
    *   PARAMETER_1                      = ' '
    *   PARAMETER_2                      = ' '
    *   PARAMETER_3                      = ' '
    *   USE_BUFFER                       = ' '
        file_name                        =  v_1
    *   USE_PRESENTATION_SERVER          = ' '
    *   ELEMINATE_BLANKS                 = 'X'
      IMPORTING
        FILE_NAME_WITH_PATH              = v_what_I_need
    * EXCEPTIONS
    *   PATH_NOT_FOUND                   = 1
    *   MISSING_PARAMETER                = 2
    *   OPERATING_SYSTEM_NOT_FOUND       = 3
    *   FILE_SYSTEM_NOT_FOUND            = 4
    *   OTHERS                           = 5
    I really appreciate your contributions, thanks again!

  • Logical path

    Hi All,
    How to create logical path in SAP.
    thanks in ADV.

    Hi,
    Use the FILE transaction to create the logical file path.
    The table PATH stores this logical file path.
    You can retrieve the physical file path by supplying logical file path to FM FILE_GET_NAME_USING_PATH.
    Hope this helps.
    <b>Please reward points to all helpful answers and close the thread.</b>
    Regards,
    Amit Mishra

  • Entire Table not visible/ transferred to a file on application server

    HI Experts,
    My req is to pass an entire internal table to a file on the application server.
    How ever some of the fields in the table are not shown / transferred when i check that file.
    The fields are not visible when i try to scroll side wise.
    When I download the internal table to an excel all the fileds are present . There is no problem with the internal table that is being transferred.
    Below is the code snippet.
    CLEAR w_filepath.
        MOVE p_file TO w_file_ext.
        CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
          EXPORTING
            logical_path               = c_zstore
            file_name                  = w_file_ext
          IMPORTING
            file_name_with_path        = w_filepath
          EXCEPTIONS
            path_not_found             = 1
            missing_parameter          = 2
            operating_system_not_found = 3
            file_system_not_found      = 4
            OTHERS                     = 5.
        IF sy-subrc NE 0.
          MESSAGE e068(zz_material).
    *   File could not be downloaded to the application server
        ELSE.
          OPEN DATASET w_filepath FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
          IF sy-subrc NE 0.
            MESSAGE e069(zz_material).
    *   Unable to Open File
          ENDIF.
          CLEAR:rec_final.
          LOOP AT t_final INTO rec_final.
            TRANSFER rec_final TO w_filepath.
            CLEAR rec_final.
          ENDLOOP.
          CLOSE DATASET w_filepath.
    Are there any limitations on the no char that can be displayed in one line on the application server.
    Is there any seeting to change that...?

    Hello Abhishek,
    You are not getting the point. AL11 (prog. RSWATCH0) is a simple report used to display the file contents.
    There is a limitation to the maximum length of the file line AL11 can DISPLAY (i.e., 512 characters after applying the notes).
    Please understand what you are seeing in AL11 is the 1st 512 characters of the file width & not the entire file width.
    Hope you get the point.
    BR,
    Suhas

  • Polling SAP directories

    Hello,
    I am hoping someone will be able to help me with my query.
    I am trying to write an ABAP program which poll a SAP directory and then process the files within this directory.
    I am using FM SUBST_GET_FILE_LIST to get the files from the directory but I want to use a logical path (which I have created using the FILE transaction) to specify the location).
    So I am looking for another FM which will return the actual directory from the logical path name. The documentation seems to suggest FILE_GET_NAME but I am not sure whether this works with directory paths rather than file locations.
    If anyone has any suggestions or some example code of this sort of thing please let me know.
    Thanks,
    Ruby

    Hi Jonathan,
    Thanks for your reply.
    I have just tried this and I keep getting "Path not found" error.
    I have created a logical path within the file transaction which is set to:-
    d:\tmp\<FILENAME>              (windows server)
    The call to the FM looks like:-
    CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
      EXPORTING
        CLIENT                           = SY-MANDT
        LOGICAL_PATH                     = 'RUBYS_LOGICAL_PATH'
        FILE_NAME                        = 'dummy.dat'
    IMPORTING
       FILE_NAME_WITH_PATH              = file
    EXCEPTIONS
       PATH_NOT_FOUND                   = 1
       MISSING_PARAMETER                = 2
       OPERATING_SYSTEM_NOT_FOUND       = 3
       FILE_SYSTEM_NOT_FOUND            = 4
       OTHERS                           = 5
    Any ideas on why this is not working?
    Thanks,
    Ruby

  • Any idea how to use AUTHORITY_CHECK_DATASET

    Hello Friends,
       anybody knows how to use these FM 'AUTHORITY_CHECK_DATASET' and FILE_GET_NAME_USING_PATH.
       i know the logical path has been created in my system as 'zzzzz' but i don't how to use that.
    thanks,
    john.

    I know its an old thread, but maybe it helps someone: I used the following code to test the AUTHORITY_CHECK_DATASET:
    REPORT ZTEST1.
    DATA: BEGIN OF ITAB OCCURS 0,
       ATYPE(20),
    END OF ITAB.
    PARAMETER P_FNAME LIKE AUTHB-FILENAME.
    PARAMETERS:P_READ AS CHECKBOX DEFAULT 'X',
    P_WRITE AS CHECKBOX DEFAULT 'X',
    P_RWF AS CHECKBOX DEFAULT 'X',
    P_WWF AS CHECKBOX DEFAULT 'X',
    P_DELETE AS CHECKBOX DEFAULT 'X'.
    CLEAR: ITAB, ITAB[].
    IF P_READ EQ 'X'.
       ITAB-ATYPE = 'READ'.
       APPEND ITAB.
    ENDIF.
    IF P_WRITE EQ 'X'.
       ITAB-ATYPE = 'WRITE'.
       APPEND ITAB.
    ENDIF.
    IF P_RWF EQ 'X'.
       ITAB-ATYPE = 'READ_WITH_FILTER'.
       APPEND ITAB.
    ENDIF.
    IF P_WWF EQ 'X'.
       ITAB-ATYPE = 'WRITE_WITH_FILTER'.
       APPEND ITAB.
    ENDIF.
    IF P_DELETE EQ 'X'.
       ITAB-ATYPE = 'DELETE'.
       APPEND ITAB.
    ENDIF.
    LOOP AT ITAB.
       CALL FUNCTION 'AUTHORITY_CHECK_DATASET'
         EXPORTING
           ACTIVITY = ITAB-ATYPE
           FILENAME = P_FNAME
         EXCEPTIONS
           NO_AUTHORITY = 1
           ACTIVITY_UNKNOWN = 2
         OTHERS = 3.
    CASE SY-SUBRC.
       WHEN 0.
         WRITE:/ 'You have', ITAB-ATYPE, 'access to', P_FNAME.
       WHEN 1.
         WRITE:/ 'You do not have', ITAB-ATYPE, 'access to', P_FNAME.
       WHEN OTHERS.
         WRITE:/ 'Error with function'.
       ENDCASE.
    ENDLOOP.
    Marko

  • Check if files exist using ABAP

    Hi All,
    I'm currently using FM: FILE_GET_NAME_USING_PATH, and I'd like to do a check to see if the filepath with file (i.e. /com/tmp/file.txt) I am getting back exists or not.
    Very simple question, just not sure what to do.
    Thanks,
    John

    There is a class that provides methods to check, if a file exist or if a certain directory does exist
      CALL METHOD cl_gui_frontend_services=>directory_exist
        EXPORTING
          directory            = lv_path
        RECEIVING
          result               = lv_valid
        EXCEPTIONS
          cntl_error           = 1
          error_no_gui         = 2
          wrong_parameter      = 3
          not_supported_by_gui = 4
          OTHERS               = 5.
          CALL METHOD cl_gui_frontend_services=>file_exist
            EXPORTING
              file                 = x_file_with_path
            RECEIVING
              result               = y_file_exists
            EXCEPTIONS
              cntl_error           = 1
              error_no_gui         = 2
              wrong_parameter      = 3
              not_supported_by_gui = 4
              OTHERS               = 5.
    Hope that helps,
    Michael

Maybe you are looking for

  • OS X 10.6.5 Server AFP share - can't change group from 'staff' ???

    Hi, I'm running a new 10.6.5 XServe within a corporate AD environment. Well, when I say 'running' I mean testing - I could never let this odd beast loose on anyone with the awful state it's in. Trying to set up the AFP shares, I simply wanted to assi

  • Bill discounting

    hello, HOW THE BILL DISCOUNTING ACTIVITIES WILL BE INCORPORATED IN SAP? urgent

  • Pre plus changes accounts

    We have 2 pre plus's that we use for business to place orders online. We have over 100 dealers, and when we sign into a dealer account to place an order, the phone will revert to a previous dealer account and if we don't catch it, the order will be p

  • My brand new iMac (late 2012, 27") has a little scratch or something on the screen

    I just bought a new imac 27", later half hour of use I noticed it has a little scratch on the screen, not on the front glass but behind it. too strange to be some dead pixel. Someone can tell me what is? Do AppleCare cover this? If they do, has to be

  • Resizing a browser window to that of Flash

    Hi, With the help from Nadia my Flash files now play on the server.  The only issue I have now is that the Browser window opens full screen instead of the size of the flash player. Is there a way to make the browser only open to the size of the flash