Perform DML on the pieces of the column in Forms
Hi,
I am looking for a solution for the interesting puzzle.
In DB I have column that in the front end will be represented by the pieces of it.
Users used to see this column like 3 virtual columns .So I will have on the form 3 text items that will be represent 1 column from DB.Like "Column" in Db = substr(col,1,4),
substr(col,5,7), substr(col,13,7) .
And I will need to do DML thru the form.
Putting substr in props of the item is working for the query only.Now I need insert, update, delete.
I got working "delete", got working "insert".
Any suggstions for the "update"?
This is not possible with the current release of Ultra Search. We are adding it in the current release (Ultra Search 9.0.2)
that will be shipped with both the database (9i Release 2) and the Oracle Application Server Release 9.0.2.
--Stefan Buchta, Ultra Search PM
Similar Messages
-
Hi all,
I want to alias the column name form Location to "Location Name".
say for example:
select location_name as Location Name from Location_table;
i know that the above query will give erroe.
here initially my column name is Location_name, but i want is "*Location Name*".
(there should be a space in between the two words)
Can anybody help me?
Thanks in advance,
Vinayselect location_name as "Location Name" from Location_table;- Mahesh Kaila
-
Is there any performance difference in the order of columns referencing index?
I wish to find out if there is any performance difference or efficiency in specifying those columns referencing index(es) first in the WHERE clause of SQL statements. That is, whether the order of columns referencing the index is important???.
E.g. id is the column that is indexed
SELECT * FROM a where a.id='1' and a.name='John';
SELECT * FROM a where a.name='John' and a.id='1';
Is there any differences in terms of efficiency of the 2 statements??
Please advise. Thanks.There is no difference between the two statements under either the RBO or the CBO.
sql>create table a as select * from all_objects;
Table created.
sql>create index a_index on a(object_id);
Index created.
sql>analyze table a compute statistics;
Table analyzed.
sql>select count(*)
2 from a
3 where object_id = 1
4 and object_name = 'x';
COUNT(*)
0
1 row selected.
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=29)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'A' (Cost=1 Card=1 Bytes=29)
3 2 INDEX (RANGE SCAN) OF 'A_INDEX' (NON-UNIQUE) (Cost=1 Card=1)
sql>select count(*)
2 from a
3 where object_name = 'x'
4 and object_id = 1;
COUNT(*)
0
1 row selected.
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=29)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'A' (Cost=1 Card=1 Bytes=29)
3 2 INDEX (RANGE SCAN) OF 'A_INDEX' (NON-UNIQUE) (Cost=1 Card=1) -
Need help on getting the column names of Tabletype
I have a table Mapping with the following values: This Mapping table contains the table names (in Tabname) and the column names(colname) of various tables and values(ValuesTobeFilled) for the columns.
I have to insert into the tables present in the Tabname field with the values present in the ValuesTobeFilled in the columns present in the Colname field.
Note: The Mapping table need not contain all the columns of the base table. The columns that are not present can be filled with null. And this mapping table is not fixed i.e. rows can be inserted/deleted frequently.
Sample values in mapping table:
Tabname Colname ValuesTobeFilled
sample_items Eno Corresponding Expression to get the values from XML input
sample_items Ename Corresponding Expression to get the values from XML input
XXX YYY Corresponding Expression to get the values from XML input
Before filling in the actual tables, I have to store the entire data temporarily and I have used a tabletype declared as follows:
TYPE T_sample_items IS TABLE OF sample_items%ROWTYPE INDEX BY BINARY_INTEGER;
l_sample_items T_sample_items;
Where the table sample_items have the following columns:
• Eno
• Ename
• Eaddress
• Eemail
So, the tabletype should be filled as:
Eno Ename Eaddress EEmail
1 XXX - -
I have declared a cursor to select the values from mapping table and I need to fill in the ValuesTobeFilled values to the corresponding table.
CURSOR c_xpath (c_tname mapping.TABNAME%type)
IS
select * from mapping where tabname = c_tname;
CURSOR c_tables
IS
SELECT DISTINCT TABNAME FROM mapping;
FOR crsr IN c_tables
LOOP
p_tname := CRSR.TABNAME;
FOR csr IN c_xpath(p_tname)
LOOP
IF l_xml_doc.EXISTSNODE(CSR.XPATH_EXP) = 1
THEN
l_node_value := l_xml_doc.extract(CSR.XPATH_EXP).getStringVal(); -- This is the value to be stored in the corresponding column
ELSE
l_node_value := NULL;
END IF;
IF CSR.COLUMN_NAME = ‘eno’
THEN
l_sample_items(1).eno := l_node_value;
ELSIF CSR.COLUMN_NAME = ‘ename’
THEN
l_sample_items(1).name := l_node_value;
END IF;
END LOOP;
END LOOP;
And I need to eliminate hard coding while comparing the column names (in the following piece of code) as the Mapping table values are subject to insertion/deletion:
IF CSR.COLUMN_NAME = ‘eno’
THEN
l_sample_items(1).eno := l_node_value;
ELSIF CSR.COLUMN_NAME = ‘ename’
THEN
l_sample_items(1).ename := l_node_value;
END IF;
I need to insert the values directly into the tabletype without this hardcoding. Please suggest me ways to compare the mapping table values with the field (column) names of the tabletype. If it is not possible using tabletype, please suggest any other ways of fixing the problem.
Many thanks,
GopiI take it this isn't going to be a serious production system at the end of the day?
Storing metadata in tables for extraction and insertion of data is just wrong in so many ways. It smells heavily of Entity Attribute Value modelling, which is the most wrong way to use a relational database and is known to have major performance implications and be liable to bugs and issues. The idea that EAV modelling allows for 'generic' databases where new data items can be added flexibly later on without having to change code is usually justified with an excuse of "it means we don't have to update all our tables when we want a new column" which is easily countered with "if you're adding a single column a good relational design wouldn't require you to add it to more than one table anyway in most cases".
Just what exactly are you trying to do and why? There has to be a better way. -
How can i change the column label text in a alv table display
how can i change the column label text in a alv table display??
A similar kinda of question was posted previuosly where the requirement was the label text was needed and following below code was given as solution :
<i>* declare column, settings, header object
DATA: lr_column TYPE REF TO cl_salv_wd_column.
DATA: lr_column_settings TYPE REF TO if_salv_wd_column_settings.
DATA: lr_column_header type ref to CL_SALV_WD_COLUMN_HEADER.
get column by specifying column name.
lr_column = lr_column_settings->get_column( 'COLUMN_NAME1' ).
set Header Text as null
lr_column_header = lr_column->get_header( ).
lr_column_header->set_text( ' ' ).</i>
My specific requirement is i have an input field on the screen and i want reflect that value as the column label for one of the column in the alv table. I have used he above code with slight modification in the MODIFYVIEW method of the view since it is a process after input. The component gets activated without any errors but while run time i get an error stating
<i>"The following error text was processed in the system CDV : Access via 'NULL' object reference not possible."</i>
i have checked in debugging and the error occured at the statement :
<i>lr_column = lr_column_settings->get_column( 'CURRENT_YEAR' ).</i>Please can you provide me an alternative for my requirement or correct me if i have done it wrong.
Thanks,
SuriI found it myself how to do it. The error says that it is not able to find the reference object i.e it is asking us to refer to the table. The following piece of code will solve this problem. Have to implement this in WDDOMODIFYVIEW method of the view. This thing works comrades enjoy...
DATA : lr_cmp_usage TYPE REF TO if_wd_component_usage,
lr_if_controller TYPE REF TO iwci_salv_wd_table,
lr_cmdl TYPE REF TO cl_salv_wd_config_table,
lr_col TYPE REF TO cl_salv_wd_column.
DATA : node_year TYPE REF TO if_wd_context_node,
elem_year TYPE REF TO if_wd_context_element,
stru_year TYPE if_alv_layout=>element_importing,
item_year LIKE stru_year-i_current_year,
lf_string TYPE char(x),
DATA: lr_column TYPE REF TO cl_salv_wd_column.
DATA: lr_column_header TYPE REF TO cl_salv_wd_column_header.
DATA: lr_column_settings TYPE REF TO if_salv_wd_column_settings.
Get the entered value from the input field of the screen
node_year = wd_context->get_child_node( name = 'IMPORTING_NODE' ).
elem_year = node_year->get_element( ).
elem_year->get_attribute(
EXPORTING
name = 'IMPORT_NODE-PARAMETER'
IMPORTING
value = L_IMPORT_PARAM ).
WRITE L_IMPORT_PARAM TO lf_string.
Get the reference of the table
lr_cmp_usage = wd_this->wd_cpuse_alv( ).
IF lr_cmp_usage->has_active_component( ) IS INITIAL.
lr_cmp_usage->create_component( ).
ENDIF.
lr_if_controller = wd_this->wd_cpifc_alv( ).
lr_column_settings = lr_if_controller->get_model( ).
get column by specifying column name.
IF lr_column_settings IS BOUND.
lr_column = lr_column_settings->get_column( 'COLUMN_NAME').
set Header Text as null
lr_column_header = lr_column->get_header( ).
lr_column_header->set_text( lf_string ).
endif. -
Increase the column lengths of excel sheet through abap
I developed a abap program and it was displayed the output.
So i need to display this out put in excel sheet.
for that I read the out put and placed in the excel,
the only problem is the column lengths are small
after download i am dragging the each column,
But i need to increase the each column by the program
How can I ?
I am using the following code
lastline = new_line_c + 13.
DO .
READ LINE sy-index LINE VALUE INTO it_read-excel.
APPEND it_read.
IF sy-index > lastline.
EXIT.
ENDIF.
ENDDO.
lastline = new_line_c - 38.
colm = ( length - 37 ) / 18.
colm = colm + 4.
FOR THE EXCEL CONVERTION
INCLUDE ole2incl.
DATA: w_cell1 TYPE ole2_object,
w_cell2 TYPE ole2_object.
*--- Ole data Declarations
DATA: h_excel TYPE ole2_object, " Excel object
h_mapl TYPE ole2_object, " list of workbooks
h_map TYPE ole2_object, " workbook
h_zl TYPE ole2_object, " cell
h_f TYPE ole2_object, " font
gs_interior TYPE ole2_object, " Pattern
worksheet TYPE ole2_object,
h_cell TYPE ole2_object,
h_merge TYPE ole2_object,
h_cell1 TYPE ole2_object,
range TYPE ole2_object,
h_sheet2 TYPE ole2_object,
h_sheet3 TYPE ole2_object,
gs_font TYPE ole2_object,
flg_stop(1) TYPE c.
*DATA: t_excel_bckord LIKE t_excel OCCURS 0 WITH HEADER LINE,
*t_excel_bcklog LIKE t_excel OCCURS 0 WITH HEADER LINE,
*t_excel_blkord LIKE t_excel OCCURS 0 WITH HEADER LINE.
TYPES: data1(1500) TYPE c,
ty TYPE TABLE OF data1.
DATA: it TYPE ty WITH HEADER LINE,
it_2 TYPE ty WITH HEADER LINE,
it_3 TYPE ty WITH HEADER LINE,
rec TYPE sy-tfill,
deli(1) TYPE c,
l_amt(18) TYPE c.
DATA: BEGIN OF hex,
tab TYPE x,
END OF hex.
FIELD-SYMBOLS: <fs> .
CONSTANTS cns_09(2) TYPE n VALUE 09.
ASSIGN deli TO <fs> TYPE 'X'.
hex-tab = cns_09.
<fs> = hex-tab.
DATA gv_sheet_name(20) TYPE c .
M A C R O Declaration
DEFINE ole_check_error.
if &1 ne 0.
message e001(zz) with &1.
exit.
endif.
END-OF-DEFINITION.
DATA: xy TYPE i,
xz TYPE i,
yz TYPE i,
ab TYPE i,
pterm TYPE i.
IF h_excel-header = space OR h_excel-handle = -1.
start Excel
CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
ENDIF.
PERFORM err_hdl.
*--- get list of workbooks, initially empty
CALL METHOD OF h_excel 'Workbooks' = h_mapl.
PERFORM err_hdl.
SET PROPERTY OF h_excel 'Visible' = 1.
add a new workbook
CALL METHOD OF h_mapl 'Add' = h_map.
PERFORM err_hdl.
*GV_SHEET_NAME = '1st SHEET'.
gv_sheet_name = 'Price Comparison List'.
GET PROPERTY OF h_excel 'ACTIVESHEET' = worksheet.
SET PROPERTY OF worksheet 'Name' = gv_sheet_name .
index1 = 3.
LOOP AT it_read.
heading
IF sy-tabix < 4.
it_item = it_read.
IF it_item CS '-----'.
CLEAR it_item.
APPEND it_item.
ELSE.
IF sy-tabix = 1.
it_item+0(1) = deli.
ENDIF.
APPEND it_item.
ENDIF.
ENDIF.
headear data and item
IF sy-tabix > 4 AND sy-tabix < descline1.
it_item = it_read.
IF it_item CS '----'.
ELSE.
REPLACE ALL OCCURRENCES OF sy-vline IN it_item WITH deli.
APPEND it_item.
ENDIF.
ENDIF.
xy = 2.
xz = 38.
discount etc
IF sy-tabix >= descline1 AND sy-tabix < descline.
it_item = it_read.
it_item+12(1) = deli.
it_item+22(1) = deli.
it_item+43(1) = deli.
WHILE xy < colm.
xz = xz + 18.
it_item+xz(1) = deli.
xy = xy + 1.
ENDWHILE.
APPEND it_item.
ENDIF.
payment terms
xy = 2.
xz = 37.
pterm = descline + 6.
IF sy-tabix > descline AND sy-tabix < pterm.
it_item = it_read.
IF it_item CS '-----'.
CLEAR it_item.
APPEND it_item.
ELSE.
it_item+12(1) = deli.
it_item+15(1) = deli.
it_item+36(1) = deli.
WHILE xy < colm.
xz = xz + 17.
it_item+xz(1) = deli.
xy = xy + 1.
ENDWHILE.
APPEND it_item.
ENDIF.
ENDIF.
prepared by
lastline = pterm + 3.
IF sy-tabix >= pterm AND sy-tabix <= lastline.
it_item = it_read.
IF it_item CS '-----'.
ELSE.
it_item+0(1) = deli.
it_item+54(1) = ' '.
it_item+16(1) = deli.
APPEND it_item.
ENDIF.
ENDIF.
remaarks
yz = lastline + 10.
IF sy-tabix > lastline AND sy-tabix <= yz.
it_item = it_read.
it_item+0(1) = deli.
it_item+54(1) = ' '.
APPEND it_item.
ENDIF.
approved by
ab = yz + 5.
IF sy-tabix > yz AND sy-tabix < ab.
it_item = it_read.
IF it_item CS '-----'.
ELSE.
it_item+0(1) = deli.
it_item+54(1) = ' '.
it_item+14(1) = deli.
APPEND it_item.
ENDIF.
ENDIF.
ENDLOOP.
*--Formatting the area of additional data 1 and doing the BOLD
CALL METHOD OF h_excel 'Cells' = w_cell1
EXPORTING
#1 = 1
#2 = 1.
CALL METHOD OF h_excel 'Cells' = w_cell2
EXPORTING
#1 = 1
#2 = colm.
CALL METHOD OF h_excel 'Range' = h_cell
EXPORTING
#1 = w_cell1
#2 = w_cell2.
*CALL METHOD OF gs_cells 'Select' .
GET PROPERTY OF h_cell 'Font' = gs_font .
SET PROPERTY OF gs_font 'Bold' = 1 .
*Bold for the second row
CALL METHOD OF h_excel 'Cells' = w_cell1
EXPORTING
#1 = 2
#2 = 1.
CALL METHOD OF h_excel 'Cells' = w_cell2
EXPORTING
#1 = 1
#2 = colm.
CALL METHOD OF h_excel 'Range' = h_cell
EXPORTING
#1 = w_cell1
#2 = w_cell2.
*CALL METHOD OF gs_cells 'Select' .
GET PROPERTY OF h_cell 'Font' = gs_font .
SET PROPERTY OF gs_font 'Bold' = 1 .
*Bold for the fourth row
CALL METHOD OF h_excel 'Cells' = w_cell1
EXPORTING
#1 = 4
#2 = 1.
CALL METHOD OF h_excel 'Cells' = w_cell2
EXPORTING
#1 = 1
#2 = colm.
CALL METHOD OF h_excel 'Range' = h_cell
EXPORTING
#1 = w_cell1
#2 = w_cell2.
*CALL METHOD OF gs_cells 'Select' .
GET PROPERTY OF h_cell 'Font' = gs_font .
SET PROPERTY OF gs_font 'Bold' = 1 .
*Bold for the fifth row
CALL METHOD OF h_excel 'Cells' = w_cell1
EXPORTING
#1 = 5
#2 = 1.
CALL METHOD OF h_excel 'Cells' = w_cell2
EXPORTING
#1 = 1
#2 = colm.
CALL METHOD OF h_excel 'Range' = h_cell
EXPORTING
#1 = w_cell1
#2 = w_cell2.
*CALL METHOD OF gs_cells 'Select' .
GET PROPERTY OF h_cell 'Font' = gs_font .
SET PROPERTY OF gs_font 'Bold' = 1 .
*Bold for the sixth row
CALL METHOD OF h_excel 'Cells' = w_cell1
EXPORTING
#1 = 6
#2 = 1.
CALL METHOD OF h_excel 'Cells' = w_cell2
EXPORTING
#1 = 1
#2 = colm.
CALL METHOD OF h_excel 'Range' = h_cell
EXPORTING
#1 = w_cell1
#2 = w_cell2.
*CALL METHOD OF gs_cells 'Select' .
GET PROPERTY OF h_cell 'Font' = gs_font .
SET PROPERTY OF gs_font 'Bold' = 1 .
DATA l_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>clipboard_export
IMPORTING
data = it_item[]
CHANGING
rc = l_rc
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
CALL METHOD OF h_excel 'Cells' = w_cell1
EXPORTING
#1 = 1
#2 = 1.
CALL METHOD OF h_excel 'Cells' = w_cell2
EXPORTING
#1 = 1
#2 = 1.
PERFORM err_hdl.
CALL METHOD OF h_excel 'Range' = range
EXPORTING
#1 = w_cell1
#2 = w_cell2.
CALL METHOD OF range 'Select'.
PERFORM err_hdl.
CALL METHOD OF worksheet 'Paste'.
PERFORM err_hdl.
CALL METHOD OF h_excel 'QUIT'.
FREE OBJECT h_zl.
FREE OBJECT h_mapl.
FREE OBJECT h_map.
FREE OBJECT h_excel.Hello Ravi,
Thank you very much for your suggestions.. but still have some more doubts:
What i want to do is :
-->call report in background job with a selection criteria.
-->the output of the report should be trasnsfered to excel sheet
-->then the excel sheet should be sent to XI..
My doubts are:
-> is it possible with every report or we need some extra code to achieve this
-> If yes, then how exactly it should be done. can you please explain in more detail.
Thank you very much for your help.
Best Regards,
Jasmeet -
How to find out the columns which has 16 digit credit card number
Hi All,
I have a requirement where in i need to find out the columns which has 16 digit credit number in it and create a report with owner, table name and column name.
The issue is that the credit card number can be entered in any columns of any table of any schema. For example the credit card number can be entered in any description field(eg: The number is 4001412134642881), in that case i need to filter only the numbers and do the LUHN check to validate the credit card number.
Please provide me a suggestion on how to scanl the values of all the columns to know the column which has credit card number.
Regards,
Raj.Tell me this - how the hell do you have a database with credit card number data and NOT know which columns of which tables contain credit card numbers? (and how on earth is this data NOT encrypted!?)
How is what you want to do, NOT a fishing expedition to hack a database that may or may not be storing credit card details?
And do you honestly think that we should simply trust that once you have extracted these numbers, performed a Luhn algorithm to verify these as credit card numbers, you are not going to fraudulently use these credit card numbers!?
I have marked your posting as an attempt to hack an Oracle database for fraudulent use of credit card data. I hope that your OTN account is terminated soon and trust that your too much of a coding idiot to actually succeed in this endevour. -
Changing the column wide in CSE in CCM
Hi Experts,
Is there any other way to setup the column wide in CSE in CCM?
Currently we display the long text, but now the end-user needs to scroll to the right to see all the data/info which we don't want.
The options we have are
a) setting it up in such a way that for example only part of the long text is shown. This can be done in BAdI /CCM/CSE_ENRICHMENT
b) or make the long text only visible in detailed screen. But this is not what we want, the end-user must see the data immediately.
So is there any other way to control the column wide in the CSE in CCM?
Thanks in advance.
Kind regards,
Marius HartmanHi Marius,
There is no way to modify the column width without modifying the related BSP, this technology is BSP not CCM, CCM has no control over the screens in this case. Perhaps if you wish to find out how to perform this modification then someone in the forums (Basis) will be able to help with the BSP MOD.
Regards,
Jason -
Return only the columns with different values.
Hi all,
I am trying to solve a seemingly trivial problem but can't seem to get any straight answer anywhere in any forum. Consider a single table with 5 columns and only two rows:
row_id first_name last_name age gender
1 John doe 27 M
1 Jane doe 27 F Assume there is no primary key or any other constraint. Also assume that there are only and only two rows in this table. So I basically need a query that, in the above set of rows, would return first_name and gender, as they are the only differing columns in the two rows, and also their values. Even if i can somehow get the column names that are differing that would be enough as I can easily access the values later on. Also it is important to remember that I may not know the column names of all the columns, so basically I somehow must utilize user_tab_columns in the process.
Any help appreciated.
Edited by: 894302 on May 1, 2013 10:35 AMHi,
894302 wrote:
There is nothing wrong with it. Here you have added all the columns in the decode statement as you already know all the column names. What if there is a table whose column names are unknown i.e I can pass the table as a parameter to a procedure and I would need to loop through all the columns and then perform this operation.Table- and column names must be hard-coded into the query. If you want to figure out what the columns are at run time, given only hte table name, then you need dynamic SQL.
All the column names are in the data dictionary view all_tab_columns. You can easily loop through them to build exactly as many lines like
DECODE (a.row_id, b.row_id, NULL, 'row_id,') ||as you need in the SELECT clause. The FROM clause is dynamic, too: it has the variable table name in 2 places.
But i am not sure if it worth the effort to do it on the database side. Probably easier to do it on the middle tier such as .NET, which where the business logic is implemented in my company.I don't know much about .NET, so I can't compare them
It's not very hard to do in PL/SQL (as dynamic SQL goes).
Edited by: Frank Kulash on May 1, 2013 4:39 PM
Here's a function that does the dynamic SQL:
CREATE OR REPLACE FUNCTION different_columns
( in_table_name IN VARCHAR2
, in_owner_name IN VARCHAR2 DEFAULT USER
RETURN VARCHAR2
IS
return_str VARCHAR2 (4000);
sql_str VARCHAR2 (1000);
BEGIN
sql_str := 'SELECT RTRIM ( ';
FOR c IN ( SELECT column_name
, ROW_NUMBER () OVER (ORDER BY column_id DESC) AS r_n
FROM all_tab_columns
WHERE owner = in_owner_name
AND table_name = in_table_name
ORDER BY column_id
LOOP
sql_str := sql_str || ' DECODE (a.'
|| c.column_name
|| ', b.'
|| c.column_name
|| ', NULL, '''
|| c.column_name
|| ', '')';
IF c.r_n > 1
THEN
sql_str := sql_str || ' ||';
END IF;
sql_str := sql_str || CHR (10);
END LOOP;
sql_str := sql_str || ' , '', ''' || CHR (10)
|| ' )' || CHR (10)
|| 'FROM "' || in_owner_name
|| '"."' || in_table_name
|| '" a' || CHR (10)
|| 'JOIN "' || in_owner_name
|| '"."' || in_table_name
|| '" b ON a.ROWID < b.ROWID';
-- dbms_output.put_line (sql_str); -- for debugging
EXECUTE IMMEDIATE sql_str INTO return_str;
RETURN return_str;
END different_columns;
SHOW ERRORSYou can call it in SQL like this:
SELECT different_columns ('RHIT_TABLE_X') AS dc
FROM dual
;Using PL/SQL, we might not need RTRIM, at least not in the query. I'll leave that as an exercise. -
Should the column name in the not in clause be indexed?
Hi, Everyone,
I am having oracle database version 11.0.1.6 on windows server 2003 R2.
I have a query like this:
Select * from icm
where customer_no not in (select customer_no from icm_pre);
I would like to know whether we should index the customer_no column in icm_pre table too? I have indexed customer_no column in icm.
Will there be a better performance if i index both the columns in the 2 tables?
Thanksuser10636796 wrote:
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | INSERT STATEMENT | | 1 | 147 | 764 (1)| 00:00:10 |
| 1 | LOAD TABLE CONVENTIONAL | ICM_UPSEL_0_ALL | | | | |
| 2 | HASH GROUP BY | | 1 | 147 | 764 (1)| 00:00:10 |
| 3 | NESTED LOOPS | | | | | |
| 4 | NESTED LOOPS | | 1 | 147 | 763 (1)| 00:00:10 |
|* 5 | HASH JOIN RIGHT ANTI NA | | 1 | 78 | 687 (1)| 00:00:09 |
| 6 | TABLE ACCESS FULL | ICM_UPSEL_1_ALL | 18556 | 235K| 68 (0)| 00:00:01 |
|* 7 | TABLE ACCESS FULL | ICM_UPSEL_MIN_PRDIFF_0 | 223K| 13M| 618 (1)| 00:00:08 |
|* 8 | INDEX RANGE SCAN | PRICE_DIFF_IDX | 84 | | 3 (0)| 00:00:01 |
|* 9 | TABLE ACCESS BY INDEX ROWID| ICM_PRE | 1 | 69 | 76 (0)| 00:00:01 |
Predicate Information (identified by operation id):
5 - access("A"."PR_CODE_BBL"="PR_CODE_BBL")
7 - filter("A"."FLAG"=0 AND "A"."PRICE_DIFF">0 AND "A"."SCORE">=0.5 AND "A"."PRICE_DIFF"<=10)
8 - access("A"."PRICE_DIFF"="B"."PRICE_DIFF")
filter("B"."PRICE_DIFF"<=10 AND "B"."PRICE_DIFF">0)
9 - filter("B"."SCORE">=0.5 AND "B"."FLAG"=0 AND "A"."CUSTOMER_NO"="B"."CUSTOMER_NO" AND
"A"."PR_CODE_BBL"="B"."PR_CODE_BBL" AND "A"."SCORE"="B"."SCORE")
How many rows are there in ICM_UPSEL_MIN_PRDIFF_0, how many match the "constant" predicates, is there an efficient way of finding them, how many will be left after you apply the subquery test.
Ditto for ICM_PRE, and do the figures look like if you apply the subquery to ICM_PRE (which seems possible)
What's the most precise path for joining the two main tables - and is there a supporting index for that join
Notice that you have a duplicated predicate in your original query - is the query correct ?
Notice that the subquery has turned into a "null aware anti join" - so changing the NOT IN to a NOT EXISTS (suggested by another poster) is not logically the same query - do you have a missing constraint (or two) which might help the optimizer find a better path.
Regards
Jonathan Lewis -
How can i bring the column heading downloaded in excel sheet?
hi all,
I am using FM SAP_CONVERT_TO_XLS_FORMAT to downloading populated internal table data into excel sheet by using filename type rlgrap-filename.
Now I need the column heading(field name) for downloaded data in excel sheet.
pls tell me how can i merge the col heading with data perfectly. Is there any FM fulfills this requirement.
pls give me a suitable approch.
Thanks
PRRHI,
Go thru this code.
REPORT ZRMM0056 NO STANDARD PAGE HEADING
MESSAGE-ID ZZ
LINE-SIZE 300
LINE-COUNT 65.
Program : ZRMM0056
Title : Non Inventory PO's
Description : Non Inventory Purchase Orders details with
Vendor and Invoice Receipts and Goods Receipts.
Input :
Select-options : 1. G/L Account No
Parameters : 1.File Paths for the Excel sheet
Others (Specify):
Output : Extract Files in the application server
Report :
Hear Ticket # : 113392
Created by : Srinivas Rao.M
Created on : 12/15/2005
Version : 1
Request : D10K944304
Transaction Code : Z420
Change History *
Date Programmer Search String Description *
12/19/2005 Srinivas D10K944316 Removed Purchasing document
Company code and Plant from
Select-Options and Inculded
G/L Account No and changed
code accordingly.
T A B L E S *
TABLES: EKBE, " History of Purchasing Document
EKPO, " Purchasing Document Item
EKKO, " Purchasing Document Header
LFA1, " Vendor master (general section)
EKKN. " Account Assignment in Purchasing Doc
INTERNAL TABLES
*--Internal table to store Purchasing document header data
DATA : BEGIN OF IT_POHEADER OCCURS 0,
EBELN LIKE EKKO-EBELN, "Purchasing document
AEDAT LIKE EKKO-AEDAT, "Created on
ERNAM LIKE EKKO-ERNAM, "Created by
LIFNR LIKE EKKO-LIFNR, "Vendor
END OF IT_POHEADER.
*--Internal table to store Purchasing document Item data
DATA : BEGIN OF IT_POITEM OCCURS 0,
EBELN LIKE EKPO-EBELN, "Purchasing document
EBELP LIKE EKPO-EBELP, "Item Number
MATNR LIKE EKPO-MATNR, "Material number
BUKRS LIKE EKPO-BUKRS, "Company code
WERKS LIKE EKPO-WERKS, "Plant
MATKL LIKE EKPO-MATKL, "Material Group
MENGE LIKE EKPO-MENGE, "Order Quantity
NETPR LIKE EKPO-NETPR, "Net Price
PEINH LIKE EKPO-PEINH, "Price unit
NETWR LIKE EKPO-NETWR, "Net Value
END OF IT_POITEM.
*--Internal table to hold final display data.
DATA : BEGIN OF IT_FINAL OCCURS 0,
EBELN LIKE EKKO-EBELN, "Purchasing document
EBELP LIKE EKPO-EBELP, "Item Number
AEDAT LIKE EKKO-AEDAT, "Created on
ERNAM LIKE EKKO-ERNAM, "Created by
MATNR LIKE EKPO-MATNR, "Material number
BUKRS LIKE EKPO-BUKRS, "Company code
WERKS LIKE EKPO-WERKS, "Plant
MATKL LIKE EKPO-MATKL, "Material Group
MENGE LIKE EKPO-MENGE, "Order Quantity
NETPR LIKE EKPO-NETPR, "Net Price
PEINH LIKE EKPO-PEINH, "Price unit
NETWR LIKE EKPO-NETWR, "Net Value
LIFNR LIKE EKKO-LIFNR, "Vendor
NAME1 LIKE LFA1-NAME1, "Vendor Name
GSBER LIKE EKKN-GSBER, "Business area
*--IR details
IR_BELNR LIKE EKBE-BELNR, "IR-Number of Material Document
IR_BUZEI LIKE EKBE-BUZEI, "IR-Item in material Document
IR_BUDAT LIKE EKBE-BUDAT, "IR-Posting date
IR_MENGE LIKE EKBE-MENGE, "IR-Quantity
*--GR details
GR_BELNR LIKE EKBE-BELNR, "GR-Number of Material Document
GR_BUZEI LIKE EKBE-BUZEI, "GR-Item in material Document
GR_BUDAT LIKE EKBE-BUDAT, "GR-Posting date
GR_MENGE LIKE EKBE-MENGE, "GR-Quantity
END OF IT_FINAL.
*--Internal table to store History per Purchasing Document data
DATA : BEGIN OF IT_HISTORY OCCURS 0,
EBELN LIKE EKBE-EBELN, "Purchasing document
EBELP LIKE EKBE-EBELP, "Item
VGABE LIKE EKBE-VGABE, "Trans/Event type
BELNR LIKE EKBE-BELNR, "Number of Material Document
BUZEI LIKE EKBE-BUZEI, "Item in material Document
BUDAT LIKE EKBE-BUDAT, "Posting date
MENGE LIKE EKBE-MENGE, "Quantity
BEWTP LIKE EKBE-BEWTP, "Posting history category
END OF IT_HISTORY.
*--Internal table to store vendor name.
DATA : BEGIN OF IT_VENDOR OCCURS 0,
LIFNR LIKE LFA1-LIFNR, "Vendor Number
NAME1 LIKE LFA1-NAME1, "Vendor Name
END OF IT_VENDOR.
*--Internal table to store Business area for Purchasing document
DATA : BEGIN OF IT_BUSINESS OCCURS 0,
EBELN LIKE EKKN-EBELN, "Purchasing document
EBELP LIKE EKKN-EBELP, "Purchasing Item
SAKTO LIKE EKKN-SAKTO, "G/L Account No
GSBER LIKE EKKN-GSBER, "Business area
END OF IT_BUSINESS.
DATA : BEGIN OF FIELDNAMES OCCURS 0,
TEXT(40),
END OF FIELDNAMES.
VARIABLES DECLARATION *
DATA: V_FILE LIKE IBIPPARMS-PATH, "File path
V_FLD LIKE DYNPREAD-FIELDNAME, "Dynpread fieldname
V_FLAG(1) VALUE SPACE. "FLAG VARIABLE
SELECTION-SCREEN *
SELECTION-SCREEN BEGIN OF BLOCK S1 WITH FRAME TITLE TEXT-001.
*--Begin of change D10K944316
SELECT-OPTIONS : S_SAKTO FOR EKKN-SAKTO. "G/L Accoun no.
*--End of change D10K944316
SELECTION-SCREEN END OF BLOCK S1.
SELECTION-SCREEN BEGIN OF BLOCK S2 WITH FRAME TITLE TEXT-002.
PARAMETERS : P_EXCEL AS CHECKBOX DEFAULT ' ' . " download to excel
PARAMETERS : C_FILE(128) DEFAULT : 'C:\ZRMM0056.xls'.
SELECTION-SCREEN END OF BLOCK S2.
A T S E L E C T I O N - S C R E E N *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR C_FILE.
*-Form to get file path for download of data
PERFORM GET_FILE_PATH.
AT SELECTION-SCREEN.
PERFORM SCREEN_VALIDATIONS.
START-OF-SELECTION
START-OF-SELECTION.
*--Extract Purchasing document header data.
PERFORM GET_PO_HEADER_DATA.
*--Extract Purchasing document Item data.
IF NOT IT_BUSINESS[] IS INITIAL.
PERFORM GET_PO_ITEM_DATA.
*--Get complete required data in final internal table
PERFORM GET_FINAL_DATA.
ENDIF.
END-OF-SELECTION
END-OF-SELECTION.
IF V_FLAG IS INITIAL.
*--Display Purchasing document details
IF NOT IT_FINAL[] IS INITIAL.
PERFORM DISPLAY_PODATA.
IF P_EXCEL = 'X'.
*--To down load data to excel sheet
PERFORM DOWN_LOAD_TO_EXCEL.
ENDIF.
ENDIF.
ELSE.
MESSAGE I001(ZZ) WITH 'No data found'(003).
ENDIF.
TOP-OF-PAGE
TOP-OF-PAGE.
*--To display page header
PERFORM PAGE_HEADER.
*& Form GET_PO_HEADER_DATA
To Get Purchasing header data
FORM GET_PO_HEADER_DATA .
*--To extract Business Area details
CLEAR IT_BUSINESS.
REFRESH IT_BUSINESS.
SELECT EBELN "Purchasing document
EBELP "Purchasing document item
SAKTO "G/L Account no
GSBER "Business area
FROM EKKN
INTO TABLE IT_BUSINESS
WHERE SAKTO IN S_SAKTO.
IF SY-SUBRC <> 0.
V_FLAG = 'X'.
MESSAGE I001(ZZ) WITH
'No data selected for the given selection criteria'(004).
STOP.
ELSE.
*--To extract Purchasing document details with respect
to G/L Account no
CLEAR IT_POHEADER.
REFRESH IT_POHEADER.
SELECT EBELN "Purchasing document
AEDAT "Created on
ERNAM "Created by
LIFNR "Vendor
FROM EKKO
INTO TABLE IT_POHEADER
FOR ALL ENTRIES IN IT_BUSINESS
WHERE EBELN = IT_BUSINESS-EBELN.
IF NOT IT_POHEADER[] IS INITIAL.
CLEAR IT_VENDOR.
REFRESH IT_VENDOR.
*--Extracting Vendor details
SELECT LIFNR "Vendor #
NAME1 "Name
FROM LFA1
INTO TABLE IT_VENDOR
FOR ALL ENTRIES IN IT_POHEADER
WHERE LIFNR = IT_POHEADER-LIFNR.
ENDIF.
ENDIF.
ENDFORM. " GET_PO_HEADER_DATA
*& Form GET_PO_ITEM_DATA
To extract Purchasing document item data
FORM GET_PO_ITEM_DATA .
CLEAR IT_POITEM.
REFRESH IT_POITEM.
SELECT EBELN "Purchasing document
EBELP "Item Number
MATNR "Material number
BUKRS "Company code
WERKS "Plant
MATKL "Material Group
MENGE "Order Quantity
NETPR "Net Price
PEINH "Price unit
NETWR "Net Value
FROM EKPO
INTO TABLE IT_POITEM
FOR ALL ENTRIES IN IT_BUSINESS
WHERE EBELN = IT_BUSINESS-EBELN
AND EBELP = IT_BUSINESS-EBELP.
IF NOT IT_POITEM[] IS INITIAL.
CLEAR IT_HISTORY.
REFRESH IT_HISTORY.
SELECT EBELN "Purchasing document
EBELP "Item
VGABE "Trans/Event type
BELNR "Number of Material Document
BUZEI "Item in material Document
BUDAT "Posting date
MENGE "Quantity
BEWTP "Posting history category
FROM EKBE
INTO TABLE IT_HISTORY
FOR ALL ENTRIES IN IT_POITEM
WHERE EBELN = IT_POITEM-EBELN
AND EBELP = IT_POITEM-EBELP
AND ( VGABE = '1' OR VGABE = '2' ) "1 = GR , 2 = IR
AND ( BEWTP = 'Q' OR BEWTP = 'E' ). "Q = GR , R = IR
IF SY-SUBRC = 0.
SORT IT_HISTORY BY EBELN EBELP.
ENDIF.
ENDIF.
ENDFORM. " GET_PO_ITEM_DATA
*& Form GET_FILE_PATH
Select file path
FORM GET_FILE_PATH .
CLEAR V_FILE.
MOVE 'p_flname' TO V_FLD.
MOVE C_FILE TO V_FILE.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = V_FLD
IMPORTING
FILE_NAME = V_FILE
EXCEPTIONS
OTHERS = 1.
MOVE V_FILE TO C_FILE.
ENDFORM. " GET_FILE_PATH
*& Form PAGE_HEADER
To Print page header and other details
FORM PAGE_HEADER .
*--Page Header
ULINE AT /1(300).
FORMAT COLOR 1.
WRITE:/ 'Run Date:'(005), SY-DATUM, 45 'Stanley Works'(006),
100 'Page No:'(007), SY-PAGNO LEFT-JUSTIFIED, 298 ''.
WRITE:/ 'Run Time:'(008), SY-UZEIT, 43 SY-TITLE, 100 SY-UNAME, 298 ''.
WRITE:/ 'Source :'(009), SY-SYSID, 100 SY-CPROG, 298 ''.
FORMAT COLOR OFF.
ULINE AT /1(300).
FORMAT COLOR 4.
WRITE : / SY-VLINE , (10) 'Purchasing Doc'(010),
SY-VLINE, (5) 'Item'(011),
SY-VLINE, (10) 'Created On'(012),
SY-VLINE, (7) 'Crea By'(013),
SY-VLINE, (10) 'Material'(014),
SY-VLINE, (6) 'Com cd'(015),
SY-VLINE, (5) 'Plant'(016),
SY-VLINE, (10) 'Mat Group'(017),
SY-VLINE, (13) 'Order Qty'(018),
SY-VLINE, (11) 'Net Price'(019),
SY-VLINE, (10) 'Price Unit'(020),
SY-VLINE, (13) 'Net Value'(021),
SY-VLINE, (8) 'Bus Area'(022),
SY-VLINE, (10) 'Vendor'(023),
SY-VLINE, (28) 'Vendor Name'(024),
*--IR details
SY-VLINE, (10) 'IR-Mat Doc'(025),
SY-VLINE, (5) 'IR-It'(026),
SY-VLINE, (9) 'IR-Post dt'(027),
SY-VLINE, (13) 'IR-Quantity'(028),
*--GR details
SY-VLINE, (10) 'GR-Mat Doc'(029),
SY-VLINE, (5) 'GR-It'(030),
SY-VLINE, (9) 'GR-Post dt'(031),
SY-VLINE, (13) 'GR-Quantity'(032), SY-VLINE.
FORMAT COLOR OFF.
ULINE AT /1(300).
ENDFORM. " PAGE_HEADER
*& Form SCREEN_VALIDATIONS
Selection screen validations
FORM SCREEN_VALIDATIONS .
*--Validation for G/L Account No
IF NOT S_SAKTO IS INITIAL.
SELECT SAKNR UP TO 1 ROWS
INTO EKKN-SAKTO
FROM SKA1 WHERE
SAKNR IN S_SAKTO.
ENDSELECT.
IF SY-SUBRC <> 0.
MESSAGE E001(ZZ) with 'Please enter a valid G/L Account no'(048).
ENDIF.
ENDIF.
*--Validation for Excel file path
IF P_EXCEL = 'X'.
IF C_FILE = ' '.
MESSAGE E001(ZZ) with 'Please enter a valid Excle Path'(035).
ENDIF.
ENDIF.
ENDFORM. " SCREEN_VALIDATIONS
*& Form DISPLAY_PODATA
To Display Purchasing Document details
FORM DISPLAY_PODATA .
FORMAT COLOR 2.
SORT IT_FINAL BY EBELN EBELP AEDAT BUKRS WERKS.
LOOP AT IT_FINAL.
WRITE : / SY-VLINE ,(10) IT_FINAL-EBELN, "Purchasing Doc
SY-VLINE, (5) IT_FINAL-EBELP, "Item
SY-VLINE, (10) IT_FINAL-AEDAT, "Created On
SY-VLINE, (7) IT_FINAL-ERNAM, "Created By
SY-VLINE, (10) IT_FINAL-MATNR, "Material
SY-VLINE, (6) IT_FINAL-BUKRS, "Company code
SY-VLINE, (5) IT_FINAL-WERKS, "Plant
SY-VLINE, (10) IT_FINAL-MATKL, "Material Group
SY-VLINE, (13) IT_FINAL-MENGE, "#EC UOM_IN_MES
"Order Qty
SY-VLINE, (11) IT_FINAL-NETPR, "#EC UOM_IN_MES
"Net Price
SY-VLINE, (10) IT_FINAL-PEINH, "#EC UOM_IN_MES
"Price Unit
SY-VLINE, (13) IT_FINAL-NETWR, "#EC UOM_IN_MES
"Net Value
SY-VLINE, (8) IT_FINAL-GSBER, "Bus Area
SY-VLINE, (10) IT_FINAL-LIFNR, "Vendor
SY-VLINE, (28) IT_FINAL-NAME1, "Vendor name
*--IR details
SY-VLINE, (10) IT_FINAL-IR_BELNR, "IR-Mat Doc
SY-VLINE, (5) IT_FINAL-IR_BUZEI, "IR-It
SY-VLINE, (9) IT_FINAL-IR_BUDAT, "IR-Post dt
SY-VLINE, (13) IT_FINAL-IR_MENGE, "#EC UOM_IN_MES
"IR-Quantity
*--GR details
SY-VLINE, (10) IT_FINAL-GR_BELNR, "GR-Mat Doc
SY-VLINE, (5) IT_FINAL-GR_BUZEI, "GR-It
SY-VLINE, (9) IT_FINAL-GR_BUDAT, "GR-Post dt
SY-VLINE, (13) IT_FINAL-GR_MENGE, SY-VLINE.
"#EC UOM_IN_MES
"GR-Quantity
ENDLOOP.
FORMAT COLOR OFF.
ENDFORM. " DISPLAY_PODATA
*& Form DOWN_LOAD_TO_EXCEL
text
FORM DOWN_LOAD_TO_EXCEL .
<b>REFRESH FIELDNAMES.
FIELDNAMES-TEXT = TEXT-010.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-011.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-012.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'Created By'(036).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-014.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'Company Code'(037).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-016.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'Material Group'(038).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'Order Quantity'(039).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-019.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-020.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-021.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'Business Area'(040).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-023.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-024.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'IR Material Doc'(041).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'IR Item'(042).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'IR Posting Date'(043).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-028.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'GR Material Doc'(044).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'GR Item'(045).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = 'GR Posting Date'(046).
APPEND FIELDNAMES.CLEAR FIELDNAMES.
FIELDNAMES-TEXT = TEXT-032.
APPEND FIELDNAMES.CLEAR FIELDNAMES.
*--FM to download data to Excel sheet
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = C_FILE
FILETYPE = 'DAT'
TABLES
DATA_TAB = IT_FINAL
FIELDNAMES = FIELDNAMES
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
GUI_REFUSE_FILETRANSFER = 8
OTHERS = 9.
IF SY-SUBRC <> 0.
MESSAGE E001(ZZ) WITH 'Data could not downloaded'(047).
ENDIF.</b>ENDFORM. " DOWN_LOAD_TO_EXCEL
*& Form GET_FINAL_DATA
To Populate required data in final internal table
FORM GET_FINAL_DATA .
CLEAR IT_FINAL.
REFRESH IT_FINAL.
LOOP AT IT_POITEM.
CLEAR IT_POHEADER.
READ TABLE IT_POHEADER WITH KEY EBELN = IT_POITEM-EBELN.
IF SY-SUBRC = 0.
MOVE : IT_POHEADER-EBELN TO IT_FINAL-EBELN, "Purchasing Doc
IT_POITEM-EBELP TO IT_FINAL-EBELP, "Item
IT_POHEADER-AEDAT TO IT_FINAL-AEDAT, "Created On
IT_POHEADER-ERNAM TO IT_FINAL-ERNAM, "Created By
IT_POITEM-MATNR TO IT_FINAL-MATNR, "Material
IT_POITEM-BUKRS TO IT_FINAL-BUKRS, "Company code
IT_POITEM-WERKS TO IT_FINAL-WERKS, "Plant
IT_POITEM-MATKL TO IT_FINAL-MATKL, "Material Group
IT_POITEM-MENGE TO IT_FINAL-MENGE, "Order Qty
IT_POITEM-NETPR TO IT_FINAL-NETPR, "Net Price
IT_POITEM-PEINH TO IT_FINAL-PEINH, "Price Unit
IT_POITEM-NETWR TO IT_FINAL-NETWR, "Net Value
IT_POHEADER-LIFNR TO IT_FINAL-LIFNR. "Vendor
*--To Insert IR details
CLEAR IT_HISTORY.
READ TABLE IT_HISTORY WITH KEY EBELN = IT_POITEM-EBELN
EBELP = IT_POITEM-EBELP
VGABE = '2'
BEWTP = 'Q'.
IF SY-SUBRC = 0.
MOVE :
IT_HISTORY-BELNR TO IT_FINAL-IR_BELNR, "IR-Number of Mat Doc
IT_HISTORY-BUZEI TO IT_FINAL-IR_BUZEI, "IR-Item in mat Doc
IT_HISTORY-BUDAT TO IT_FINAL-IR_BUDAT, "IR-Posting date
IT_HISTORY-BUDAT TO IT_FINAL-IR_MENGE. "IR-Quantity
ENDIF.
*--To insert GR details
CLEAR IT_HISTORY.
READ TABLE IT_HISTORY WITH KEY EBELN = IT_POITEM-EBELN
EBELP = IT_POITEM-EBELP
VGABE = '1'
BEWTP = 'E'.
IF SY-SUBRC = 0.
MOVE :
IT_HISTORY-BELNR TO IT_FINAL-GR_BELNR, "IR-Number of Mat Doc
IT_HISTORY-BUZEI TO IT_FINAL-GR_BUZEI, "IR-Item in mat Doc
IT_HISTORY-BUDAT TO IT_FINAL-GR_BUDAT, "IR-Posting date
IT_HISTORY-BUDAT TO IT_FINAL-GR_MENGE. "IR-Quantity
ENDIF.
*--To insert Vendor details
CLEAR IT_VENDOR.
READ TABLE IT_VENDOR WITH KEY LIFNR = IT_POHEADER-LIFNR.
IF SY-SUBRC = 0.
MOVE : IT_VENDOR-NAME1 TO IT_FINAL-NAME1.
ENDIF.
*--To insert Business area
CLEAR IT_BUSINESS.
READ TABLE IT_BUSINESS WITH KEY EBELN = IT_POITEM-EBELN
EBELP = IT_POITEM-EBELP.
IF SY-SUBRC = 0.
MOVE : IT_BUSINESS-GSBER TO IT_FINAL-GSBER.
ENDIF.
APPEND IT_FINAL.
CLEAR IT_FINAL.
ENDIF.
ENDLOOP.
ENDFORM. " GET_FINAL_DATA
thanks
Sunil -
I need to convert PDF to Excel, however, columns and tabs make many merged cells and many blank columns. In addition to not separate the columns correctly, I see many not separate lines together in the same cell. I'm even thinking that Adobe Acrobat Pro DC has limitations. There is no way to define what points in columns to force break column? Nor create many columns that are useless? How does text to column in Excel, fixed size when we import text, and define where the breaks have columns?
Google Tradutor para empresas:Google Toolkit de tradução para appsTradutor de sitesGlobal Market Finder
Desativar tradução instantâneaSobre o Google TradutorCelularComunidadePrivacidade e TermosAjudaEnviar feedbackPDF does not contain columns, rows, formats, styles, or other aspects of word processing or spreadsheet file formats.
This is because PDF is decidedly not a word processing or spreadsheet file format or something "like" one of those.
(see ISO 32000 for what PDF "is")
What can optimize the export of PDF page content is to start with a well-formed tagged PDF (ISO 14289-1, PDF/UA-1 compliant).
Without that export is what it is and one performs whatever content cleanup is needed using the native application for the export file (MS Word or Excel).
Be well... -
Totalling the columns in ALV Grid
Hello All,
I have a output with amount and currencies. The problem i am facing is, the amount is in USD and in GBP and it is giving me single value. It is not splitting the USD amount from the GBP amount.
Also, I am doing a subtotal based on material. This is the most important requirement.
Can anybody help me out in this.
Thanks,
Salil
I am giving the below piece of code if you want to refer it.
DATA: gr_alv TYPE REF TO cl_salv_table,
lr_display TYPE REF TO cl_salv_display_settings,
lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table,
lr_functions TYPE REF TO cl_salv_functions_list,
lr_sorts TYPE REF TO cl_salv_sorts,
lr_print TYPE REF TO cl_salv_print,
lr_column_f TYPE REF TO cl_salv_columns,
gr_error TYPE REF TO cx_salv_not_found ,
lr_layout TYPE REF TO cl_salv_layout.
DATA: key TYPE salv_s_layout_key,
gr_msg TYPE string.
IF NOT lt_output[] IS INITIAL.
TRY.
* Create ALV instance - use CALL METHOD since this is a static method
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_alv
CHANGING
t_table = lt_output.
lr_display = gr_alv->get_display_settings( ).
lr_display->set_list_header( text-ttl ).
* Get functions object and then set all the functions to be allowed
lr_functions = gr_alv->get_functions( ).
lr_functions->set_all( ).
DATA: lv_field TYPE lvc_fname.
* Get column settings object and then optimize the column widths to the
* data
lr_columns = gr_alv->get_columns( ).
lr_columns->set_optimize( ).
*--- set column header for custom field Difference in Qty
TRY.
lr_column ?= lr_columns->get_column( 'BUCHM2' ).
lr_column->set_output_length('12').
lr_column->set_long_text( 'Diff Qty' ).
lr_column->set_short_text( 'Diff Qty' ).
lr_column->set_medium_text( 'Diff Qty' ).
CATCH cx_salv_not_found INTO gr_error.
gr_msg = gr_error->get_text( ).
MESSAGE gr_msg TYPE 'I'.
ENDTRY.
*--- set column header for custom field Difference in Qty Abs
TRY.
lr_column ?= lr_columns->get_column( 'BUCHM3' ).
lr_column->set_output_length('13').
lr_column->set_long_text( 'Diff Qty(Abs)' ).
lr_column->set_medium_text( 'Diff Qty(Abs)' ).
* lr_column->set_short_text( 'Diff Qty(Abs)' ).
CATCH cx_salv_not_found INTO gr_error.
gr_msg = gr_error->get_text( ).
MESSAGE gr_msg TYPE 'I'.
ENDTRY.
*--- set column header for custom field Difference in Value
TRY.
lr_column ?= lr_columns->get_column( 'VALUE' ).
lr_column->set_output_length('15').
lr_column->set_long_text( 'Value Diff' ).
lr_column->set_medium_text( 'Value Diff' ).
lr_column->set_short_text( 'Value Diff' ).
CATCH cx_salv_not_found INTO gr_error.
gr_msg = gr_error->get_text( ).
MESSAGE gr_msg TYPE 'I'.
ENDTRY.
*--- set column header for custom field Difference in Value Abs
TRY.
lr_column ?= lr_columns->get_column( 'VALUE_ABS' ).
lr_column->set_output_length('15').
lr_column->set_long_text( 'Value Diff(Abs)' ).
lr_column->set_medium_text( 'Value Diff(Abs)' ).
CATCH cx_salv_not_found INTO gr_error.
gr_msg = gr_error->get_text( ).
MESSAGE gr_msg TYPE 'I'.
ENDTRY.
*--- set column header for custom field Status
TRY.
lr_column ?= lr_columns->get_column( 'STATUS' ).
lr_column->set_output_length('15').
lr_column->set_long_text( 'PI Item Status' ).
lr_column->set_medium_text( 'PI Item Status' ).
CATCH cx_salv_not_found INTO gr_error.
gr_msg = gr_error->get_text( ).
MESSAGE gr_msg TYPE 'I'.
ENDTRY.
*--- set column header for custom field Status
TRY.
lr_column ?= lr_columns->get_column( 'TOTAL' ).
lr_column->set_output_length('15').
lr_column->set_long_text( 'Total Value Diff' ).
lr_column->set_medium_text( 'Total Value Diff' ).
CATCH cx_salv_not_found INTO gr_error.
gr_msg = gr_error->get_text( ).
MESSAGE gr_msg TYPE 'I'.
ENDTRY.
* Optimize the column widths for printing.
lr_print = gr_alv->get_print( ).
lr_print->set_print_parameters_enabled( value = 'X' ).
lr_print->set_column_optimization( value = 'X' ).
*--- This code is to get the layout,save the layout and display the
* layout
lr_layout = gr_alv->get_layout( ).
lr_layout->set_default( cl_salv_layout=>true ). " allow default
key-report = sy-repid.
lr_layout->set_key( key ).
lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
DATA: init_layout TYPE slis_vari.
init_layout = p_layout.
lr_layout->set_initial_layout( init_layout ).
*--- display report
gr_alv->display( ).
CATCH cx_salv_msg.
WRITE: 'Error displaying grid! - cx_salv_msg'.
CATCH cx_salv_not_found.
WRITE: 'Error displaying grid! - cx_salv_not_found'.
CATCH cx_salv_data_error.
WRITE: 'Error displaying grid! - cx_salv_data_error'.
CATCH cx_salv_existing.
WRITE: 'Error displaying grid! - cx_salv_existing'.
ENDTRY.
ELSE.
MESSAGE s004.
ENDIF.Can you use something like function module CONVERT_CURRENCY_BY_RATE to convert one set of currencies so all amounts are in the same currency before you display them in the ALV?
- April King -
How to change the column width in Smartforms..?
Hi All..
I need to change the column width in a smartform.
The requirement has been mentioned as follows...
Adjust the column width of the following columns:
MATERIAL: 14 char
DESCRIPTION: 20 char
How to perform this..??
Where can i find the column width of various columns of a smartform..???
Please Help me...
Regards
PavanIn the SMART Forms, you would have created a Table object and specified the line width and divided that into no. of columns that you want, you have to mandatorily specify the width of each column so that total of column width will be equal to that of the line width.
When you double click on the Table object, you can TABLE tab on the right side. If you can't see the line / columns details, click on the DETAILS button.
Regards,
Ravi
Note - Please mark all the helpful answers -
How to read in a file and change the column attributes
Hi,
I'm new to java and i'm stuggling to find a way to read in a text file and perform calculations on the data, such as to normalise it.
What in want to do is normalise the data by finding the greatest value in a column and then divide all the other values in the column with that value.
I know how to read a file in and store each line in a vector but for this problem i think i need to store each column in an array, but i'm not sure how to do this.
Can anyone help please?
ThanksHi,
I'm new to java and i'm stuggling to find a way to
read in a text file and perform calculations on the
data, such as to normalise it.
What in want to do is normalise the data by finding
the greatest value in a column and then divide all
the other values in the column with that value.
I know how to read a file in and store each line in a
vector but for this problem i think i need to store
each column in an array, but i'm not sure how to do
this.
Can anyone help please?
ThanksI think this should work but I wrote it out without completely thinking about it (hopefully to get things started).
So if you had this:
age height earnings
0 2 100
1 3 50
2 1 0
For the age column you'd take 2 as the largest and then divide 0 and 1 by two to get 0, .5.
First build up test files that seperate the columns in different ways. With spaces, tabs, and the ASCI Control character for null ( I think it's 0 ). Your program should detect
numbers and spaces, tabs control character, commas and periods (for money). Because numbers don't have spaces it should be easy to keep track of which column
you're in.
Store each line into a 3D String array with each index containing a String built up from the chars scanned in on each line, when a blank area is found followed by another
number iterate the column index. When you come to the end of the line set column == 0 and row+1.
private String[][][] test = new String[2][6][1];
20 3 11 14 44 0
4 5 7 80 91 49
test[0][0][0] would be row 1 col 1 value 1 ((20))
test[0][1][0] would be r1, c2, v1 ((3))
test[1][0][0] would be r2, c1, v1 ((4))
test[1][2][0] would be r2, c3, v1 ((7))
test[1][5][0] would be r2, c6, v1 ((49))
package source.Final;
import javax.swing.*;
import java.io.*;
public class S7
public static void main(String[] args)
getContents();
System.exit(0);
public static void getContents()
String lineSep = System.getProperty("line.separator");
char c = ' ';
int iterator = 0;
int i = 0;
int charNum = 1;
int lineCount = 1;
//declared here only to make visible to finally clause
BufferedReader input = null;
BufferedWriter out = null;
try {
String line = null;
* This implementation reads / writes one line at a time
* using the buffered reader / writer Java classes.
input = new BufferedReader( new FileReader( "C:\\Scan file test\\Read\\test1.txt" ));
out = new BufferedWriter( new FileWriter( "C:\\Scan file test\\Read\\test2.txt" ));
//input = new BufferedReader( new FileReader( "C:\\Scan file test\\Read\\booked_policies1.txt" ));
//out = new BufferedWriter( new FileWriter( "C:\\Scan file test\\Write\\booked_policies1.txt" ));
//input = new BufferedReader( new FileReader( "C:\\Scan file test\\Read\\booked_policies2.txt" ));
//out = new BufferedWriter( new FileWriter( "C:\\Scan file test\\Write\\booked_policies2.txt" ));
//input = new BufferedReader( new FileReader( "C:\\Scan file test\\Read\\booked_policies3.txt" ));
//out = new BufferedWriter( new FileWriter( "C:\\Scan file test\\Write\\booked_policies3.txt" ));
out.write( "Character\tLine Number\tCharacter Number\tAscii Value" + lineSep );
while (( line = input.readLine()) != null)
i = 0;
charNum = 1;
iterator = 0;
while( i < line.length() )
c = line.charAt(iterator);
if( (int)c == 0 || (int)c == 9 )
break;
else if( c >= '[' && c <= '_')
{out.write( "["+c+"]\t\t"+"["+lineCount+"]\t\t"+"["+charNum+"]\t\t\t"+"["+(int)(c)+"]"+lineSep );}
else if( c < ' ' )// && (int)c != 0 && (int)c != 9 )
{out.write( "["+c+"]\t\t"+"["+lineCount+"]\t\t"+"["+charNum+"]\t\t\t"+"["+(int)(c)+"]"+lineSep );}
else if( c > ';' && c <= '@' && c != '=')
{out.write( "["+c+"]\t\t"+"["+lineCount+"]\t\t"+"["+charNum+"]\t\t\t"+"["+(int)(c)+"]"+lineSep );}
else if( c >= '!' && c < '"' )
{out.write( "["+c+"]\t\t"+"["+lineCount+"]\t\t"+"["+charNum+"]\t\t\t"+"["+(int)(c)+"]"+lineSep );}
else if( c > 'z' && c < '~' )
{out.write( "["+c+"]\t\t"+"["+lineCount+"]\t\t"+"["+charNum+"]\t\t\t"+"["+(int)(c)+"]"+lineSep );}
else if( c == '%' )
{out.write( "["+c+"]\t\t"+"["+lineCount+"]\t\t"+"["+charNum+"]\t\t\t"+"["+(int)(c)+"]"+lineSep );}
else if( c > '~' )
{out.write( "["+c+"]\t\t"+"["+lineCount+"]\t\t"+"["+charNum+"]\t\t\t"+"["+(int)(c)+"]"+lineSep );}
charNum += 1;
iterator += 1;
i++;
lineCount += 1;
catch (FileNotFoundException ex) {ex.printStackTrace(); System.out.println("File not found.");}
catch (IOException ex){ex.printStackTrace(); System.out.println("IO Error.");}
finally{ try{ if( input != null ) input.close(); if( out != null ) out.close();}
catch (IOException ex){ex.printStackTrace(); System.out.println("IO Error #2.");}
}
Maybe you are looking for
-
Error in using mysql in struts, help
error log: 2005-12-07 10:34:28 StandardContext[employees]Marking servlet action as unavailable 2005-12-07 10:34:28 StandardContext[employees]Servlet /employees threw load() exception javax.servlet.UnavailableException: Initializing application data s
-
I am using RH10 to maintain and update several WebHelp projects for customer-facing Internet applications. I am noticing inconsistencies in css and html so I would like to create several snippets for later re-use. My wishlist, so far: FAQ page with
-
Hi, I am calculating withholding tax on down payment. At the time of down payment the system has calculated WHT properly and i have also posted invoice, then also system has calculated WHT. I want to clear this down payment against invoice. As pe
-
Pointer slow when deployed via Citrix XenApp
I have Acrobat Standard XI installed on Windows Server 2008 R2 boxes and deployed to users via Citrix. Users have reported an issue whereby the mouse pointer is jittery as though the refresh rate on it is low whenever the select tool changes to the p
-
Hi, While executing the transaction RERAALCN, iam getting the below errors. REC 1000/100000 Accrual subobject IS10000000000100000/4A0F780854BC61D1E10000000A641237 not found Accrual object 00000000000000000000000000000000 is does not exist in company