OPEN DATASET FROM BSP OnInputprocessing
Hi Guys!
I try to write a text file to the application server using oninputprocessing method in a bsp application by OPEN DATASET. If I run the BSP applcation in a LAN environment everything goes well, the application creates the file and writes the data. But if I run the same application from WAN the app. retuns with OPEN_DATASET_NO_AUTHORITY. To login users automatically i use a technical user for the internet service of this BSP application - this user is : service type.
The application is achieved on https. The only difference is the IP range (reached application from WAN or LAN).
How could I preform this file creation from WAN (same as it works in LAN environment)
Thanks Héger A
Dear Tobias!
The problem was solved , by using specified roles for the technical user. In this case the roles are giving rigthts for the used areas and is able to reach the app. outside fom LAN
Back to the original question:
Both occasion I use the mentioned webuser without any rights.
But I can use open_datset in a LAN environmet but couldn't from WAN.
I ran the application in test mode logged in sap as a developer user, in se80 rigtht click on default.htm (entering point of webapp) then Test...
Next step sap calls IE and runs the app, but logging in automatically as the technical user
How does SAP "know" the runing environment? - I know is a stupid question, but this mechanism (i.e. in LAN occasion it runs but WAN doesn't run and evreything is the same in both occassion ) is totally ununderstable for me.
The question is why can
Similar Messages
-
Hi,
I have a requirement to open the print-preview of a smartform in the SAPGUI when a link is clicked on the BSP page in the browser. I have created a program which shows the print preview etc. Is there any way of opening up the SAPGUI from the browser with a specific transaction being called and parameters passed from BSP to the SAPGUI?
I dont want to display as PDF unless there is a way to disable downloading or saving of the displayed PDF to the users hard disk. Also printing of the PDF needs to be disabled. This does not seem to be possible from what I have seen in the forums.
Any help will be highly appreciated. Thanks in advance.
Regards
PreetHi,
Thanks for replying so quickly. The SAP version is R/3 Enterprise and I need to open the Wingui. However the issue we are facing is how to pass a dynamic parameter to the R/3 transaction. In the portal we can specify the transaction to call and can pass parameters to it but there seems to be no way of dynamically passing a value to the R/3 transaction.
I hope this makes sense. When the user clicks say a customer number on the webpage, I need to call a Z transaction in R/3 with that customer number passed to it. Is this actually possible?
Regards,
Preet -
I created sample document under the
content management->documents. ( for example word.xls )
I want to link this document to my BSP and want to
open this document from my bsp report application.
How can i do this.
Thank for your help.here is a sample code also...
READ TABLE application->doc-t_attachments
INTO l_attachment
INDEX l_index.
CALL METHOD application->document_display_attachment
EXPORTING
attachment = l_attachment
IMPORTING
s_return = ls_return
file_content = l_file_content
file_content_hex = l_file_content_hex
mime_file_type = l_file_mime_type.
IF NOT ls_return IS INITIAL.
APPEND ls_return TO application->t_return.
ELSE.
CREATE OBJECT cached_response TYPE cl_http_response
EXPORTING add_c_msg = 1.
IF NOT l_file_content IS INITIAL.
cached_response->set_cdata( l_file_content ).
ELSE.
cached_response->set_data( l_file_content_hex ).
ENDIF.
IF l_event_tableview->itemclick = 'ClickName'.
cached_response->set_header_field(
name = if_http_header_fields=>content_type
value = l_file_mime_type ).
cached_response->set_header_field(
name = 'Content-Disposition'
value = 'inline' ).
ELSE.
cached_response->set_header_field(
name = if_http_header_fields=>content_type
value = 'application/x-download' ).
CONCATENATE l_attachment-name '.' l_attachment-type
INTO l_filename.
CONCATENATE 'attachment; filename=' l_filename
INTO l_value.
cached_response->set_header_field(
name = 'Content-Disposition'
value = l_value ).
ENDIF.
cached_response->set_status( code = 200 reason = 'OK' ).
cached_response->server_cache_expire_rel( expires_rel = 180
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_32 = guid.
CONCATENATE runtime->application_url '/' guid INTO l_url.
cl_http_server=>server_cache_upload(
url = l_url
response = cached_response ).
RETURN.
ENDIF.
the method document_display_attachment is in the class
CL_BSP_HAP_DOCUMENT_IF.
Message was edited by: manasa -
Fetch excel file from app. server using open dataset...
Hello Experts,
Our functional consultant is asking me if it possible to get an excel file from the
application server file using OPEN dataset and in background mode? If yes, Please tell me on how to do this.
Thank you guys and take care!Hi Viraylab,
to download this the procedure:
you can use the FM 'EXCEL_OLE_STANDARD_DAT ' for this purpose.
this FM 'EXCEL_OLE_STANDARD_DAT' can be used to start Excel with a new sheet and transfer data from an internal table to the sheet.
Here are some of the parameters:
file_name: Name and path of the Excel worksheet file e.g. ?C:TEMPZTEST?
data_tab: Name of the internal table that should be uploaded to Exvcel
fieldnames: Internal tabel with column headers
How to build the field names table:
data: begin of i_fieldnames occurs 20,
field(60), end of i_fieldnames.
i_fieldnames-field = ?This is column 1?. append i_fieldnames-field.
i_fieldnames-field = ?This is column 2?. append i_fieldnames-field.
to upload follow this:
OPEN DATASET dsn FOR INPUT IN BINARY MODE.
DO.
READ DATASET dsn INTO itab-field.
IF sy-subrc = 0.
APPEND itab.
ELSE.
EXIT.
ENDIF.
ENDDO.
[/code]Rob
or Try this function module.
FILE_READ_AND_CONVERT_SAP_DATA
pass 'XLS' to I_FILEFORMAT..
Dont forgot to Reward me points .....All the very best....
Regards,
Sreenivasa sarma K. -
Parsing Non English characters from OPEN DATASET
Hi Team,
I'm try to download the .txt file using the OPEN DATASET in the windows environment from application server, system language is set up for English.
The problem is, in the .txt file some times I will be getting the non-English characters (Spanish). When I try to download the data into SAP it's not downloading properly eg: ñ when it downloaded into sap it took something like A+_.
My goal is I need to download the Spanish characters properly into sap.
Please advice how to solve this problem.
Thanks,
SelvarajHi Selvaraj!
I haven't checked the situation for 4.5B, nor can I predict exact behavior, but you can give following statement a try:
SET LOCALE LANGUAGE lg.
This should even change content of sy-lange for whole role area (internal session), so change the value back afterwards.
Regards,
Christian -
Open dataset for input don't work after upgrade from 46C to 47
We did an upgrade from 46C to 47, after that all the Z programs that have the sentence "open dataset for input" alwas send a sy-subrc = 8, the curios things is that the sentece "open dataset for output" works ok.
Please I need help to solve this?
En example of code.
PARAMETERS: P_ARCHF(60) OBLIGATORY DEFAULT
'C:\20050900.txt' LOWER CASE.
OPEN DATASET P_ARCHF FOR INPUT IN TEXT MODE.
IF SY-SUBRC <> 0. MESSAGE i001 WITH ARCHIVO. stop. endif.Well, it's telling you that the datset doesn't exist. From the help in 4.7:
OPEN DATASET
Addition 1a
... FOR INPUT
Effect
OPEN ... FOR INPUT opens the file in read mode.
If the file does not exist, OPEN ... FOR INPUT fails with Return Code SY-SUBRC = 8.
Note
If OPEN DATASET is not executed in a Unicode program and if the user has write authorization for the file, the file is opened in read and write mode. Otherwise, it is only opened in read mode.
Rob -
Hello folks,
I would like to know how to open a file in BSP using "open dataset... for input..." command ? Examples will be very useful. I want to read the file and then use it and write in a report.
Please advise.
Ol Pom.in BSP its same like how do you write in ABAP Reports..there is no difference..
YOu can write the code in <b>OnInitialization</b> event.
Let me know if you need more detail..
<i>* Reward each useful answer</i>
Raja T -
OPEN Dataset - Peculiar problem
Hello experts!
I am facing a peculiar problem with ABAP keyword OPEN DATASET.
I have a directory to which I am adding new files using OPEN DATASET FOR OUTPUT.. this works perfectly fine in the Consolidation system. But the same thing does'nt work in the Production system! It return SY-SUBRC = 8
After reading several other posts on SDN and other forums, the following causes were touted.
1) Path incorrect
2) No Authorization
But upon checking, neither of the wo are possible because the path is maintained properly and the authorizations at OS level are given (R/W) to this folder. Moreover, the user has S_DATASET auth object!!
Then I read somewhere else that having multiple Application Servers could be a possible cause and that running the code as a background job would be afix.. Is it so?
Even if it is, the application is in ABAP Web Dynpro and is launched from the portal.. hence launching it as a background job is not an option... Any solutions?????
Any help on this would be appreciated...
Thanks in advance, AmithHi,
Yes this is true that if we are having the multiple application server then this kind of error occures if your specified directory is not mapped on the alll the avaiable sAP application servers.
I guess when ever you are running your application then system will pick the appkication server based on the present load. Hence if your directory is not mapped in that application server then you wil get this kind of issues,
so i guess check with you basis team that spctified path is avaiable in all the application server. -
OPEN DATASET FOR INPUT IN TEXT MODE - linesize issue
Hi,
I faced a problem when opened ANSI file with CYRILLIC in ECC 6.0 Unicode system - the system cuts the line to 250 characters. Below is snip of code:
REPORT Z_TEST_01 LINE-SIZE 1023.
DATA:
file TYPE char40 VALUE 'ansi_file.txt',
line TYPE char1024, len TYPE i.
OPEN DATASET file FOR INPUT IN TEXT MODE ENCODING DEFAULT.
WHILE sy-subrc = 0.
READ DATASET file INTO line ACTUAL LENGTH len.
WRITE: / len, line.
ENDWHILE.
CLOSE DATASET file.
In this case, variable LEN always get value 250. File-content is correctly converted from ANSI and all CYRILLIC is displayed to the screen. I changed type for LINE - initialy the type was STRING, actially.
Further, tried to open it in BINARY - like this:
DATA:
file TYPE char40 VALUE 'ansi_file.txt',
line TYPE char1024, len TYPE i.
FIELD-SYMBOLS <hex_container> TYPE x.
OPEN DATASET file FOR INPUT IN BINARY MODE.
ASSIGN line TO <hex_container> CASTING.
DO.
READ DATASET file INTO <hex_container>.
IF sy-subrc = 0.
WRITE: / line.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET file.
WRITE: / line.
In this case I got bigger linesize (obviously 1024), but faced conversion issues - the file contains some CYRILLIC and it is messed. Played for few hours with conversions - using additions: IN LEGACY BINARY MODE... BIG/LITTLE ENDIAN, CODE PAGE... without success. So decided to ask...
Well, I searched SDN for a similar issue, but didn't found, except this one:
Re: OPEN DATASET STRING Problem
Could someone points me what am I doing wrong? How can I read my ANSI file with line-size more than 250 chars? Actually, in my case line size may vary up to 1800 chars. Further, afrer conversion and some validation, I should save it back to the AS.
Many thans in advance.
Regards,
Ivaylo MutafchievSorry for the noise - it is not an issue anymore.
-
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 DATASET FOR OUTPUT IN LEGACY TEXT MODE not working!
Hi All,
I need your expertise to help me with my problem.
The program passed through the code OPEN DATASET ... FOR OUTPUT IN LEGACY TEXT MODE. Then it gave an error message "Error Accessing File /home/sap/sample.txt".
I would like to know what are the causes of this error. Please explain to me further why the program gives an error message specified above because I'm not familiar in OPEN DATASET.
Please reply asap since the issue need to be resolved immediately.
Thanks in advance,
CarinaHi Carmey,
The Problem will u need toi get Open Dataset Authorisation from ur Basis Team from the Specified Path.
Regards,
Morris Bond.
Reward Points if Helpful. -
File not found in shared folder when transferred through Open Dataset
Dear Experts,
I am transferring a file to a shared folder using open dataset .
The sy-subrc value returns as 0 . But i am not able to find the file in the destined path.
But when i try to retrieve the file from the same path through CG3Y to my local PC , i am able to retrieve the file.
Could you please throw some light into this as to why this is happening.
With Regards,
Syed Ibrahim GHi venkat,
Sorry for the delayed response . The Authority check FM also returns the sy-subrc value 0 .
But still not able to find the File . I am Trying to paste the data through FTP_R3_To_SERVER . But it is not supporting Non-English Characters. Is there any way to paste the file through FTP ( with Non English Characters ).
{code}
call function 'FTP_CONNECT'
exporting
user = user
password = pwd
host = host
rfc_destination = dest
importing
handle = hdl.
if sy-subrc = 0.
CALL FUNCTION 'FTP_R3_TO_SERVER'
EXPORTING
handle = hdl
fname = FNAME
* BLOB_LENGTH =
character_mode = 'X'
TABLES
* BLOB =
text = it_data1
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
endif.
{code}
With Regards,
Syed Ibrahim G -
Dear All,
I am trying to upload a text file in application server. But I am getting the run time error which says-
" For the statement
"TRANSFER f TO ..."
only character-type data objects are supported at the argument position
"f".
In this case. the operand "f" has the non-character-type "u". The
current program is a Unicode program. In the Unicode context, the type
'X' or structures containing not only character-type components are
regarded as non-character-type."
If I remove the quantity fields then the error does not happen. But I have to take quantity fields also. Plz tell me what to do. My code is,
DATA FILENAME like rlgrap-filename VALUE 'MIGO_VALUE.txt'.
TABLES VBAK.
DATA D_MSG_TEXT(50).
DATA : BEGIN OF it_mseg OCCURS 0,
mblnr TYPE mseg-mblnr,
mjahr TYPE mseg-mjahr,
matnr TYPE mseg-matnr,
* erfmg TYPE mseg-erfmg,
werks TYPE mseg-werks,
lgort TYPE mseg-lgort,
END OF it_mseg.
DATA wa LIKE it_mseg.
SELECT mblnr mjahr matnr werks lgort FROM mseg INTO CORRESPONDING FIELDS OF TABLE it_mseg WHERE bwart = '101'.
SORT it_mseg BY mblnr.
OPEN DATASET FILENAME FOR OUTPUT IN TEXT MODE ENCODING DEFAULT
MESSAGE D_MSG_TEXT.
if sy-subrc eq 0.
message 'File created succesfully in SAP System'(002) type 'S'.
endif.
IF SY-SUBRC NE 0.
WRITE: 'File cannot be opened. Reason:', D_MSG_TEXT.
EXIT.
ENDIF.
* Transferring Data
LOOP AT it_mseg INTO wa.
TRANSFER wa to filename.
ENDLOOP.
* Closing the File
CLOSE DATASET FILENAME.
Thanks,
Tripod.Thanks Sri for your help. I tried to apply the logic, but the error i am getting here is -
"IT_MSEG-ERFMG" must be a character-like data object (data type C, N,D, T, or STRING) STRING).
Same case here, if I remove ERFMG field, i do not get such error.
data ld_string type string.
LOOP AT it_mseg INTO wa.
CONCATENATE it_mseg-mblnr it_mseg-mjahr it_mseg-matnr it_mseg-erfmg it_mseg-werks it_mseg-lgort INTO ld_string.
endloop.
With regards,
Tripod. -
Open Dataset for XML not reading the XML file, Returning Code 8.
Dear all,
Im trying to open an XML file using Open Dataset, since i have to execute this report in background and GUI_upload doesnt work in background.
The XML file is available in my C:\, say, C:\xmlfile.xml.
But the open dataset is not reading any value into the g_xml_line . it is returning sy-subrc = 8.
Below is my code for that, can anybody help me out to resolve.
DATA : lv_filename LIKE rlgrap-filename.
CLEAR: lv_filename.
lv_filename = p_input.
OPEN DATASET lv_filename FOR INPUT IN BINARY MODE.
IF sy-subrc ne 0.
WRITE:/ 'invalid file'.
else.
DO.
READ DATASET lv_filename INTO g_xml_line.
IF sy-subrc EQ 0.
APPEND g_xml_line TO g_xml_table.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET lv_filename.
ENDIF.
TYPES: BEGIN OF t_xml_line,
data(256) TYPE x,
END OF t_xml_line.
DATA: g_xml_table TYPE TABLE OF t_xml_line,
g_xml_line TYPE t_xml_line,
g_xml_table_size TYPE i.
GET REFERENCE OF gt_person INTO gs_result_xml-value.
gs_result_xml-name = 'IPIX'.
APPEND gs_result_xml TO gt_result_xml.
Perform the XSLT stylesheet
TRY.
CALL TRANSFORMATION zaum_manh_sync_rpt
SOURCE XML g_xml_table
RESULT (gt_result_xml).
CATCH cx_root INTO gs_rif_ex.
gs_var_text = gs_rif_ex->get_text( ).
MESSAGE gs_var_text TYPE 'E'.
ENDTRY.
Kindly suggest me a solution. Points assured
regs,
rajaAfter saving the file , below is the code i wrote, but it gives a runtime error with message
No roll storage space of length 3788808 available for internal storage.
***Coding****
PARAMETERS: p_file TYPE pathintern LOWER CASE DEFAULT '/usr/sap/DEV/SYS/global/XMLABAP2.XML'.
DATA : lv_filename LIKE rlgrap-filename.
CLEAR: lv_filename.
lv_filename = p_file.
DATA: l_fname TYPE filename-fileintern. " File name
*GET THE FILENAME FROM THE APPLICATION SERVER
CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
EXPORTING
directory = p_file
filemask = '*'
IMPORTING
serverfile = l_fname
EXCEPTIONS
canceled_by_user = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*/usr/sap/DEV/SYS/global/substanc
lv_filename = l_fname.
OPEN DATASET lv_filename FOR INPUT IN BINARY MODE.
IF sy-subrc NE 0.
WRITE:/ 'invalid file'.
ELSE.
DO.
READ DATASET lv_filename INTO g_xml_line.
IF sy-subrc EQ 0.
APPEND g_xml_line TO g_xml_table.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET lv_filename.
ENDIF. -
Problem writing file ANSI to UTF-8. OPEN DATASET FOR OUTPUT IN TEXT MODE
Hello everybody,
My report needs to create a file in ANSI so I am using this sentence: * "OPEN DATASET p_dir_a FOR OUTPUT IN TEXT MODE ENCODING DEFAULT."* almost all charters in the file are well generating excepting for this two: ( Á ) & ( Í ) because SAP assigns the same code to both characters ( Ã? ) = 'xC3' which is not correct, the right code should be ( Á ) = 'xC1' ( Í ) = 'xCD' respectively
from this string = ( ÁÉÍÓÚáéíóúàèìòùÀÈÌÒÙ ) only those two characters are wrong converted.
Also I tray to catch a conversion error with this sentence:
TRY.
TRANSFER <field> TO p_dir_a NO END OF LINE.
CATCH cx_sy_conversion_codepage.
MESSAGE 'error' type 'I'.
ENDTRY.
but never enters in it.
Does anyone know where I can configure SAP to SET this value correctly?
Thanks for your help.was a server problem, not SAP
Maybe you are looking for
-
Sender Mail adapter encounters MalformedInputException
I have a sender mail adapter that processes the attached .csv file. All is working fine. I use FCC in module to convert the attachment and pass to an IDOC adapter for processing in SAP system. My problem is sometimes the sender mail CC fails with .
-
Hey Arch, I'm having a bit of trouble with my audio and was hoping you guys could assist me with it/simplify it. Incase no one reads all the way to the bottom, basically I'm wondering if theres a way of just using one audio system and not having to w
-
Im trying to link a .pdf to my Dreamweaver document so that readers can view online. I added the .pdf as an asset in Dreamweaver and linked it just as I would any other link. However when I view it I get this message: "The Adobe Acrobat/Reader that
-
How to change the Server email sender's name
We send email alerts from B1, but when they come from the system they go out with the return address of the email placed in the company details e-mail adress. This is OK but the Name that goes to the recipient says 'Server', Is there any way to chang
-
Duplicate email replies in Mail?
When I reply to someone and I look at the 'chain' conversation, all of my replies are shown twice on my screen, but the other person is only seeing 1 of them like they should. What's going on?