ā2013 Nov 04 12:53 PM
Hello Friends,
I am new to abap, I am writing an ALV program for which on selection screen has 2 parameters and 2 select options. Among which one field is mandatory.
I have written the code and when I am executing the program, it is fetching all the records with default parameter and ignoring the data I provide on all other fields at selection screen. How could I correct the error so that when I provide the value in those fields, they fetch relative records with the mandatory field as well..
Thanks and regards,
Bharath
ā2013 Nov 04 12:59 PM
Hi,
Could you please share your code. Need to check on selection screen definition and select logic.
Best Regards,
Abirami
ā2013 Nov 04 1:03 PM
Hi bharath,
Can you paste your code?
or before printing the output, you can loop the internal table and check with the parameter values (entered in the selection screen). delete the values which not are matching with the parameter values.
As per the performance it is not a good idea.
We need to take care while you are fetching the data itself.
In queries, when you are using both parameters and select-options better to put a AND condition.
ā2013 Nov 04 1:25 PM
ā2013 Nov 04 1:34 PM
This is basically your answer, Bharath (Raymond's answer). You must put your Select-option variables into your where clauses. Unless you have some very interesting code... that's all you need.
Neal
ā2013 Nov 04 5:28 PM
Here's my code, I have to fetch the data from 4 tables...
Thanks and regards in advance,
Bharath
*&---------------------------------------------------------------------*
*& Report ZTEST_ALV
*&
*&---------------------------------------------------------------------*
*&Report to display the data from 4 tables in ALV format
*&
*&---------------------------------------------------------------------*
REPORT ztest_alv.
TYPE-POOLS: slis.
TABLES: crmd_orderadm_h ,crmd_orderadm_i, bbp_pdigp, crm_jest.
*Selection Screeen definition
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: b_objid FOR crmd_orderadm_h-object_id,
b_date FOR crmd_orderadm_h-posting_date.
PARAMETERS: b_obj TYPE crmt_subobject_category_db OBLIGATORY
DEFAULT 'bus2121',
b_guid TYPE crmt_object_guid.
SELECTION-SCREEN END OF BLOCK b1.
"Structure Declaration
TYPES: BEGIN OF ty_crmd_header,
objtype TYPE crmt_subobject_category_db,"business transaction
protype TYPE crmt_process_type_db,"business transaction type
createdby TYPE crmt_created_by,"user that created transaction
guid TYPE crmt_object_guid," guid of a crm object
END OF ty_crmd_header,
BEGIN OF ty_crmd_item,
header TYPE crmt_object_guid, "guid of a crm object
desc TYPE crmt_prshtextx_db, "product short text
itemno TYPE crmt_item_no, "item number in document
itemtype TYPE crmt_item_type_db, "item category
END OF ty_crmd_item,
BEGIN OF ty_crmd_jest,
objnr TYPE crmt_object_guid, "guid of a crm object
status TYPE crm_j_status, " object status
END OF ty_crmd_jest,
BEGIN OF ty_bbp_pdigp,
guid TYPE bbp_guid, "guid of a crm object
categoryid TYPE bbp_category_id," product category id
quantity TYPE bbp_mng,"quantity in order unit
unit TYPE bbp_unit,"unit of measurement
grossprice TYPE bbp_gross_price,"gross price
END OF ty_bbp_pdigp,
BEGIN OF ty_final,
objtype TYPE crmt_subobject_category_db, "object type
protype TYPE crmt_process_type_db,"business transaction type
createdby TYPE crmt_created_by," user that created transaction
guid TYPE guid,"guid of crm object
desc TYPE crmt_prshtextx_db, "product short text
itemno TYPE crmt_item_no, "item number in document
itemtype TYPE crmt_item_type_db, "item category
status TYPE crm_j_status,"object status
categoryid TYPE bbp_category_id," product category id
quantity TYPE bbp_mng,"quantity in order unit
unit TYPE bbp_unit,"unit of measurement
grossprice TYPE bbp_gross_price,"grossprice
END OF ty_final.
" Internal table and Work Area creation
DATA: lt_crmd_header TYPE TABLE OF crmd_orderadm_h,
lwa_crmd_header TYPE crmd_orderadm_h,
lt_crmd_item TYPE TABLE OF ty_crmd_item,
lwa_crmd_item TYPE ty_crmd_item,
lt_crmd_jest TYPE TABLE OF ty_crmd_jest,
lwa_crmd_jest TYPE ty_crmd_jest,
lt_bbp_pdigp TYPE TABLE OF bbp_pdigp,
lwa_bbp_pdigp TYPE bbp_pdigp,
e_item TYPE TABLE OF bbp_pds_sc_item_d,
lwa_e_item TYPE bbp_pds_sc_item_d,
lt_final TYPE TABLE OF ty_final,
lwa_final TYPE ty_final,
it_fieldcat TYPE slis_t_fieldcat_alv,
lwa_fieldcat TYPE slis_fieldcat_alv,
e_header LIKE bbp_pds_sc_header_d,
i_guid TYPE crmd_orderadm_h-guid.
AT SELECTION-SCREEN.
IF b_objid IS NOT INITIAL.
SELECT SINGLE object_id
FROM crmd_orderadm_h
INTO lwa_crmd_header
WHERE object_id IN b_objid.
IF sy-subrc <> 0.
MESSAGE e001(00) WITH 'enter valid data'.
ENDIF.
ENDIF.
*AT SELECTION-SCREEN ON b_date.
IF b_date IS NOT INITIAL.
SELECT SINGLE posting_date
FROM crmd_orderadm_h
INTO lwa_crmd_header
WHERE posting_date IN b_date.
IF sy-subrc <> 0.
MESSAGE e001(00) WITH 'enter valid data'.
ENDIF.
ENDIF.
*AT SELECTION-SCREEN ON b_obj.
IF b_obj IS NOT INITIAL.
SELECT SINGLE object_type
FROM crmd_orderadm_h
INTO lwa_crmd_header
WHERE object_type EQ b_obj.
IF sy-subrc <> 0.
MESSAGE e001(00) WITH 'enter valid data'.
ENDIF.
ENDIF.
*AT SELECTION-SCREEN ON b_guid.
IF b_guid IS NOT INITIAL.
SELECT SINGLE guid
FROM crmd_orderadm_h
INTO lwa_crmd_header
WHERE guid EQ b_guid.
IF sy-subrc <> 0.
MESSAGE e001(00) WITH 'enter valid data'.
ENDIF.
ENDIF.
START-OF-SELECTION.
a
SELECT *
INTO TABLE lt_crmd_header
FROM crmd_orderadm_h
WHERE object_id eq b_objid .
IF lt_crmd_header[] IS NOT INITIAL.
PERFORM select_item.
PERFORM select_jest.
PERFORM select_pdigp.
ENDIF.
*&---------------------------------------------------------------------*
*& Form select_item
*&---------------------------------------------------------------------*
* selection of data from item table
*----------------------------------------------------------------------*
FORM select_item.
SELECT header description number_int itm_type
FROM crmd_orderadm_i
INTO TABLE lt_crmd_item
FOR ALL ENTRIES IN lt_crmd_header
WHERE header EQ lt_crmd_header-guid.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form select_jest
*&---------------------------------------------------------------------*
* selection of data from object status table
*----------------------------------------------------------------------*
FORM select_jest.
SELECT objnr stat
FROM crm_jest
INTO TABLE lt_crmd_jest
FOR ALL ENTRIES IN lt_crmd_header
WHERE objnr EQ lt_crmd_header-guid.
ENDFORM. "select_jest
*&---------------------------------------------------------------------*
*& Form select_pdigp
*&---------------------------------------------------------------------*
* selection of data from Business Transaction Itm-Purchasing Information
*----------------------------------------------------------------------*
FORM select_pdigp.
LOOP AT lt_crmd_header INTO lwa_crmd_header.
CALL FUNCTION 'BBP_PD_SC_GETDETAIL'
EXPORTING
i_guid = lwa_crmd_header-guid
* I_OBJECT_ID =
* I_ATTACH_WITH_DOC = ' '
* I_WITH_ITEMDATA = 'X'
* I_ITEM_SORTED_BY_HIERARCHY =
* I_WITHOUT_HEADER_TOTALS =
* I_READ_FROM_ARCHIVE = ' '
IMPORTING
e_header = e_header
* EV_IS_PD =
* ET_ATTACH =
TABLES
e_item = e_item
* E_ACCOUNT =
* E_PARTNER =
* E_CONFIRM =
* E_LONGTEXT =
* E_LIMIT =
* E_ORGDATA =
* E_TAX =
* E_PRIDOC =
* E_HCF = E_ICF
* = =
* E_MESSAGES =
* E_ACTVAL =
* E_ACC_ACTVAL =
* E_HEADER_REL =
* E_ITMLIM_REL =
* E_STATUS =
.
SELECT *
FROM bbp_pdigp
INTO TABLE lt_bbp_pdigp
FOR ALL ENTRIES IN e_item
WHERE guid = e_item-guid.
ENDLOOP.
ENDFORM.
END-OF-SELECTION.
"Moving data into final internal table
LOOP AT lt_crmd_header INTO lwa_crmd_header.
lwa_final-objtype = lwa_crmd_header-object_type.
lwa_final-protype = lwa_crmd_header-process_type.
lwa_final-createdby = lwa_crmd_header-created_by.
lwa_final-guid = lwa_crmd_header-guid.
READ TABLE lt_crmd_item INTO lwa_crmd_item WITH KEY header =
lwa_crmd_header-guid.
lwa_final-desc = lwa_crmd_item-desc.
lwa_final-itemno = lwa_crmd_item-itemno.
lwa_final-itemtype = lwa_crmd_item-itemtype.
READ TABLE lt_crmd_jest INTO lwa_crmd_jest WITH KEY objnr =
lwa_crmd_header-guid.
lwa_final-status = lwa_crmd_jest-status.
READ TABLE lt_bbp_pdigp INTO lwa_bbp_pdigp WITH KEY guid =
lwa_crmd_header-guid.
lwa_final-categoryid = lwa_bbp_pdigp-category_id.
lwa_final-quantity = lwa_bbp_pdigp-quantity.
lwa_final-unit = lwa_bbp_pdigp-unit.
lwa_final-grossprice = lwa_bbp_pdigp-gross_price.
APPEND lwa_final TO lt_final.
CLEAR:lwa_final,
lwa_crmd_header,
lwa_crmd_item,
lwa_crmd_jest,
lwa_bbp_pdigp.
ENDLOOP.
"Appending data to ALV
lwa_fieldcat-fieldname = 'OBJTYPE'.
lwa_fieldcat-seltext_m = 'Object Type'.
lwa_fieldcat-tabname = 'IT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'PROTYPE'.
lwa_fieldcat-seltext_m = 'Business Transaction Type'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'CREATEDBY'.
lwa_fieldcat-seltext_m = 'Created by'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'PROTYPE'.
lwa_fieldcat-seltext_m = 'Business Transaction Type'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'GUID'.
lwa_fieldcat-seltext_m = 'Global Unique Identifier'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'DESC'.
lwa_fieldcat-seltext_m = 'Product Short Text'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'ITEMNO'.
lwa_fieldcat-seltext_m = 'Item No'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'ITEMTYPE'.
lwa_fieldcat-seltext_m = 'Type of Item'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'STATUS'.
lwa_fieldcat-seltext_m = 'Object Status'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'CATEGORYID'.
lwa_fieldcat-seltext_m = 'Product Category ID'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'QUANTITY'.
lwa_fieldcat-seltext_m = 'Quantity'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'UNIT'.
lwa_fieldcat-seltext_m = 'Unit of Measure'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
lwa_fieldcat-fieldname = 'GROSSPRICE'.
lwa_fieldcat-seltext_m = 'Gross Price of product'.
lwa_fieldcat-tabname = 'lT_FINAL'.
APPEND lwa_fieldcat TO it_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
* I_CALLBACK_PROGRAM = ' '
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
* IS_LAYOUT =
it_fieldcat = it_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = lt_final
EXCEPTIONS
program_error = 1
OTHERS = 2
.
ā2013 Nov 04 6:43 PM
Hi Bharath-
Your selection screen consists of:
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: b_objid FOR crmd_orderadm_h-object_id,
b_date FOR crmd_orderadm_h-posting_date.
PARAMETERS: b_obj TYPE crmt_subobject_category_db OBLIGATORY
DEFAULT 'bus2121',
b_guid TYPE crmt_object_guid.
SELECTION-SCREEN END OF BLOCK b1.
You are validating each and every selection parameter using event 'AT SELECTION SCREEN' this is correct.
But in all your queries you are retrieving data based on internal table lt_crmd_header whose values were retrieved based on selection screen parameter: b_objid.
SELECT *
INTO TABLE lt_crmd_header
FROM crmd_orderadm_h
WHERE object_id eq b_objid .
Hence, in your report as you are not using any of the selection screen parameter except b_objid it will retrieve values based on b_objid only.
-Venkat
ā2013 Nov 05 6:44 AM
Dear Venkat,
If I modify the select statement to
SELECT
object_type process_type created_by object_idIt is throwing a run time error....DBIF_RSQL_INVALID_RSQL..
ā2013 Nov 05 7:05 AM
Hello Chandra,
Check the declaration for internal table
lt_crmd_header . There is a mismatch in the number of fields(internal table declaration) you are picking.
It is declared as
DATA: lt_crmd_header TYPE TABLE OF crmd_orderadm_h,
lwa_crmd_header TYPE crmd_orderadm_h,
The type should ty_crmd_header,
DATA: lt_crmd_header TYPE TABLE OF ty_crmd_header,
lwa_crmd_header TYPE ty_crmd_header,
Try this one and check if there is an error.
Thanks.
M M Jaffer.
ā2013 Nov 05 7:14 AM