Logical database LDB
hi,
what is LDB....its benefit
and how to to it for multiple tables ......
.... i want to use LDB instead of table joins...... there are abt 20 tables..... using joins , the performance is slow ...
..... please advise..
thanks
LOGICAL DATABASES:
Logical Databases are used to generate report.
It is a repository object, not a data dictionary object.
Under one logical database, a node is created first for the corresponding table in the database.
A logical database can have any number of related nodes in the hierarchical manner.
First node of the logical database is called as ROOT NODE.
SLDB or SE36 to create logical databases.
Navigations to Create Logical Database:
SLDB -> Specify LDB name starting with Z or Y -> Click on Create -> Opens an interface -> Enter short description
-> Create -> Save under a package and assign request number -> Opens an interface
-> Specify Root Node name (MARA) -> Enter short description for the Root node
-> Specify Database Table name (MARA) -> Create -> Opens an interface
-> Select the Root Node (KNA1) -> Click on SELECTIONS pushbutton from Appn.
Toolbar -> Click on Yes to generate Selection Screens from the Structure
-> Click on No to Search Help -> Opens an Interface
-> Select the checkboxes to create Field Selections and Free Selections
-> TRansfer -> Opens an Include Program -> Decomment Select-Options statement and specify range variable as follows:
SELECT-OPTIONS : MATNUM FOR MARA-MATNR.
-> Save -> Activate -> Come back.
Select the Node -> Click on SOURCE CODE pushbutton
-> Click on Yes to generate source code from Structure and Selections -> Opens a report with two Include Files :
include DBZLOGICAL_DATABASE1TOP . " header
include DBZLOGICAL_DATABASE1NXXX . " all system routines
-> Double click on Header File to declare global variables -> Specify Following code:
TABLES : MARA * Autogenerated
DATA IT_MARA LIKE MARA OCCURS 0 WITH HEADER LINE.
-> Save -> Activate -> Come back -> Double click on System Routine file, where the fetching operations are done
-> Opens an Include File with three subfiles as follows:
include DBZLOGICAL_DATABASE1N001 . " Node MARA
include DBZLOGICAL_DATABASE1FXXX . " init, PBO, PAI
include DBZLOGICAL_DATABASE1SXXX . " search help
-> Double click on the first file -> Specify SELECT operation statement as follows:
select * from mara into table it_mara where matnr in MATNUM.
PUT MARA. * AUTOGENERATED CODE
loop at it_mara.
write :/ it_mara-matnr, it_mara-mtart, it_mara-mbrsh, it_mara-meins.
endloop.
-> Save -> Activate.
To Access LDB node, create SE38 PROGRAM, Specify LDB name in ATTRIBUTES section -> Specify following code in SE38:
NODES MARA.
GET MARA.
-> Save -> Activate -> Execute.
Similar Messages
-
Use SAP defined methods instead of Logical Database(LDB)
Hi All,
I gonethrough some documents related to new HR ABAP programing without using logical database. we can replace the logical databased with SAP defined methods for all the infotypes. Appreciate if anyone let me know how do this.
Thanks in advance.
Thanks,
-sureshYes.. we can use the Infotype reader class.. you can use the following sample code & go from there.. fyi I wrote this on a 47 system..
*& Report ZP_INF_CL *
*& read an infotype using ABAP Objects *
report zp_inf_cl line-size 1000.
infotypes: 0001,0008.
parameters: p_infty type infty,
p_pernr type pernr_d.
constants: c_a type tclas value 'A',
c_true value 'X'.
data: w_infotype_reader type ref to if_hrpa_read_infotype,
t_inftab type hrpad_prelp_tab,
w_missing_auth type boole_d,
w_data_exists type boole_d,
rec_infty like line of t_inftab.
* init infotype reader
call method cl_hrpa_read_infotype=>get_instance
importing
infotype_reader = w_infotype_reader.
call method w_infotype_reader->read
exporting
tclas = c_a
pernr = p_pernr
infty = p_infty
begda = sy-datum
endda = sy-datum
no_auth_check = c_true
importing
infotype_tab = t_inftab
data_exists = w_data_exists
missing_auth = w_missing_auth.
loop at t_inftab into rec_infty.
call method cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
exporting
prelp = rec_infty
importing
pnnnn = p0001.
append p0001.
endloop.
loop at p0001.
write:/ p0001-orgeh.
endloop.
~Suresh -
LDB (Logical Database) results
Dear All,
I have an requirement where I have get the selection screen fields list of logical database(LDB) in my custom program.
Also after getting the selection screen fields, whatever criteria is filled in those, once again i have to take those inputs and get the results by executing the LDB.
Is anyone can help me......
Regards
Munish GargYou will need to call LDB_PROCESS, but you will have to map the data from LDB to internal table (how do your report "knows" which nodes and which fields from those nodes are to be included in the internal table ?)
So many dynamic statements like CREATE DATA <dref> TYPE REF TO (LBDA-DDIC_TYPE) using the parameter <formname> = LBDA-LDBNODE in a generic FORM <formname> USING <nodename> LIKE LDBCB-LDBNODE and then many ASSIGN statements to map the desired fields to the returned internal table records. At each call of this generic FORM, map each and every "corresponding" fields, add the record to the internal table at the lower level node.
Regards,
Raymond -
Logical Database PGQ structure usage
Hello Everyone,
I have a question regarding Logical Database(LDB) usage...How to use the structure defined in LDB. We are using PGQ Logical database in one of custom programs. The structure of the LDB as hierarchy or tree is:
QALS
QAVE
QMFEL
QAPO
AFFHD
QAMV
QAMR
QASE ---> From this table
QASV
QASR ---> From this table
and etc
The code was something like this in the program:
GET QALS.
GET QAPO.
GET QAMV.
GET QAMR.
Now, my requirement is to get data additionally from QASE and QASR tables..So, I tried modifying the code according to the hierarchy structure defined in the PGQ LDB(check bold statements):
GET QALS.
GET QAPO.
GET QAMV.
GET QAMR.
<b>GET QASE.
GET QASV.
GET QASR.</b>
But in runtime I see that QAMR and QASE is filled up with # data ...I am not sure if is right way to do....Is this the way to use the structure defined in the Logical database? QAMV and QASV lie in the same level of hierarchy and I have to use them to get QASE and QASR data...Let me know, if I am not clear...
Thanks for taking your time and I appreciate if some one can help me.
--- AshleyHi Ankur
You can use program SAPDBPGQ that is program created to test logical database PGQ. Then you can get only part responsible for nodes QALS, QAPO and QAMV
Best regards -
Customizing user selection fields of Logical database PNP
Dear Gurus,
I had made a z-copy of payslip program for incorporation of Logo. Now we need to put this report in Enterprise Portal (EP). Now since we would not want any user to view any other person's payslip, I need to disable the selection field (PERNR) for user selection.
Problem is this field for user selection is coming from standard Logical Database (LDB - PNP) used in the program. So how can I make this field hardcoded as sy-uname and non-modifiable without making z-copy of LDB-PNP.
Also I wish to harcode Payroll Area writing some code (from table PA000) but again I cannot write this in std. PNP LDB and writing it in driver program will not help.
Thanks in advance.
Regards,
AmitWrite the highlighted coding in initialization ...
initialization .
select single pernr from pa0105
into pernr-pernr
where usrid = sy-uname.
if sy-subrc = 0.
PNPPERNR-sign = 'I'.
PNPPERNR-option = 'EQ'.
PNPPERNR-LOW = pernr-pernr.
Append PNPPERNR.
endif.
loop at screen.
if screen-name = 'PNPPERNR-LOW' or
screen-name = 'PNPPERNR-HIGH'.
screen-input = '0'.
endif.
modify screen.
endloop.
at selection-screen output.
loop at screen.
if screen-name = 'PNPPERNR-LOW' or
screen-name = 'PNPPERNR-HIGH'.
screen-input = '0'.
endif.
modify screen.
endloop. -
Logical Database of SAP Example Program
Hi all,
I need an example ABAP program using standard Logical Database ( LDB ) .
Help me.
Regards,
Peachi.Hi,
Some links to refer..
/people/alvaro.tejadagalindo/blog/2006/02/19/how-to-deal-with-hr-payroll-reports
http://sap.ittoolbox.com/groups/technical-functional/sap-r3-dev/893908#
A sample prog with LDB PNP
*& Report ZH_REPT_PAYMENT *
report zh_rept_payment line-size 80 no standard page
heading.
tables: pernr, " Standard Selections for HR Master Data Reporting
pcl1, " HR Cluster 1
pcl2, " HR Cluster 2
pa0009,
PA9001,
PA9006,
pa0002,
pc260 , " Cluster Directory for Payroll Results
bnka .
Infotypes
infotypes: 0001. " Organizational Assignment
Declaration of Internal Tables
data : bnka1 like bnka occurs 0 with header line .
data: begin of t_int_rep occurs 100,
bankl like pc209-bankl, " Bank Number
zlsch like pc209-zlsch, " Payment method
pernr like pernr-pernr, " Employee Number
ename like pernr-ename, " Employee Name
bankn like pc209-bankn, " Bank Account Number
betrg like pc209-betrg, " Amount to be transfered
zweck like pa0009-zweck, " Purpose
end of t_int_rep.
data: begin of int_rep occurs 100,
bankl like pc209-bankl, " Bank Number
zlsch like pc209-zlsch, " Payment method
pernr like pernr-pernr, " Employee Number
ename like pernr-ename, " Employee Name
bankn like pc209-bankn, " Bank Account Number
betrg like pc209-betrg, " Amount to be transfered
zweck like pa0009-zweck, " Purpose
begda like pa0009-begda, "Begin date
end of int_rep.
Declaration of Data Variables
data: ws_betrg like pc209-betrg, " BT Amount
w_val like spell occurs 0 with header line,
int_rep1(6), " TYPE I, " Employee Number
cnt type i value 0, " Counter
calcmolga like t500l-molga value '40', " Country Grouping
v_id(15),
calc_currency like t001-waers value 'INR'. " Currency
data : ctr type i,
dt_merge like pa0009-begda.
data: ws_totemp(6) type c,
ws_totamt(20) type c,
r_mth(9) type c,
ws_fpbeg(6) type c,
ws_fpend(6) type c,
ws_mthyr(6) type c,
ws_mthyr_r(14) type c,
r_mth_t(3) type c,
ws_amt(8) type c,
ws_bankl(14) type c,
ws_date(6) type c,
amount_word(500),
total_page type i,
pages type i,
remain type i.
data begin of i_spell.
include structure spell .
data end of i_spell .
data : c_molga type t500l-molga value '40',
c_banks type bnka-banks value 'IN'.
Standard Includes
include rpc2cd09. "Cluster CD data definition
include pc2rxin0.
include rpc2rx09.
include rpppxd00. " Data Definition buffer PCL1/PCL2
include rpppxd10. " Common Part buffer PCL1/PCL2
include rpppxm00. " Buffer Handling RoutinePCL1/PCL2
include zrpc2rox2. " Data Definition POCLSTERS (not J,K,U)
Selection Screen
selection-screen begin of block b1 with frame title text-001.
parameter: pa_mth(2) type c default sy-datum+4(2) obligatory,
pa_year(4) type c default sy-datum(4) obligatory,
p_bankl like pc209-bankl, " Bank Number
p_zlsch like pc209-zlsch. " Payment method
selection-screen end of block b1.
save_calc_currency = calc_currency.
count_top = 0.
get_pernr_flag = 0.
Top-Of-Page
top-of-page.
perform convert_month using pa_mth(2) r_mth.
ws_mthyr_r = r_mth.
concatenate ws_mthyr_r pa_year into ws_mthyr_r separated by space.
SKIP 5.
skip 1.
skip 4.
if int_rep-bankl eq ' '.
if int_rep-zlsch eq 'C' or int_rep-zlsch eq 'E' or
int_rep-zlsch eq ' '.
write: /1(85) 'CHEQUE PAYMENT STATEMENT'(047) centered.
elseif int_rep-zlsch eq 'L'.
write: /1(85) 'DEMAND DRAFT STATEMENT'(047) centered.
endif.
else.
write: /1(85) 'BANK TRANSFER STATEMENT'(002) centered.
endif.
skip.
write: /34 ws_mthyr_r,
62 'Page :'(008),69(2) sy-pagno intensified off,
' Of ',78(2) pages intensified off.
clear pages.
read table bnka1 with key bankl = int_rep-bankl .
if sy-subrc = 0.
if int_rep-zlsch eq 'T'.
write:/03(10) 'Bank Name : ', bnka1-banka.
write:/03(10) 'Branch : ', bnka1-brnch.
write:/03(10) 'Address : ', bnka1-stras.
endif.
endif.
skip.
write:/1(80) sy-uline.
write: /1 sy-vline, 2(5) 'Sl.No'(002),
7 sy-vline, 8(8) 'Emp.No.'(003),
16 sy-vline,17(35) 'Employee Name'(004).
*--added for Demand Draft
if ( int_rep-zlsch = 'l' or int_rep-zlsch = 'L' ).
write : 47 sy-vline, 48(15) 'Payable at'(005).
else.
write : 47 sy-vline,48(15) 'Account No.'(005).
endif.
write: 63 sy-vline,64(16) 'Amount'(006),
80 sy-vline.
write:/1(80) sy-uline.
end-of-page.
write:/1(80) sy-uline.
write:/2 'Printed on ', sy-datum.
Start-of-selection.
start-of-selection.
*perform h_headr.
ctr = 0.
set margin 5.
call function 'RP_GET_CURRENCY'
exporting
molga = calcmolga
importing
waers = calc_currency
exceptions
others.
if sy-subrc ne 0.
calc_currency = 'DEM'.
calc_currency = save_calc_currency.
endif.
get pernr.
cd-key-pernr = pernr-pernr.
perform import_cluster.
get_pernr_flag = 1.
check : ocd-version-molga eq calcmolga.
The table 'tabpernr' is filled with the personnel numbers
and is used after selection is finished.
move-corresponding pernr to tabpernr.
append tabpernr.
The table 'tab_rgdir' is filled
loop at rgdir.
rx-key-pernr = pernr-pernr.
unpack rgdir-seqnr to rx-key-seqno.
perform int_tab. "fill tab_rgdir
perform import_bt.
perform validate.
endloop.
End of Selection
end-of-selection.
*perform h_headr.
perform convert_date_a using pa_mth r_mth_t.
sort int_rep by bankl zlsch pernr betrg descending.
delete adjacent duplicates from int_rep
comparing bankl zlsch pernr .
sort int_rep by bankl zlsch bankn . "PERNR.
loop at int_rep.
at new bankl.
select single * into bnka1 from bnka
where banks = c_banks and
bankl = int_rep-bankl .
append bnka1.
clear bnka1.
endat.
endloop.
for Demand Draft - purpose added
loop at int_rep.
concatenate pa_year(4) pa_mth(2) '01' into dt_merge.
select single * "zweck into int_rep-zweck
from pa0009 where
pernr = int_rep-pernr and
bankl = int_rep-bankl and
zlsch = int_rep-zlsch
and begda <= dt_merge and
endda >= dt_merge .
if sy-subrc = 0.
int_rep-zweck = pa0009-zweck.
modify int_rep.
endif.
endloop.
*-for DD and Chq sorted by PAyable at and EMPNO wise
if p_zlsch = 'T' .
sort int_rep by bankl zlsch bankn . "PERNR.
else. "added for "payable at" for DD/Chq
else.
sort int_rep by zweck pernr . "PERNR.
endif.
*delete adjacent duplicates from int_rep.
t_int_rep] = int_rep[.
loop at int_rep.
*-for page of page no.
total_page = 0.
loop at t_int_rep where bankl = int_rep-bankl
and zlsch = int_rep-zlsch.
total_page = total_page + 1.
endloop.
pages = total_page div 25.
remain = total_page mod 25.
comment bcoz its adding one extra page no.
done as on 29/11/2004
if remain > 0.
pages = pages + 1.
endif.
**-end
at new bankl.
ctr = 0 .
new-page.
endat.
at new zlsch.
ctr = 0 .
new-page.
endat.
clear v_id.
select single natio
into pa0002-natio
from pa0002
where pernr eq int_rep-pernr.
*-testing......for soma
if ctr > 24.
ctr = 0 .
write:/1(80) sy-uline.
new-page .
endif.
ctr = ctr + 1 .
cnt = cnt + 1.
pack int_rep-pernr to int_rep1.
write:/1 sy-vline, 2(3) cnt intensified off,
7 sy-vline, 9(6) int_rep1 intensified off,
16 sy-vline,17(35) int_rep-ename intensified off .
if ( int_rep-zlsch = 'l' or int_rep-zlsch = 'L' ).
write : 47 sy-vline,48(15) int_rep-zweck intensified off.
else.
write:
47 sy-vline,48(15) int_rep-bankn intensified off .
endif.
write: 63 sy-vline,64(16) int_rep-betrg
intensified off currency 'INR',
80 sy-vline.
ws_betrg = ws_betrg + int_rep-betrg.
*-testing......for soma
skip.
write :
/1 sy-vline, 7 sy-vline ,16 sy-vline ,47 sy-vline,63 sy-vline,80
sy-vline .
*-end testing......for soma
at end of zlsch.
if int_rep-bankl = ' '.
call function 'HR_IN_CHG_INR_WRDS'
exporting
amt_in_num = ws_betrg
importing
amt_in_words = amount_word
EXCEPTIONS
DATA_TYPE_MISMATCH = 1
OTHERS = 2
w_val-word = amount_word.
concatenate 'INR.' w_val-word into w_val-word
separated by space.
write:/1(80) sy-uline.
write: /1 sy-vline, 7 'Total transfer:'(009),
64(16) ws_betrg intensified off currency 'INR',
80 sy-vline.
write:/1(80) sy-uline.
write: /1 sy-vline, 3 w_val-word+0(76) intensified off,
80 sy-vline.
write :/1 sy-vline, 10 w_val-word+76(70) intensified off,
80 sy-vline.
write:/1(80) sy-uline.
clear: ws_betrg,cnt.
skip 2.
write: /2 'Prepared by :'(010), '_______________'(013),
45 'Checked by :'(011),'_______________'(013).
skip 2.
write: /2 'Printed On ', sy-datum,
45 'Approved by :'(012),'_______________'(013).
clear sy-pagno.
endif.
endat.
at end of bankl.
if int_rep-bankl ' '.
call function 'HR_IN_CHG_INR_WRDS'
exporting
amt_in_num = ws_betrg
importing
amt_in_words = amount_word
EXCEPTIONS
DATA_TYPE_MISMATCH = 1
OTHERS = 2
w_val-word = amount_word.
concatenate 'INR.' w_val-word into w_val-word
separated by space.
write:/1(80) sy-uline.
write: /1 sy-vline, 7 'Total transfer:'(009),
64(16) ws_betrg intensified off currency 'INR',
80 sy-vline.
write:/1(80) sy-uline.
write: /1 sy-vline, 3 w_val-word+0(76) intensified off,
80 sy-vline.
write :/1 sy-vline, 10 w_val-word+76(70) intensified off,
80 sy-vline.
write:/1(80) sy-uline.
clear: ws_betrg,cnt.
skip 2.
write: /2 'Prepared by :'(010), '_______________'(013),
45 'Checked by :'(011),'_______________'(013).
skip 2.
write: /2 'Printed on ', sy-datum,
45 'Approved by :'(012),'_______________'(013).
clear sy-pagno.
NEW-PAGE.
endif.
endat.
endloop.
End of Page
end-of-page.
write: /2 'Prepared by :'(010), '_______________',
45 'Checked by :'(011),'_______________'.
*& Form IMPORT_CLUSTER
Importing Data from Cluster *
form import_cluster.
sy-subrc = 0.
rp-imp-c2-cd.
if sy-subrc eq 0.
if cd-version-number ne ocd-version-number.
endif.
endif. " SY-SUBRC EQ 0
endform. " IMPORT_CLUSTER
*& Form INT_TAB
Filling internal table tab_rgdir
form int_tab.
*Fill internal table tab_rgdir.
move-corresponding rgdir to tab_rgdir.
tab_rgdir-pernr = pernr-pernr.
append tab_rgdir.
endform. " INT_TAB
*& Form IMPORT_bt
Import Values from Bank Transactions Table (BT)
form import_bt.
rp-init-buffer.
RP-IMP-C2-RX.
rp-imp-c2-in.
if rp-imp-in-subrc eq 0.
if in-version-number ne oin-version-number.
write: / 'Schlüssel des Clusters RX:'(015),
rx-key-pernr, rx-key-seqno.
write: / 'The imported version of the cluster'(016), 'RX',
'is not current'(017).
write: / 'Imported version :'(018),
oin-version-number.
write: / 'Current version of cluster :'(019),
in-version-number.
stop.
else.
sy-subrc = 0.
endif.
else.
sy-subrc = 8.
write: /
'Inconsistencies between cluster directory and directory for'(020).
write: /
'No payroll results found for data in cluster directory'(021).
write : /
'Please contact hotline to solve the current problem'(022).
endif.
ws_fpbeg(2) = versc-fpbeg+4(2).
ws_fpbeg+2(4) = versc-fpbeg(4).
ws_fpend(2) = versc-fpend+4(2).
ws_fpend+2(4) = versc-fpend(4).
ws_mthyr(2) = pa_mth.
ws_mthyr+2(4) = pa_year.
check ws_mthyr = ws_fpbeg.
check ws_mthyr = ws_fpend.
loop at bt. "from pc209
int_rep-pernr = pernr-pernr.
int_rep-ename = pernr-ename.
int_rep-bankl = bt-bankl.
int_rep-bankn = bt-bankn.
int_rep-betrg = bt-betrg.
int_rep-zlsch = bt-zlsch.
append int_rep.
endloop.
IF P_BANKL ' ' AND P_ZLSCH ' '.
DELETE INT_REP WHERE BANKL P_BANKL.
ELSEIF P_BANKL = ' ' AND P_ZLSCH ' '.
DELETE INT_REP WHERE ZLSCH P_ZLSCH.
ELSEIF P_BANKL ' ' AND P_ZLSCH = ' '.
DELETE INT_REP WHERE BANKL P_BANKL.
ENDIF.
endform. " IMPORT_BT
*& Form CONVERT_MONTH
Fetching Month Text
form convert_month using mth t_mth.
case mth.
when '01'.
t_mth = 'January'(023).
when '02'.
t_mth = 'February'(024).
when '03'.
t_mth = 'March'(025).
when '04'.
t_mth = 'April'(026).
when '05'.
t_mth = 'May'(027).
when '06'.
t_mth = 'June'(028).
when '07'.
t_mth = 'July'(029).
when '08'.
t_mth = 'August'(030).
when '09'.
t_mth = 'September'(031).
when '10'.
t_mth = 'October'(032).
when '11'.
t_mth = 'November'(033).
when '12'.
t_mth = 'December'(034).
endcase.
endform. " CONVERT_MONTH
*& Form CONVERT_DATE_A
Fetching Month Text *
form convert_date_a using mth_t t_mth_t.
case mth_t.
when '01'.
t_mth_t = 'Jan.'(035).
when '02'.
t_mth_t = 'Feb.'(036).
when '03'.
t_mth_t = 'Mar.'(037).
when '04'.
t_mth_t = 'Apr.'(038).
when '05'.
t_mth_t = 'May.'(039).
when '06'.
t_mth_t = 'Jun.'(040).
when '07'.
t_mth_t = 'Jul.'(041).
when '08'.
t_mth_t = 'Aug.'(042).
when '09'.
t_mth_t = 'Sep.'(043).
when '10'.
t_mth_t = 'Oct.'(044).
when '11'.
t_mth_t = 'Nov.'(045).
when '12'.
t_mth_t = 'Dec.'(046).
endcase.
endform. " CONVERT_DATE_A
*& Form VALIDATE
text
--> p1 text
<-- p2 text
form validate .
if p_bankl <> ' ' and p_zlsch ' '.
delete int_rep where bankl p_bankl.
elseif p_bankl = ' ' and p_zlsch ' '.
delete int_rep where zlsch p_zlsch.
elseif p_bankl ' ' and p_zlsch = ' '.
delete int_rep where bankl p_bankl.
endif.
endform. " VALIDATE
check this weblog.....
/people/dj.adams/blog/2003/11/13/food-for-thought-ldbs-and-abap-objects
Also , check the following link too.
http://www.datamanagementgroup.com/Resources/Articles/Article_1005_2.asp
Regards,
Satish -
SAP / ABAP Query - using logical database
Hi ,
We have a mandate to implement SAP Query using only Logical Databases (LDB ) .
We understand that there are several issues using this approach .
1 ) Paralled tables in MM need to be displayed on separate lines .
2 ) Statistics based on fields from 2 different tables cannot be produced eg: EKPO ( PO Number ) and EKKN . (Cost Center )
Please share your experiences .
Thank you in advance .
Kishore
KishoreAdeel,
I do appreciate your experience and respect you for knowledge on SAP Query.
Joining tables seem simple to IT experts but not so for end users. SAP Query is an end-user tool and users seem to need a simple user-friend, drag-and-drop solution to extract information using SAP Query based on a pre-defined infoset. Various SAP conferences have been advocating the use of SAP delivered Logical Databses to create infosets in order to harness the various advantages of LDBs.
In MM there are several LDBs (e.g. ELM, EBM etc) to create queries on EKPO and EKKN. The problem arises when you use the same LDB to extract information from more than the above two tables e.g. EKPO, EKET, EKKN and EKBE. SAP expects you to display fields on multiple lines and also does not allow producing statistics based on fields from two parallel tables say EKKN and EKBE. Moreover, multi-line reports cannot be produced in the ALV/SLV format.
We are also looking for best practise solutions in providing SAP Query to MM or FI users based on SAP delivered Logical Databases.
Pascal -
hi experts,
Can i create a query using Logical Database?
if yes how?? Pls give an idea...
Thanks in advance.Hi Manisha,
We can write select query on Logical Databases(LDB) as we write for our normal database. But it is not recommended to write SELECT queries on LDBs.
Genereally we use standard predefined macros for the selection from LDBs.
Hope this helps you.
Regards,
Chandra Sekhar -
Hi Experts,
This is with reference to Logical Database (LDB) , I have some Doubts\Clarifications ,
1, What is the Significance of the Hierarchy of LDB structure (I.e Nodes\Tables).?
2, How to find the relation between to Nodes\Tables that is with which field references the tables were interlinked.
Thanks in Advance,
Regards,
SenHi
The Hierarchy/Tree structure of tables indicates the order of database tables data fetching. As per the order it should fetch.
For example take sales order 3tables VBAK,VBAP, VBEP
so the data has to be fetched from VBAK first, then VBAP and lastly from VBEP.
You can't fetch the data from VBEP starting. it is wrong.
Always tables were interlinked with the correct Keys fields.
for example if you take the above tables VBAK and VBAP are linked with VBELN field
and VBAP and VBEP are linked with VBELN and POSNR fields
So always LDB is created with such a linking tables only, not with any table just like that.
Reward points if useful
Regards
Anji -
An sample progam how to reterieve values from logical database
i need to reterieve prart, vernr, verna, from the table prps using the logical database psj, i know if i give psj in the logical database of the report attributes, but i should not give in the attributes, but i need to use the logical database.
i need a sample programHere is the help on the subject.
<i>
Addition 2
... DEFINING DATABASE ldb
Effect
This addition shows that the current program is the database program of the logical database ldb. The name of this logical database has a maximum length of 20 characters. Logical databases are maintained with the tool Logical Database Builder of the ABAP Workbench, in which the framework program is generated automatically including the statement REPORT. The name of the framework program is SAPDBldb.
Example
Introduction of the logical database F1S.
REPORT sapdbf1s DEFINING DATABASE f1s.
</i>
This is leading me to believe that this extension DEFINING DATABASE F1S is used only when actually building the logical database via the LDB Builder, not for use when actually using it in a program. I don't think that you can use this extension in your case.
Regards,
Rich Heilman -
I am working with logical databases for the first time.
Could someone please explain the following concepts :
1) why do we need to write :
Tables : pernr
pernr is a structure... but the syntax of GET event is : GET <table> ...
so is pernr a structure or a table?
also if data gets flled from PAnnn into the internal tables Pnnnn why do we actually need the table pernr?
could some1 plz explain the concep of the pernr structure/table and the GET event.
results will be awarded.Hi soumali ganguly ,
1> Yes , a structure of "pernr" will be created with the help of TABLES statement .
2> We write "TABLES" statement in the report program , so that the components of the
"pernr" can be accessed .
3> Keep in mind that Logical DataBase(LDB) is another program attached to a report program .
4> You write GET statement in the report program . There is corresponding PUT
statement in the LDB program .
5> Now understand the flow of execution :
a> On the encounter of "GET pernr" statement in the report program ,
the control will move to the form "PUT_PERNR" . This form is in the LDB .
b> So , now control is in LDB . On the encounter of "PUT pernr" statement in the
"PUT_PERNR" form in LDB , the system will now execute the statements
written in the GET block .
c> Generally in the GET block , we access the components of "pernr" .
d> After the GET block has finished execution , the control will now again move to
statement after "PUT pernr" statement , in the LDB .
e> If the "PUT pernr" statement in LDB form "PUT_PERNR" is inside a loop ,
as generally is the case , this "GET-PUT" cycle is repeated several times .
In short , keep in mind PUT puts the data (one line at a time) in the "pernr"and
GET allows to access the data in "permr" , placed by PUT .
Please do let me know in case of any discrepancies .
Regards ,
Dhera Kamlesh H. R. -
Getting results from LDB (Logical Database)
Hi All,
I have a requirement where i need to pass LDB results to external application. It can be any LDB. Like in SE36 we put the LDB name and execute and final results are shown in ALV. I dont need it to display in ALV but from my custom program, need that output table which stores these results.
I tried using LDB_PROCESS but that need custom subroutine names to pass in that, i tried passing the same and results also came but thing is every logical database will have different tables in that, it'll be impossible to create those many subroutine to handle each and every table. So i need a generalized solution like se36 processes the data for any LDB.
Is anyone knows how can i achieve this?
Regards
Munish Garg
9041793217Hello
Generally any LDB will have a event which triggers the data to be populated in the tables/memory. Now these data retrieval is written in a sub-routine "Perform PUT_<eventnamt>". So any LDB will have the sub-routine named "PUT_<eventname>" in its main program. May be you can create the sub-routine name dynamically using this method.
Regards
Ranganath -
Change selection screen in LDB (KDF logical database - NOT HR)
Hi All,
Iu2019d like to use KDF logical database to keep the dynamic selections since user wants to use it but I need to change the selection screen itself. The existing variants for KDF donu2019t meet the user requirements. Some fields I need to hide some add. Like I want to u201Cremoveu201D the field u2018Posting periodu2019 (MONAT) (which is available in dynamic selection screen) and put it on the u201Cmainu201D selection screen.
Do I need to create my own logical database or there is a way around?
Could someone give me a practical advice or sample of solution?
Thanks a lot.Thanks Himanshu,
I did as you suggested but problem is that it does not allow me to hide the whole block.
I have 3 filelds actually on block KD_0 I need to hide (its from selection screen of KDF logical database.)
SELECT-OPTIONS: KD_LIFNR FOR LFA1-LIFNR MATCHCODE OBJECT KRED.
SELECT-OPTIONS: KD_BUKRS FOR LFB1-BUKRS.
SELECTION-SCREEN END OF BLOCK KD_0.
PARAMETERS KD_INDEX AS SEARCH PATTERN FOR TABLE LFA1.
What I did is below. I used sp instead of u201C=u201D since it has many screen for field KD_LIFNR(for frame, text etc).
And when I did just for KD_LIFNR it was hidden but when I did the same for KD_BUKRS it was not hidden . The field has stars u201C*********u201D in it.
Same happen with KD_INDEX. The name of the field is hidden but field not and it filled with ********. Do you have any ideas what it can be?
I debugged it to catch all screen names but no luck
loop at screen.
if screen-name cp 'KD_LIFNR' or
screen-name cp 'KD_BUKRS' or
screen-name cp 'KD_INDEX' or
screen-name = '%B000003_BLOCK_1000' or
screen-name = 'SSCRTEXTS-FRAME_TEXT' or
screen-name = 'SSCRTEXTS-MCID_TEXT' or
screen-name = 'SSCRTEXTS-STRNG_TEXT' or
screen-name = 'SSCRFIELDS-SEARCH_BTN' or
screen-name = '%B025008_BLOCK_1000' or
screen-name = '%F021010_1000' or
screen-name = 'ALCUR' or
screen-name = '%F022012_1000' or
screen-name = 'EXCDT' or
screen-name = 'SSCRFIELDS-UCOMM'.
screen-invisible = '1'.
modify screen.
endif.
endloop. -
Logical database in adhoc query
Hello All,
Can anyone tell me what is the logical database in adhoc query?Hi
When you create a query , you have to select an infoset. Infoset can be considered as a source from which data is populated in the Query Fields.
Infosets are created from Transaction SQ02.
There can be four methods through which an Infoset can become a source of data:
1. Table join ( By joining two or more tables from Data dictionary)
example: Joining tables PA0001 and PA0006 on Pernr to get a one resultant dataset
2. Direct read of Basis Table ( Like PA0001 as a source for data in Infoset )
3. Logical Database ( A Pre-written Program by SAP that extract data from clusters, tables taking care of authorizations and validity periods)
Example : Logical database PNP, PNPCE (Concurrent Employement),PCH ( LDB for Personnel Development Data)
Custom Logical DBs can be created in T_Code SE-36.
4. Data Retrieval by a Program ( Custom code written by ABAP developers which will collect and process data) . This program has a corresponding Structure in data dictionary and the fields of this structure will be used in query)
Reward Points, if helpful.
Regards
Waseem Imran -
Logical Database and Logical Thing
Hi,
i want to access KONV which is cluster table and the field is KWERT.
The thing is that i want to access it by taking customers from KNVV and giving it to VBRK (SALES Table). Now in VBRK i want to have a selection on FKDAT to get a list of Customers stored in the field called KUNAG.
on VBRK-KUNAG basis i want to access the table KONV-KWERT.
If i am doing queries then the System stops responding cuz it has got alot of overhead. So i tried to use Logical Database called VFV.
If this is the best solution means using LDB then how to use it, can anyone help me with this. I tried it by Function module but it is showing all data without considering selection criteria.
If anyone can help me then plz do answer or refer me to any web site so that i can figure this thing out. If anyione has got a good book on that then plz feel free to mail me.
Thanks,
Muhammad Usman Malik
ABAP Consultant
Siemens
[email protected]
+92-333-2700972Thanks Shibba that was very helpful, i applied that but the system overhead was so much.
can u help me with Dynamic selection code.
I used FREE_SELECTION_INIT, FREE_SELECTION_DIALOG and then FREE_SELECTIONS_RANGE_2_WHERE to get ther Selections in one table.
if u want me to send u the code then i can do that cuz i am getting so much mad that this work is not done yet.
The Scenario here is that we want to take BILLED Customers and VKORG as Industrial Billing Customer and then taking VBRK and giving all these Customers and then taking selection on FKDAT range.
Now after that the data should be collected from KONV-KWERT and i want to perform some calculation over it. I am using VFV (Logical Database) to perform this thing because i know that it would be very fast then applying my own queries.
If you can mail me any book on Logical Database and Dynamic selection then it will be very Helpful.
Thanks once again for being such helpful.
Muhammad Usman Malik
SAP Consultant
[email protected]
+92-333-2700972
Maybe you are looking for
-
My old laptop crashed; had to buy a new one. How can I transfer the music on my iPhone 4S into the new iTunes Library?
-
Regarding the creation of Webservice
Hi, I have created a webservice and deployed sucessfully. I would like to modify it and I deleted the Virtual Interface and the webservice definition. After building the EJB module and EAR module, I cannot create the Webservice and the Virtual Interf
-
Need a BADI for raising error messages for equi update (IE02)
Hi, we are trying to raise few error messages while creating equipments through BADI's (Processing through IE02 and BAPI's). No BADI's are supporting for raising error messages. SAP doesnt support processing of userexits through BAPI's (refer note 56
-
Can't see 'All Messages' in inbox
Hi everyone, Something really annoying has happened since i updated to ios7. I can no longer see all the messages from my 6 accounts merged into into one mailbox. Instead, I have to go to each different inbox to see the messages, whereas before there
-
Hi, Has anyone had this problem before. This is a new installation of Planning/Essbase/FDM. I get the following message when trying to drill back into Essbase for a member name in the Maps module of FDM. Error: Essbase API procedure : (EsbInit) threw