‎2009 Aug 13 12:53 PM
Please use meaningfull subject titles in future
-
Basically Iu2019m into BW but currently Iu2019ve to write a report:
Iu2019ve a report in which a field CUSTOMER is defined as follows.
Tables: /BIO/PCUST_SALES, /BIO/HCUST_SALES.
SELECT-OPTIONS: S_CUST for /BIO/PCUST_SALES-cust_sales.
Select nodename datefrom dateto into table h_customer where nodename in S_CUST. can be written to fetch validity dates from /BIO/HCUST_SALES.
But my issue is S_CUST is normal 8 digit sold_toparty where as nodename is concatenation of division distr_chan salesorg and sol_toparty.
EG: S_CUST(Cust_sales) value is 03600789, where as nodename is in the format 0101201003600789 (Where the first 01 is for division, 2nd 01 for distr_chan, 2010 for salesorg n the cust_sales)
Can some please suggest how I can get the validity dates from database table /BIO/HCUST_SALES in this situation.
Regards
Madavi
Edited by: Julius Bussche on Aug 13, 2009 4:07 PM
‎2009 Aug 13 1:02 PM
Hi,
You can segregate all these into separate fields as the length is fixed for all of them.
Like for division & D.channel you have only two characters, for sale org. you have 4 characters.
So declare 4 fields for these values as shown below:
data : m_division(2) type c,
m_channel(2) type c,
m_org(4) type c,
m_cust(10) type c.
now you can segragate as
say s_cust is having value as '0101201003600789'.
m_cust = s_cust+8(10).
now it will pick only characters starting after 8th positions.
Regds,
Anil
‎2009 Aug 13 12:59 PM
Hi,
One way is to write the select using wild card entries like this,
SELECT-OPTIONS: S_CUST for /BIO/PCUST_SALES-cust_sales.
concatenate '%' s_cust-low into s_cust-low.
Select nodename datefrom dateto
into table h_customer
where nodename like S_CUST-low.
Regards,
Vik
‎2009 Aug 13 1:02 PM
Hi,
You can segregate all these into separate fields as the length is fixed for all of them.
Like for division & D.channel you have only two characters, for sale org. you have 4 characters.
So declare 4 fields for these values as shown below:
data : m_division(2) type c,
m_channel(2) type c,
m_org(4) type c,
m_cust(10) type c.
now you can segragate as
say s_cust is having value as '0101201003600789'.
m_cust = s_cust+8(10).
now it will pick only characters starting after 8th positions.
Regds,
Anil
‎2009 Aug 14 11:27 AM
Thanks both,
For the quick turn around..
My exact requirement is :
Iu2019ve 2 tables /bi0/hcust_sales & /bi0/pcust_sales
Table /bi0/Pcust_sales contains fields division, distr_chan, salesorg & sold_to
Table /bi0/hcust_sales contains fields nodename, datefrom & dateto
Nodename = concatenation of division, distr_chan, salesorg & soldto.
My aim is to move the fields from both of these tables(may be inner join concept will work out)
Division, distr_chan, sales_org, sold_to from /bi0/pcust_sales and dateto datefrom from table /bi0/hcust_sales for all the (sold_to)values entered by the user in the selection screen.
Can any now now please let me know in detail how can I achieved this, as I'm new to ABAP
Regards
Madhavi
‎2009 Aug 14 11:44 AM
HI,
U cannot use join as there was no common field in both the tables...try this way
types : begin of ty_tab,
division type <give the dataelement>,
distr_chan type <give the dataelement>,
salesorg type <give the dataelement>,
sold_to type <give the dataelement>,
nodname like /bi0/hcust_sales-nodname,
end of ty_tab.
data : itab type table of ty_tab,
itab1 type table of /bi0/hcust_sales .
select division distr_chan salesorg sold_to from /bi0/Pcust_sales into corresponding field of table itab
where division in s_division (selection-screen field)
and distr_chan in s_distr_chan
and salesorg in s_salesorg
and sold_to in s_sold_to.
if sy-subrc eq 0.
LOOP at ITAB.
CONCATENATE ITAB-DIVISION ITAB-DISTR_CHAN ITAB-SALESORG ITAB-SOLD_TO INTO ITAB-NODENAME.
MODIFY ITAB.
ENDLOOP.
ENDIF.
now ur itab has the nodename values
if not ITAB[] IS INITIAL.
select nodename datefrom dateto from Table /bi0/hcust_sales into table itab1
for all entries in ITAB
where Nodename = ITAB-NODENAME
and datefrom = s_date_from
and dateto = s_date_to.
endif.
Now ITAB1 will have the required data.
Regards,
Nagaraj
‎2009 Aug 14 11:51 AM
Hi Madhavi,
as you have said that you need to fetch data form tables /bi0/hcust_sales and /bi0/pcust_sales.
what you can do is.
1. create an internal table (first_itab) with fields Division, distr_chan, sales_org, sold_to and then fetch all these data form table /bi0/pcust_sales.
2. Create second internal table (sec_itab) with fields sold_to and nodename.
Put a loop on the first internal table (first itab) and then append second internal table (sec_itab) using below logic.
LOOP AT first itab.
sec_itab-sold_to = first_itab-sold_to.
CONCATENATE first_itab-division,
first_itab-distr_chan,
first_itab-salesorg,
first_itab-soldto
INTO sec_itab-nodename.
APPEND sec_itab.
ENDLOOP.Now you have got the relevant nodename for sold_to values.
3. Create another internal table with fields nodename, dateto and datefrom.
and fetch all the data from /bi0/hcust_sales for all the entries in sec_itab.
Hope this will sort out your problem.
Regards,
Raj Gupta
‎2009 Aug 14 12:54 PM
Hi thanks both for your valuable suggestions,
Getting data from my first table is very easy:
select division distr_chan salesorg cust_sales into corresponding fields of table itab1
from /bi0/pcust_sales where cust_sales in s_cust.
if sy-subrc eq 0.
LOOP at ITAB.
CONCATENATE ITAB-DIVISION ITAB-DISTR_CHAN ITAB-SALESORG ITAB-SOLD_TO INTO ITAB-NODENAME.
MODIFY ITAB.
ENDLOOP.
ENDIF.
if not ITAB[] IS INITIAL.
select nodename datefrom dateto from Table /bi0/hcust_sales into table itab2
for all entries in ITAB1
where Nodename = ITAB1-NODENAME.
endif.
Now table Itab1 has fields division distr_chan salesorg cust_sales and
Itab2 has nodename datefrom dateto and now I would like to move few fileds from these 2 tables in one more internal table as follows:-
Select adivision adistr_chan asalesorg acust_sales
Bdatefrom Bdateto into table itab3.
Please correct me with this third internal table itab3u2026
Regards
Madhavi
‎2009 Aug 14 1:08 PM
HI,
In this case u can use the below offset values .... in R/3 the distribution channel has 2 chars, divison 2 cahrs. sales org 4 chars,
customer 10 chars.
LOOP at ITAB2.
ITAB3-DIVISION = ITAB2+0(2).
ITAB3-DISTR_CHAN = ITAB2+2(2).
ITAB3-SALESORG = ITAB2+4(4).
ITAB3-SOLD_TO = ITAB2+8(10).
ITAB3-DATEFROM = ITAB2-DATEFROM
ITAB3-DATETO = ITAB2-DATETO.
APPEND ITAB3.
ENDLOOP.
Now u will have all the values..
Regards,
Nagaraj
‎2009 Aug 17 7:05 AM
Hi Nagaraj,
Thank you..
I felt this is a very good option to move data from both tables ITAB1 & ITAB2 into ITAB3 but unfortunately Iu2019ve few more Z fields in ITAB1 which are not available in ITAB2,so in this step if I loop at ITAB2 and fetch data for all fields Iu2019m unable to fetch data for those z fieldsu2026
Please suggest if there is any other option to move all these fields into ITAB 3 from ITAB1 & Itab2.
Regards
Madhavi
‎2009 Aug 17 7:31 AM
HI,
U can use Read statement for ITAB1 inside ITAB2....as u have nodename as common in both the internal tables..
Loop at itab2.
read table itab1 with key nodename = itab2-nodename.
if sy-subrc eq 0.
Now move ur itab1-zfields to itab3.
endif.
Endloop.
Regards,
Nagaraj
‎2009 Aug 18 7:18 AM
Thanks 4 all ur support,
My issue is now resolved but time consuming so have to check vth the performance...
Thanks
Madhavi
‎2009 Aug 14 4:15 PM
Hi,
Write Code like this:
parameters: p_VTWEG type VTWEG obligatory,
p_SPART type SPART obligatory,
p_vkorg type vkorg obligatory.
Tables: /BIO/PCUST_SALES, /BIO/HCUST_SALES.
SELECT-OPTIONS: S_CUST for /BIO/PCUST_SALES-cust_sales obligatory.
data: begin of wa_node,
nodename type nodename " use proper data element here
end of wa_node,
t_nodes like standard table of wa_node.
at selection-screen.
if if s_cust[] is initial.
else.
" write select query here first to get custmers into one internal table Ex: t_custmer, for S_CUST.
refresh: t_nodes.
loop at custmer into w_custmer.
wa_node-nodename+0(2) = p_SPART.
wa_node-nodename+2(2) = p_VTWEG.
wa_node-nodename+4(4) = p_vkorg.
wa_node-nodename+8 = w_custmer-cust.
append wa_node to t_nodes.
endloop.
Select nodename datefrom dateto into table h_customer
for all entries in t_nodes
where nodename - t_nodes-nodename.
endif.
Regards,
Balaji Peethani.