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 -
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
Jameshi 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! -
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 -
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,
RubyHi 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,
JohnThere 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
-
hello, HOW THE BILL DISCOUNTING ACTIVITIES WILL BE INCORPORATED IN SAP? urgent
-
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