Field Symbols-Ascii to Char
Hi,
My requirement is to cocatenate the characters A-Z to F0001, I am using the below code that actually converts the Ascii value to a char( found through the net), but it is giving error.
Can anybody solve my problem
data : asci type i value 65.
data : x1 type x,
x2 type string.
field-symbols : <fc> type c.
while counter <> num.
move asci to x1.
assign x1 to <fc> casting. <<<<<<<<< error in this line
write <fc> to x2.
if asci le 91.
asci = asci + 1.
else.
asci = 65.
endif.
CONCATENATE val1 x2 INTO val.
it_itab-var1 = val.
APPEND it_itab.
CLEAR it_itab.
counter = counter + 1.
endwhile.
Error :
The length of "X1" in bytes must be a multiple of the size of a Unicode
character, regardless of the size of the Unicode character.
and if I write assign asci to <fc> casting. this will append # rather than the char value.
Need response ASAP.
Thanks in advance.
Pooja
Pooja,
By chance did u execute all of my code.
here i'm appending ur string with the ascii
CONCATENATE val1 x3 INTO val.
I got the result as F001A....F001Z.
Pl. execute the entire code.
I feel, i got ur question
thanks
Mahesh
Edited by: Mahesh Reddy on Feb 25, 2009 1:16 PM
Similar Messages
-
Field Symbols - STRING to CHAR
Hi Friends,
I have a STRING data type declared and Iam trying to pass this data to system function 'C_RSTS_WRITE' for some requirement as below. But it gives me SY-SUBRC as 16. But it works for CHAR datatype which I dont want to use as I have some other reason.
CALL 'C_RSTS_WRITE'
ID 'HANDLE' FIELD hlp_handle
ID 'BUFF' FIELD buffer
ID 'RC' FIELD _rc
ID 'ERRMSG' FIELD errmsg. "#EC CICCALL
My Question is:
Can we achieve this using Field-Symbols using CASTING.
In other way can I declare the Field Symbol as CHAR datatype (with no fixed length) which I use in system function and I will pass the STRING data to that field-symbol.
Please confirm.
Thanks,
Smitha.Hi Smitha,
Can u share, how u solved the problem. I have to do the same thing.
If possible, please email me the code - silbizkit at gmail.com
Thanks -
Hi all,
I iterate over a work area assigning each field to a field symbol which is then concatenated to a string that is written to a dataset. When I encounter a quantity field the progam dumps...the quantity field is not compatible with the string. I then decided to write the field symbol to a char variable before the concatenate...problem here is I have to define the length of the char first...what I want to do is set the length of the char variable dynamically...depending on the lenght of the field symbol just read in....can i do that?
regards,
MatI finally realized that I was using WRITE when I should have been saying MOVE!!!
My solution entailed the following...suggestions on how I might improve are welcome:
*======================================================================
Loop over the record set and populate the data set
*======================================================================
READ TABLE gt_supply_demand INDEX 1 INTO wa_supply_demand.
ASSIGN wa_supply_demand TO <F1>.
DESCRIBE FIELD <F1> TYPE l_type COMPONENTS l_col_count.
LOOP AT gt_supply_demand INTO wa_supply_demand.
l_index = 1.
DO l_col_count TIMES.
ASSIGN COMPONENT l_index OF STRUCTURE <F1> TO <F2>.
MOVE <F2> TO l_temp_field.
CONCATENATE l_row l_temp_field INTO l_row SEPARATED BY CON_TAB.
l_index = l_index + 1.
ENDDO.
TRANSFER l_row TO ds_file.
CLEAR wa_supply_demand.
CLEAR l_row.
ENDLOOP. -
How to convert ASCII to CHAR?
Hi, experts.
Now I want to convert ASCII to CHAR, can you give me some methods? And I also want to know what's my ABAP Version.
Thanks in advance!*After look so bad code that no work i did my own code, a gift for all you:*
FORM CHARACTER_ASCII using p_letra
changing p_nro type i.
field-symbols: <n> type x.
assign p_letra to <n> casting.
move <n> to p_nro.
ENDFORM.
FORM ASCII_CHARACTER using p_nro type i
changing p_letra.
DATA: c TYPE c,
x(4) TYPE x.
FIELD-SYMBOLS: <fc> TYPE c.
x = p_nro.
ASSIGN x to <fc> CASTING TYPE c.
MOVE <fc>+1(1) to p_letra.
ENDFORM. -
RUn time error while saving po Field symbol has not yet been assigned.
Hi Experts,
I am getting abap dump while saving PO in ME21N plz seee the below dump plzzzzzzzzzzzzzzzzzzzzz help me
Runtime Errors GETWA_NOT_ASSIGNED
Date and Time 19.06.2009 11:24:46
Short dump has not been completely stored (too big)
Short text
Field symbol has not yet been assigned.
What happened?
Error in the ABAP Application Program
The current ABAP program "SAPLKKBL" had to be terminated because it has
come across a statement that unfortunately cannot be executed.
What can you do?
Note down which actions and inputs caused the error.
To process the problem further, contact you SAP system
administrator.
Using Transaction ST22 for ABAP Dump Analysis, you can look
at and manage termination messages, and you can also
keep them for a long time.
Error analysis
You attempted to access an unassigned field symbol
(data segment 106).
This error may occur if
- You address a typed field symbol before it has been set with
ASSIGN
- You address a field symbol that pointed to the line of an
internal table that was deleted
- You address a field symbol that was previously reset using
UNASSIGN or that pointed to a local field that no
longer exists
- You address a global function interface, although the
respective function module is not active - that is, is
not in the list of active calls. The list of active calls
can be taken from this short dump.
How to correct the error
If the error occures in a non-modified SAP program, you may be able to
find an interim solution in an SAP Note.
If you have access to SAP Notes, carry out a search with the following
keywords:
"GETWA_NOT_ASSIGNED" " "
"SAPLKKBL" or "LKKBLF99"
"GEN_FIELD_OUT2"
If you cannot solve the problem yourself and want to send an error
notification to SAP, include the following information:
1. The description of the current problem (short dump)
To save the description, choose "System->List->Save->Local File
(Unconverted)".
2. Corresponding system log
Display the system log by calling transaction SM21.
Restrict the time interval to 10 minutes before and five minutes
after the short dump. Then choose "System->List->Save->Local File
(Unconverted)".
3. If the problem occurs in a problem of your own or a modified SAP
program: The source code of the program
In the editor, choose "Utilities->More
Utilities->Upload/Download->Download".
4. Details about the conditions under which the error occurred or which
actions and input led to the error.
em environment
SAP-Release 700
Application server... "gplqty"
Network address...... "128.12.0.19"
Operating system..... "Windows NT"
Release.............. "5.2"
Hardware type........ "8x AMD64 Level"
Character length.... 16 Bits
Pointer length....... 64 Bits
Work process number.. 0
Shortdump setting.... "full"
Database server... "GPLQTY"
Database type..... "MSSQL"
Database name..... "GPQ"
Database user ID.. "gpq"
Char.set.... "C"
SAP kernel....... 700
created (date)... "Aug 4 2008 02:33:25"
create on........ "NT 5.2 3790 Service Pack 1 x86 MS VC++ 14.00"
Database version. "SQL_Server_8.00 "
Patch level. 172
Patch text.. " "
Database............. "MSSQL 7.00.699 or higher, MSSQL 8.00.194"
SAP database version. 700
Operating system..... "Windows NT 5.0, Windows NT 5.1, Windows NT 5.2, Windows
NT 6.0"
Memory consumption
Roll.... 16192
EM...... 16759360
Heap.... 0
Page.... 237568
MM Used. 12036016
MM Free. 530432
er and Transaction
Client.............. 410
User................ "SAP_SUPPORT"
Language key........ "E"
Transaction......... "ME21N "
Transactions ID..... "9E955CDE97CBF1648B4C001A64C7B85A"
Program............. "SAPLKKBL"
Screen.............. "SAPLKKBL 0500"
Screen line......... 3
Information on where terminated
Termination occurred in the ABAP program "SAPLKKBL" - in "GEN_FIELD_OUT2".
The main program was "RM_MEPO_GUI ".
In the source code you have the termination point in line 2908
of the (Include) program "LKKBLF99".
Source Code Extract
Line SourceCde
2878 else.
2879 assign <fs11> to <field>.
2880 gs_fc = gs_sfc11.
2881 endif.
2882 when 012.
2883 if gs_out_flags-slave ne 'X'.
2884 assign <fm12> to <field>.
2885 gs_fc = gs_mfc12.
2886 else.
2887 assign <fs12> to <field>.
2888 gs_fc = gs_sfc12.
2889 endif.
2890 when 013.
2891 if gs_out_flags-slave ne 'X'.
2892 assign <fm13> to <field>.
2893 gs_fc = gs_mfc13.
2894 else.
2895 assign <fs13> to <field>.
2896 gs_fc = gs_sfc13.
2897 endif.
2898 when 014.
2899 if gs_out_flags-slave ne 'X'.Hi,
this error occurs when you try to address a field-symbol before it has been assigned to a field or
the assignment has failed.
Use following code to remove this dump
Assign <mara-matnr> to <fs>.
if sy-subrc <> 0.
Error Message.
Endif.
Hope it helps,
Raj -
Problem with field-symbol values not updating
H i ,
I have following piece of code :
Assigning Dynamic Table to Field Symbol
ASSIGN ist_dyn_table->* TO <gs_dyn_table>.
* Creating Structure for dynamic table
CREATE DATA gs_dyn_line LIKE LINE OF <gs_dyn_table>.
* Creating line type for the Dynamic Values
ASSIGN gs_dyn_line->* TO <gs_line>.
* Populating values in the dynamic table
LOOP AT ist_pwcl_main INTO wa_pwcl_main.
ASSIGN COMPONENT gc_fld_werks OF STRUCTURE <gs_line> TO <gs_field>.
1 IF sy-subrc EQ 0.
2 <gs_field> = wa_pwcl_main-werks.
3 ENDIF.
5 IF <gs_field> IS ASSIGNED.
6 <gs_field> = wa_pwcl_main-vbeln.
ENDIF.
7 IF <gs_field> IS ASSIGNED.
8 <gs_field> = wa_pwcl_main-posnr.
ENDIF.
IF <gs_field> IS ASSIGNED.
<gs_field> = wa_pwcl_main-quant.
ENDIF.
on debugging at line 2 <gs_filed> contains the value of werks .
but at line 6 <gs_field> contains value of vbeln as 0 and at 8 of posnr as 0 .
What can be the problem ? Other values are getting assigned properly .
Plz help ...
Regards .Hi,
Assigning Dynamic Table to Field Symbol
ASSIGN ist_dyn_table->* TO <gs_dyn_table>.
Creating Structure for dynamic table
CREATE DATA gs_dyn_line LIKE LINE OF <gs_dyn_table>.
Creating line type for the Dynamic Values
ASSIGN gs_dyn_line->* TO <gs_line>.
Populating values in the dynamic table
LOOP AT ist_pwcl_main INTO wa_pwcl_main.
ASSIGN COMPONENT gc_fld_werks OF STRUCTURE <gs_line> TO <gs_field>.
1 IF sy-subrc EQ 0.
2 <gs_field> = wa_pwcl_main-werks.
3 ENDIF.
5 IF <gs_field> IS ASSIGNED.
6 <gs_field> = wa_pwcl_main-vbeln.
ENDIF.
7 IF <gs_field> IS ASSIGNED.
8 <gs_field> = wa_pwcl_main-posnr.
ENDIF.
IF <gs_field> IS ASSIGNED.
<gs_field> = wa_pwcl_main-quant.
ENDIF.
Based on your coding above, <gs_field> has been assigned with data type 'WERKS' (i'd assume component gc_fld_werks found from structure <gs_line> is a plant typed), which is a CHAR(4) data type.
Meaning, if <gs_field> is assigned with Plant type value, e.g. <gs_field> = '1000', field symbol <gs_field> will contain 4 character only.
At line 6, if wa_pwcl_main-vbeln = '0000201000', <gs_field> is only capturing '0000' only. This is also happened to line 8.
However, it looks like that <gs_field> is getting over-write if ASSIGNED statement returns SY-SUBRC = 0.
Hope this helps.
Regards,
Patrick -
I can't use my field-symbols in my select statement...
Hello experts,
I am have been having problems with my report for the past days. My problem is,
I declared a dynamic field symbol so that I can use it in my select statement
instead of the standard internal table. But it is giving me a dump. Below is my code:
REPORT zfr_forex_rev_acctg
NO STANDARD PAGE HEADING
LINE-COUNT 0
LINE-SIZE 100.
Data dictionary tables *
TABLES: bsis,
bsas,
tcurr,
t001.
FIELD-SYMBOLS: <fs_dyntable> TYPE STANDARD TABLE,
<fs_dynline> TYPE ANY,
<fs_fld> TYPE ANY,
<fs_data> TYPE REF TO data,
<fs_1> TYPE ANY,
<fs_2> TYPE ANY TABLE.
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
METHODS: build_table,
get_data,
combine_data,
display_header,
display_results.
PRIVATE SECTION.
TYPES: BEGIN OF t_bsis_bsas,
zuonr TYPE bsis-zuonr,
gjahr TYPE bsis-gjahr,
belnr TYPE bsis-belnr,
bldat TYPE bsis-bldat,
waers TYPE bsis-waers,
blart TYPE bsis-blart,
dmbtr TYPE bsis-dmbtr,
wrbtr TYPE bsis-wrbtr,
hkont TYPE bsis-hkont,
amount TYPE bsis-wrbtr,
END OF t_bsis_bsas.
DATA: it_bsis_bsas TYPE STANDARD TABLE OF t_bsis_bsas,
v_counter TYPE i.
data declarations for internal table
DATA: lt TYPE lvc_t_fcat,
ls TYPE lvc_s_fcat,
fldname(50) TYPE c,
it_ddfields TYPE TABLE OF ddfield,
wa_ddfields LIKE LINE OF it_ddfields.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD build_table
METHOD build_table.
DATA: lv_from TYPE bsis-gjahr,
lv_asof TYPE bsis-gjahr,
lv_check TYPE i,
lt_data TYPE REF TO data,
lt TYPE lvc_t_fcat.
FIELD-SYMBOLS: <fs_year> TYPE gjahr.
ASSIGN lv_asof TO <fs_year>.
lv_from = p_year.
lv_asof = p_asof+0(4).
v_counter = lv_asof - lv_from.
wa_ddfields-fieldname = 'ZUONR'.
wa_ddfields-position = '0001'.
wa_ddfields-datatype = 'CHAR'.
wa_ddfields-leng = '000018'.
wa_ddfields-decimals = '00000'.
APPEND wa_ddfields TO it_ddfields.
wa_ddfields-fieldname = 'GJAHR'.
wa_ddfields-position = '0002'.
wa_ddfields-datatype = 'NUMC'.
wa_ddfields-leng = '000004'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
wa_ddfields-fieldname = 'BELNR'.
wa_ddfields-position = '0003'.
wa_ddfields-datatype = 'CHAR'.
wa_ddfields-leng = '000010'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
wa_ddfields-fieldname = 'BLDAT'.
wa_ddfields-position = '0004'.
wa_ddfields-datatype = 'DATS'.
wa_ddfields-leng = '000008'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
wa_ddfields-fieldname = 'WAERS'.
wa_ddfields-position = '0005'.
wa_ddfields-datatype = 'CUKY'.
wa_ddfields-leng = '000005'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
wa_ddfields-fieldname = 'BLART'.
wa_ddfields-position = '0006'.
wa_ddfields-datatype = 'CHAR'.
wa_ddfields-leng = '000002'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
wa_ddfields-fieldname = 'DMBTR'.
wa_ddfields-position = '0007'.
wa_ddfields-datatype = 'CURR'.
wa_ddfields-leng = '000013'.
wa_ddfields-decimals = '000002'.
APPEND wa_ddfields TO it_ddfields.
wa_ddfields-fieldname = 'WRBTR'.
wa_ddfields-position = '0008'.
wa_ddfields-datatype = 'CURR'.
wa_ddfields-leng = '000013'.
wa_ddfields-decimals = '000002'.
APPEND wa_ddfields TO it_ddfields.
wa_ddfields-fieldname = 'HKONT'.
wa_ddfields-position = '0009'.
wa_ddfields-datatype = 'CHAR'.
wa_ddfields-leng = '000010'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
wa_ddfields-fieldname = 'AMOUNT'.
wa_ddfields-position = '0010'.
wa_ddfields-datatype = 'CURR'.
wa_ddfields-leng = '000010'.
wa_ddfields-decimals = '000002'.
APPEND wa_ddfields TO it_ddfields.
DATA: lv_position TYPE i.
lv_position = 0011.
WHILE lv_check < v_counter.
<fs_year> = lv_asof.
wa_ddfields-fieldname = <fs_year>.
wa_ddfields-position = lv_position.
wa_ddfields-datatype = 'NUMC'.
wa_ddfields-leng = '000004'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
lv_asof = lv_asof - 1.
ADD 1 TO: lv_check, lv_position.
ENDWHILE.
CLEAR lv_position.
lv_position = 1.
LOOP AT it_ddfields INTO wa_ddfields.
ls-col_pos = lv_position.
ls-row_pos = lv_position.
ls-fieldname = wa_ddfields-fieldname.
APPEND ls TO lt.
ADD 1 TO lv_position.
ENDLOOP.
CLEAR lv_position.
ASSIGN lt_data TO <fs_data>.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt
IMPORTING
ep_table = <fs_data>
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ASSIGN <fs_data>->* TO <fs_1>.
ASSIGN <fs_1> TO <fs_2>.
ASSIGN <fs_1> TO <fs_dyntable>.
ENDMETHOD.
METHOD get_data
METHOD get_data.
*get records from BSIS
SELECT zuonr gjahr belnr bldat waers blart dmbtr wrbtr hkont
FROM bsis
INTO CORRESPONDING FIELDS OF TABLE <fs_dyntable>
WHERE bukrs = p_bukrs
AND hkont IN s_hkont
AND budat <= p_asof.
*get records from BSAS
SELECT zuonr gjahr belnr bldat waers blart dmbtr wrbtr hkont
FROM bsas
APPENDING CORRESPONDING FIELDS OF TABLE <fs_dyntable>
WHERE bukrs = p_bukrs
AND hkont IN s_hkont
AND budat <= p_asof
AND augdt > p_asof.
ENDMETHOD.
START-OF-SELECTION.
DATA: main TYPE REF TO lcl_main.
CREATE OBJECT main.
CALL METHOD main->build_table.
CALL METHOD main->get_data.
Need help on this problem. Thanks a lot guys and take care!Hi guys,
I found out the problem and Andreas is right. Now, I am having problems when including DMBTR, WRBTR in my select statement. All the others are ok. Here is my modified code. Please suggest what I need to add/modify. Thanks a lot!
CLASS lcl_main IMPLEMENTATION.
METHOD build_table
METHOD build_table.
DATA: lv_from TYPE bsis-gjahr,
lv_asof TYPE bsis-gjahr,
lv_check TYPE i,
lt_data TYPE REF TO data,
lt TYPE lvc_t_fcat.
FIELD-SYMBOLS: <fs_year> TYPE gjahr.
ASSIGN lv_asof TO <fs_year>.
lv_from = p_year.
lv_asof = p_asof+0(4).
v_counter = lv_asof - lv_from.
ZUONR
wa_ddfields-fieldname = 'ZUONR'.
wa_ddfields-position = '0001'.
wa_ddfields-datatype = 'CHAR'.
wa_ddfields-leng = '000018'.
wa_ddfields-decimals = '00000'.
APPEND wa_ddfields TO it_ddfields.
GJAHR
wa_ddfields-fieldname = 'GJAHR'.
wa_ddfields-position = '0002'.
wa_ddfields-datatype = 'NUMC'.
wa_ddfields-leng = '000004'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
BELNR
wa_ddfields-fieldname = 'BELNR'.
wa_ddfields-position = '0003'.
wa_ddfields-datatype = 'CHAR'.
wa_ddfields-leng = '000010'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
BLDAT
wa_ddfields-fieldname = 'BLDAT'.
wa_ddfields-position = '0004'.
wa_ddfields-datatype = 'DATS'.
wa_ddfields-leng = '00008'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
WAERS
wa_ddfields-fieldname = 'WAERS'.
wa_ddfields-position = '0005'.
wa_ddfields-datatype = 'CUKY'.
wa_ddfields-leng = '000005'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
BLART
wa_ddfields-fieldname = 'BLART'.
wa_ddfields-position = '0006'.
wa_ddfields-datatype = 'CHAR'.
wa_ddfields-leng = '000002'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
DMBTR
wa_ddfields-fieldname = 'DMBTR'.
wa_ddfields-position = '0007'.
wa_ddfields-datatype = 'CURR'.
wa_ddfields-leng = '000013'.
wa_ddfields-decimals = '000002'.
APPEND wa_ddfields TO it_ddfields.
WRBTR
wa_ddfields-fieldname = 'WRBTR'.
wa_ddfields-position = '0008'.
wa_ddfields-datatype = 'CURR'.
wa_ddfields-leng = '000013'.
wa_ddfields-decimals = '000002'.
APPEND wa_ddfields TO it_ddfields.
HKONT
wa_ddfields-fieldname = 'HKONT'.
wa_ddfields-position = '0009'.
wa_ddfields-datatype = 'CHAR'.
wa_ddfields-leng = '000010'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
AMOUNT
wa_ddfields-fieldname = 'AMOUNT'.
wa_ddfields-position = '0010'.
wa_ddfields-datatype = 'CURR'.
wa_ddfields-leng = '000010'.
wa_ddfields-decimals = '000002'.
APPEND wa_ddfields TO it_ddfields.
DATA: lv_position TYPE i.
lv_position = 0011.
Additional fields for the years
WHILE lv_check < v_counter.
wa_ddfields-fieldname = <fs_year>.
wa_ddfields-position = lv_position.
wa_ddfields-datatype = 'NUMC'.
wa_ddfields-leng = '000004'.
wa_ddfields-decimals = '000000'.
APPEND wa_ddfields TO it_ddfields.
lv_asof = lv_asof - 1.
ADD 1 TO: lv_check, lv_position.
ENDWHILE.
CLEAR lv_position.
lv_position = 1.
LOOP AT it_ddfields INTO wa_ddfields.
CASE wa_ddfields-fieldname.
WHEN 'BLDAT'.
ls-col_pos = lv_position.
ls-row_pos = lv_position.
ls-fieldname = wa_ddfields-fieldname.
ls-inttype = 'D'.
ls-ref_table = 'BSIS'.
ls-ref_field = 'BLDAT'.
WHEN 'WAERS'.
ls-col_pos = lv_position.
ls-row_pos = lv_position.
ls-fieldname = wa_ddfields-fieldname.
ls-ref_table = 'BSIS'.
ls-ref_field = 'WAERS'.
when 'DMBTR'.
ls-col_pos = lv_position.
ls-row_pos = lv_position.
ls-fieldname = wa_ddfields-fieldname.
ls-ref_table = 'BSIS'.
ls-ref_field = 'DMBTR'.
when 'WRBTR'.
ls-col_pos = lv_position.
ls-row_pos = lv_position.
ls-fieldname = wa_ddfields-fieldname.
ls-ref_table = 'BSIS'.
ls-ref_field = 'WRBTR'.
WHEN OTHERS.
ls-col_pos = lv_position.
ls-row_pos = lv_position.
ls-fieldname = wa_ddfields-fieldname.
ENDCASE.
APPEND ls TO lt.
ADD 1 TO lv_position.
ENDLOOP.
CLEAR lv_position.
ASSIGN lt_data TO <fs_data>.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt
IMPORTING
ep_table = <fs_data>
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ASSIGN <fs_data>->* TO <fs_1>.
ASSIGN <fs_1> TO <fs_2>.
ASSIGN <fs_1> TO <fs_dyntable>.
ENDMETHOD. -
Hi,
I created a table dynamically and assigned it to field symbol. Now i want to write the contents of the internal table to a flat file in app server. Here is what i am doing.
parameters: p_table(30) type c default 'PA0008',
p_file LIKE RLGRAP-FILENAME default '/usr/sap/tmp/test.txt'. " Path to save files to
FIELD-SYMBOLS: <w_table> type standard table,
<w_wa> TYPE any,
<w_field> type any.
DATA: w_dyn_wa type ref to data,
w_dyn_table type ref to data.
CREATE DATA w_dyn_wa TYPE (p_table). "Suitable work area
ASSIGN w_dyn_wa->* TO <w_wa>.
create data w_dyn_table type standard table of (p_table).
assign w_dyn_table->* to <w_table>.
data w_dyn_data(5000) type c.
SELECT * FROM (p_table) INTO table <w_table> where endda >= sy-datum.
Data: w_temp type string.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE encoding default.
IF SY-SUBRC = 0.
loop at <w_table> into <w_wa>.
w_temp = ''.
do.
assign component sy-index of structure <w_wa> to <w_field>.
if sy-subrc <> 0.
exit.
endif.
concatenate w_temp <w_field> into w_temp respecting blanks.
if sy-index = 1.
transfer '' to p_file.
endif.
transfer <w_field> to p_file no end of line.
enddo.
transfer w_temp to p_file no end of line.
write:/ w_temp.
endloop.
endif.
close dataset p_file.
when i run the program with PA0008 i am getting a casting error "Object not char like". How do i get rid of this error?. I tried moving the contents of field symbol to a string and appending it. It worked, but i lost the exact formatting of data in the file. In other words, it got rid of extra blanks. I need exact structure of internal table in the file.
Thanks,
Sandeep
Thanks,
SandeepHi
Have u tried to use MOVE statament instead of CONCATENATE?
do.
assign component sy-index of structure <w_wa> to <w_field>.
if sy-subrc <> 0.
exit.
endif.
DESCRIBE FIELD <W_FIELD> LENGTH V_LEN.
MOVE <W_FIELD> TO w_temp+V_OFFSET(V_LEN).
V_OFFSERT = V_OFFSET + V_LEN.
Max -
Dynamic Field Symbols with Structures
Hello,
I am stuck on a piece of code and looking for some help. I am trying to figure out how to assign values in a structure of a dynamically defined field symbol to the structure inside another dynamically defined field symbol. Here is my code and some comments. Basically I am uploading data via a flatfile and placing it into a dynamically defined field symbol.
DATA:
lr_area TYPE REF TO cl_sem_planarea_attributes,
lr_t_data TYPE REF TO data,
lr_s_data TYPE REF TO data,
lr_s_chas TYPE REF TO data,
lr_s_kyfs TYPE REF TO data.
FIELD-SYMBOLS:
<lt_data> TYPE STANDARD TABLE,
<ls_data> TYPE ANY,
<ls_chas> TYPE ANY,
<ls_kyfs> TYPE ANY.
DATA: ls_chasel TYPE upc_ys_chasel,
ls_charng TYPE upc_ys_charng.
FIELD-SYMBOLS:
<f> TYPE ANY,
<chas> TYPE TABLE,
<kyfs> TYPE ANY.
CALL METHOD cl_sem_planarea_attributes=>get_instance
EXPORTING i_area = i_area
RECEIVING er_instance = lr_area.
CHECK sy-subrc = 0.
CREATE DATA lr_s_data TYPE (lr_area->typename_s_data).
ASSIGN lr_s_data->* TO <ls_data>.
CREATE DATA lr_t_data TYPE (lr_area->typename_t_data).
ASSIGN lr_t_data->* TO <lt_data>.
CREATE DATA lr_s_chas TYPE (lr_area->typename_s_chas).
ASSIGN lr_s_chas->* TO <ls_chas>.
CREATE DATA lr_s_kyfs TYPE (lr_area->typename_s_kyfs).
ASSIGN lr_s_kyfs->* TO <ls_kyfs>.
LOOP AT gt_file INTO ls_file.
CLEAR <ls_data>.
MOVE-CORRESPONDING ls_file TO <ls_kyfs>. " Map key figures
MOVE-CORRESPONDING ls_file TO <ls_chas>. " Map chars
* MOVE-CORRESPONDING ls_file TO <ls_data>. " Map data
* ASSIGN COMPONENT 'ls_chas' OF STRUCTURE <ls_Data> TO <chas> .
* IF sy-subrc = 0.
** <chas> = <ls_chas>.
*MOVE-CORRESPONDING <ls_chas> to <chas>.
* ENDIF.
<chas> = <ls_chas>.
LOOP AT <chas> INTO ls_chasel.
READ TABLE ls_chasel-t_charng INTO ls_charng INDEX 1.
IF sy-subrc = 0 AND ls_charng-option = 'EQ'.
ASSIGN COMPONENT ls_chasel-chanm OF STRUCTURE <ls_chas> TO <ls_data>.
IF sy-subrc = 0.
<ls_data> = ls_charng-low.
ENDIF.
ENDIF.
ENDLOOP.
COLLECT <ls_data> INTO <lt_data>.
ENDLOOP.
Ls_chasel has 2 components:
Chanm (a char 30 which contains the component’s name)
T_CHARNG (a table with values for chanm)
Ls_data has 2 components:
S_chas (a structure with a list of components and values – same list as would have)
S_kyfs (a structure with a list of components and values – same list as would have)
Lt_data is a table of ls_data
I need to get the data in ls_chas into the ls_chas structure of ls_data and the ls_kyfs data into the ls_kyfs structure of ls_chas and append ls_chas to lt_data. Anything that is commented out is something I tried that didn't work. RIght now I get a dump at the 'loop at <chas> into ls_chasel' that the field symbol is not assigned.
Thanks for your help!It looks like the the original poster didn't completely understand all he was doing. (This is why I always recommend getting an ABAP programmer in for what is, essentially, advanced ABAP programming, rather than someone "kind of familiar" with ABAP trying it - we're often available at very reasonable rates ).
It seems he's using ito_chasel to set the fixed values (which is in fact quite smart!). What isn't required, so far as I can tell without implementing, are any of the statements involving <ls_kyfs> or <ls_chas>.
The following should be sufficient (with the necessary declarations etc. - but really: omit <ls_kyfs> and <ls_chas> - I'm sure they're not needed and they confuse things).
" Go through the data from the flat file
LOOP AT gt_file INTO ls_file.
CLEAR <ls_data>.
" Transfer the characteristics
MOVE-CORRESPONDING ls_file TO <s_chas>.
" Transfer the key figure
MOVE-CORRESPONDING ls_file TO <s_kyfs>.
" Go through the fixed characteristic selections from the package
LOOP AT ito_chasel INTO ls_chasel.
" We only care about the first value (if there is one).
READ TABLE ls_chasel-s_charng INTO ls_charng INDEX 1.
" Check there is a first value and that it is fixed
CHECK sy-subrc IS INITIAL AND ls_charng EQ 'EQ'.
" Get access to that characteristic
FIELD-SYMBOLS <fixed_value> TYPE ANY.
ASSIGN COMPONENT ls_chasel-chanm OF STRUCTURE <s_chas> TO <fixed_value>.
" Make sure that it exists in the data structure
CHECK sy-subrc IS INITIAL.
" Set the value
<fixed_value> = ls_charng-low.
ENDLOOP.
COLLECT <ls_data> INTO <lt_data>.
ENDLOOP. -
Hi Experts,
I want to assign the fields of a field symbol using a macro because the field names come from a table
the code look like this
DEFINE ASSIGN_VALUE.
&1-&2 = &3.
END-OF-DEFINITION.
ASSIGN_VALUE <RESULT_FIELDS> FIELDNAME FIELDVALUE.
Where FIELDNAME is a CHAR variable containing the name of the field
I get the following error:
E:The data object "<RESULT_FIELDS>" does not have a component called
"FIELDNAME".
The macro and the call to it are located in a method of a class ( end routine of a transformation in BW)
Thanks for your help
ThibaultHi
Welcome to SDN forum
See the doc of MACROS and do accordingly
Macros
If you want to reuse the same set of statements more than once in a program, you can include them in a macro. For example, this can be useful for long calculations or complex WRITE statements. You can only use a macro within the program in which it is defined, and it can only be called in lines of the program following its definition.
The following statement block defines a macro macro:
DEFINE makro.
statements
END-OF-DEFINITION.
You must specify complete statements between DEFINE and END-OF-DEFINITION. These statements can contain up to nine placeholders &1, &2,...., &9). You must define the macro before the point in the program at which you want to use it.
Macros do not belong to the definition part of the program. This means that the DEFINE statement block is not interpreted before the processing blocks in the program. At the same time, however, macros are not operational statements that are executed within a processing block at runtime. When the program is generated, macro definitions are not taken into account at the point at which they are defined. For this reason, they do not appear in the overview of the structure of processing logic.
A macro definition inserts a form of shortcut at any point in a program and can be used at any subsequent point in the program. As the programmer, you must ensure that the macro definition occurs in the program before the macro itself is used. Particular care is required if you use both macros and include programs, since not all include programs are included in the syntax check (exception: TOP include).
To use a macro, use the following form:
makro [p1 p2... p9].
When the program is generated, the system replaces the macro by the appropriate statements and the placeholders &1, &2, , &9 by the parameter p1, p2, , p9. You can use macros within macros. However, a macro cannot call itself.
REPORT demo_mod_tech_macros.
DATA: result TYPE i,
n1 TYPE i VALUE 5,
n2 TYPE i VALUE 6.
DEFINE operation.
result = &1 &2 &3.
output &1 &2 &3 result.
END-OF-DEFINITION.
DEFINE output.
write: / 'The result of &1 &2 &3 is', &4.
END-OF-DEFINITION.
operation 4 + 3.
operation 2 ** 7.
operation n2 - n1.
This produces the following output:
The result of 4 + 3 is 7
The result of 2 ** 7 is 128
The result of N2 - N1 is 1
In this example, the two macros operation and output are defined. output is nested in operation. operation is called three times with different parameters. Note how the placeholders &1, &2,... are replaced in the macros.
The following example shows that a macro definition only works in the program lines following its definition. Do not copy it!
Let us have a look at a program with a subroutine test:
PROGRAM macro_test.
FORM test.
WRITE '...'.
ENDFORM.
We can rewrite the program by introducing a macro macro:
PROGRAM macro_test.
FORM test.
DEFINE macro.
WRITE '...'.
ENDFORM.
END-OF-DEFINITION.
MACRO.
Inserting the macro changes nothing in the generated form of the program. Processing blocks - here a subroutine - are always indivisible. We could also write the program as follows:
PROGRAM macro_test.
DEFINE macro.
WRITE '...'.
ENDFORM.
END-OF-DEFINITION.
FORM test.
MACRO.
The most essential feature of a macro definition is that it should occur before the macro is used.
Macro in ABAP
Macro in ABAP
Submitted by : SAP Basis, ABAP Programming and Other IMG Stuff
http://www.sap-img.com
REPORT ZMACRO.
DATA: RESULT TYPE I,
N1 TYPE I VALUE 5,
N2 TYPE I VALUE 6.
DEFINE OPERATION.
RESULT = &1 &2 &3.
OUTPUT &1 &2 &3 RESULT.
END-OF-DEFINITION.
DEFINE OUTPUT.
WRITE: / 'The result of &1 &2 &3 is', &4.
END-OF-DEFINITION.
OPERATION 4 + 3.
OPERATION 2 ** 7.
OPERATION N2 - N1.
*-- End of Program
Regards
Anji -
Hi,
I need to know the length of total field symbol, not the value entered in it but its total length.
Like below
<ls_field_tmp> it has Range structure,
suppose =
SIGN (1) = 'I'
OPTION( 2 ) = 'BT'
LOW (4) = '10'
HIGH (4) = '20'
so if we use
lv_length = STRLEN( <ls_field_tmp> ) then it will give value 7.
i need to get length of all data type : means 1 + 2 + 4 + 4 = 11 , total length .
How i will get this length , please suggest?
LOOP AT <lt_selection> ASSIGNING <ls_field_tmp>.
CLEAR : lv_length, lv_offset.
ls_item-field_name = ls_sel_fields-m_id.
ls_item-relid = lv_number.
ls_item-counter = sy-tabix.
lv_length = STRLEN( <ls_field_tmp> ) .
ENDLOOP.I am using Field Symbol
<ls_field_tmp> TYPE ANY.
After Assignment its structure will become like :-
<ls_field_tmp>-sign
<ls_field_tmp>option
<ls_field_tmp>low
<ls_field_tmp>high
Now Sign and option fields are OK because they have fixed data type but LOW and HIGH will depend upon the assignment.
This statement below is working fine for charter or NUMC type fields
DESCRIBE FIELD <ls_field_tmp> LENGTH lv_length IN CHARACTER MODE.
But if the Data type is Decimal or Currency , then it is not working fine.
Firstly the problem is I have to put offset for determining field
<ls_field_tmp>+0(1) = <ls_field_tmp>-sign. like this one ,
if the LOW and HIGH data type is decimal then 1st two field is Char and last two decimal.
So how to know the total length of structure.
OR
Can i assign <ls_field_tmp> to any data type , is it possible ? if yes how ?
Thanks
Ankesh -
Hi
how can i change the data type of a field symbol at run time..(say Packed to char)
may be it can have a field data or structure data..
please help me ..........
Regards
alberthi
thank you for your reply
i am trying to do as follows but i am not getting the expected output
where do i go wrong.............
*"*"Local Interface:
*" TABLES
*" IT_OUT STRUCTURE THENV OPTIONAL
DATA: v_date type sy-datum,
mytype type C.
FIELD-SYMBOLS: <fs>,
<fs1>.
v_date = sy-datum.
ASSIGN v_date TO <fs>.
append <fs> to it_out.
WRITE / <fs>. " ---------------->20.09.2011
ASSIGN v_date TO <fs1> casting TYPE C.
append <fs1> to it_out.
WRITE / <fs1>. " --------------->20110920
LT_OUT is having the data as 20110920
20110920
but i expect in date format 20.09.2011
20.09.2011 -
In webdynpro ,Passing field symbols as values to class methods
Hi
Please tell me the ways of accessing database in webdynpro abap(not directly). I am calling Class method for accessing database. As currently I am directly accessing database in my webdynpro application. I have created a class and method for the same.
In my method I want to use select statement which will return table with values to webdynpro application. So for select statement(Calling Method) I need to use my field symbol values as where in clause .
Could anyone please help with example code?
Thanks,
Ujjwaldata: in_line type ref to data.
CREATE DATA in_line LIKE LINE OF <dyn_tab>.
ASSIGN in_line->* TO <dyn_wa>.
You can create a data reference and assign it to a field symbol and change the values. direclty passing field symbols is not possible.
Abhi -
How to revert back a SAP NOTE? Dump- Field symbol has not yet been assigned
Hi Experts,
We r getting dump(cause: Field symbol has not yet been assigned) in production for ABUMN tx, so, when debugged, it came to know that, the Field symbol is coming from REUSE_ALV_LIST_DISPLAY!!
So, for some reason the system message text is not getting output in ALV-->Dump!!
So, found a NOTE causing this problem!!
So, pls. let me know that, How to revert back this/any SAP NOTE? pls. in detail steps wise!!
thanq
Edited by: Srinivas on Jan 24, 2008 4:32 PMHi
In SNOTE tcode, select the Note that you implemented and click on 'RESET SAP Note Implementation'
shylesh -
Modify DB by single field using Field Symbol
Hi,
please help me ,actually i have not use the field symbol in any object. i have one requirement ,i have to modify the DB by field STATUS using Field symbol ,
I am sending u my code so please help me how can i modify DB using field symbol..
gw_msg3_status1 = k_status1 .
LOOP AT gi_msg3 INTO gs_msg3.
gs_msg3-status = gw_msg3_status1 .
gs_msg3-issue = lw_issuno.
MODIFY gi_msg3 FROM gs_msg3 TRANSPORTING status.
MODIFY gi_msg3 INDEX sy-tabix FROM gs_msg3 TRANSPORTING issue status.
ENDLOOP.
Thanks & Regards,
Meenakshiperform dboperation_table using 'SET' 'BIRTHDT' '=' <fs>.
perform dboperation_table using 'WHERE' 'PARTNER' '=' <fs>
perform dboperation_update using 'BUT000'.
form dboperation_table
using p_type
p_var1
p_var2
p_var3.
data: t_l type cmst_str_data.
data: d_cx_root type ref to cx_root,
d_text type string.
try.
clear t_l.
if p_var3 is not initial.
t_l = p_var3.
condense t_l.
concatenate '''' t_l '''' into t_l.
endif.
concatenate p_var1 p_var2 t_l into t_l
separated by space.
case p_type.
when 'SET'. append t_l to g_s_t.
when 'WHERE'. append t_l to g_w_t.
endcase.
catch cx_root into d_cx_root.
d_text = d_cx_root->get_text( ).
message a398(00) with d_text.
endtry.
endform. "DBOPERATION_table
form dboperation_update
using p_tabname type zdboperation-tabname.
data: tabname type bus_table.
data: d_cx_root type ref to cx_root,
d_text type string.
try.
tabname-tabname = p_tabname.
call function 'ZDBOPERATION_UPDATE'
in update task
exporting
tabname = tabname
tables
where_table = g_w_t
set_table = g_s_t.
catch cx_root into d_cx_root.
d_text = d_cx_root->get_text( ).
message a398(00) with d_text.
endtry.
endform. "DBOPERATION_update
Hope it will help you.
Regards,
Madan.
Maybe you are looking for
-
Can't remove items from the dock
Hey, i'm having this problem for quite some time, and it's starting to annoy me. When i try to remove something from my dock, lets say safari, for example, the dock auto reloads and the safari icon appears again. I tried to remove it dragging it out
-
My iphone 4 wont turn on after hours of charging, normally i would press the lock button and home button together but my lock button stopped working afue weeks ago. Help!
-
OCCI BUG! Error reading Objects which contain NULLS
The original problem was that I couldn't retrieve a SDO_GEOMERTY object from a table. Using OCCI and the OTT utility I always got assertions and exceptions. Various people have already reported this problem (e.g. Hu Cao, "HELP!! operating SDO_GEOMETR
-
Updating Item Master Organization
Dear All, We have two Business Group in US and in Canada. We have defined two Item Master Organization; one for US and the other for Canada. Now we want to convert it into single Item Master Organization. What are the implications? Is it advisable? I
-
Moving exposure slider Lightroom 5 causes losing sharpness in pictures.
I'm working with (RAW files form 5dmk2) Lightroom 5 on OS X (i5 .2.6 gHz 16 GB RAM Intel HD Graphic 4000, NEC PA 271W display 27') . In Develop module moving exposure slider for a short moment causes loss of sharpnes in pictures, it's really annoying