Output Screen:
Init Method:
To achieve Date Select options and default values ranges last 30 days (High = System Date and Low = System Date - 30).
Code:
FIELD-SYMBOLS: <fs_date> TYPE STANDARD TABLE,
<range_table_line> TYPE ANY,
<low> TYPE ANY,
<high> TYPE ANY,
<sign> TYPE ddsign,
<option> TYPE ddoption.
data: rt_date type REF TO data, READ_ONLY TYPE ABAP_BOOL.
DATA: LR_COMPONENTCONTROLLER TYPE REF TO IG_COMPONENTCONTROLLER,
L_REF_CMP_USAGE TYPE REF TO IF_WD_COMPONENT_USAGE.
* create the used component
L_REF_CMP_USAGE = WD_THIS->WD_CPUSE_SELopt( ).
IF L_REF_CMP_USAGE->HAS_ACTIVE_COMPONENT( ) IS INITIAL.
L_REF_CMP_USAGE->CREATE_COMPONENT( ).
ENDIF.
WD_THIS->M_WD_SELOPT = WD_THIS->WD_CPIFC_SELopt( ).
* init the select screen
WD_THIS->M_HANDLER = WD_THIS->M_WD_SELOPT->INIT_SELECTION_SCREEN( ).
WD_THIS->M_HANDLER->SET_GLOBAL_OPTIONS(
I_DISPLAY_BTN_CANCEL = ABAP_FALSE
I_DISPLAY_BTN_CHECK = ABAP_FALSE
I_DISPLAY_BTN_RESET = ABAP_FALSE
I_DISPLAY_BTN_EXECUTE = ABAP_FALSE ).
* create a range table that consists of this new data element
RT_DATE = WD_THIS->M_HANDLER->CREATE_RANGE_TABLE( I_TYPENAME = 'SYDATUM' ).
* add a new field to the selection
WD_THIS->M_HANDLER->ADD_SELECTION_FIELD( I_ID = 'ID_DATE' I_DESCRIPTION = 'Date'
IT_RESULT = RT_DATE I_READ_ONLY = READ_ONLY ).
* Populate Default Value for select-option Date
ASSIGN rt_date->* TO <fs_date>.
INSERT INITIAL LINE INTO TABLE <fs_date> ASSIGNING <range_table_line>.
ASSIGN COMPONENT 'LOW' OF STRUCTURE <range_table_line> TO <low>.
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <range_table_line> TO <high>.
ASSIGN COMPONENT 'SIGN' OF STRUCTURE <range_table_line> TO <sign>.
ASSIGN COMPONENT 'OPTION' OF STRUCTURE <range_table_line> TO <option>.
<low> = sy-datum - 30.
<sign> = 'I'.
<option> = 'BT'.
<high> = sy-datum .
<range_table_line> TYPE ANY,
<low> TYPE ANY,
<high> TYPE ANY,
<sign> TYPE ddsign,
<option> TYPE ddoption.
data: rt_date type REF TO data, READ_ONLY TYPE ABAP_BOOL.
DATA: LR_COMPONENTCONTROLLER TYPE REF TO IG_COMPONENTCONTROLLER,
L_REF_CMP_USAGE TYPE REF TO IF_WD_COMPONENT_USAGE.
* create the used component
L_REF_CMP_USAGE = WD_THIS->WD_CPUSE_SELopt( ).
IF L_REF_CMP_USAGE->HAS_ACTIVE_COMPONENT( ) IS INITIAL.
L_REF_CMP_USAGE->CREATE_COMPONENT( ).
ENDIF.
WD_THIS->M_WD_SELOPT = WD_THIS->WD_CPIFC_SELopt( ).
* init the select screen
WD_THIS->M_HANDLER = WD_THIS->M_WD_SELOPT->INIT_SELECTION_SCREEN( ).
WD_THIS->M_HANDLER->SET_GLOBAL_OPTIONS(
I_DISPLAY_BTN_CANCEL = ABAP_FALSE
I_DISPLAY_BTN_CHECK = ABAP_FALSE
I_DISPLAY_BTN_RESET = ABAP_FALSE
I_DISPLAY_BTN_EXECUTE = ABAP_FALSE ).
* create a range table that consists of this new data element
RT_DATE = WD_THIS->M_HANDLER->CREATE_RANGE_TABLE( I_TYPENAME = 'SYDATUM' ).
* add a new field to the selection
WD_THIS->M_HANDLER->ADD_SELECTION_FIELD( I_ID = 'ID_DATE' I_DESCRIPTION = 'Date'
IT_RESULT = RT_DATE I_READ_ONLY = READ_ONLY ).
* Populate Default Value for select-option Date
ASSIGN rt_date->* TO <fs_date>.
INSERT INITIAL LINE INTO TABLE <fs_date> ASSIGNING <range_table_line>.
ASSIGN COMPONENT 'LOW' OF STRUCTURE <range_table_line> TO <low>.
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <range_table_line> TO <high>.
ASSIGN COMPONENT 'SIGN' OF STRUCTURE <range_table_line> TO <sign>.
ASSIGN COMPONENT 'OPTION' OF STRUCTURE <range_table_line> TO <option>.
<low> = sy-datum - 30.
<sign> = 'I'.
<option> = 'BT'.
<high> = sy-datum .
wd_context->set_attribute( exportiNg name = 'VIS1' VALUE = 02 ).
wd_context->set_attribute( exportiNg name = 'VIS2' VALUE = 01 ).
wd_context->set_attribute( exportiNg name = 'VIS2' VALUE = 01 ).
(In this application both input and output screens and placed in single view:
When browser starts default it shows input screen
When user operates ‘Open Sales Order’ Pushbutton Output screen will be displaced
When user operates ‘Back’ Pushbutton, application will navigate to Input screen. )
Open Sales Order Method or Action on PushButton Open Sales Order:
* Instantiate the used component
DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.
lo_cmp_usage = wd_this->wd_cpuse_salv( ).
IF lo_cmp_usage->has_active_component( ) IS INITIAL.
lo_cmp_usage->create_component( ).
ENDIF.
* Get Model
DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
lo_interfacecontroller = wd_this->wd_cpifc_salv( ).
DATA lo_value TYPE REF TO cl_salv_wd_config_table.
lo_value = lo_interfacecontroller->get_model(
).
*---------- ALV table settings.
DATA: l_table_settings TYPE REF TO if_salv_wd_table_settings.
l_table_settings ?= lo_value.
* wd_this->l_table = l_table_settings .
* Set the Editable property to true
l_table_settings->set_read_only( abap_false ).
* Set table header
* DATA: l_header TYPE REF TO cl_salv_wd_header.
* l_header = l_table_settings->get_header( ).
* l_header->set_text( 'Sales Orders' ).
*---------- Column settings
DATA: l_column_settings TYPE REF TO if_salv_wd_column_settings.
l_column_settings ?= lo_value.
* Get columns
DATA: lt_columns TYPE salv_wd_t_column_ref ,
ls_columns TYPE salv_wd_s_column_ref .
DATA: l_column_header TYPE REF TO cl_salv_wd_column_header .
lt_columns = l_column_settings->get_columns( ) .
LOOP AT lt_columns INTO ls_columns .
CASE ls_columns-id .
WHEN 'VBELN' .
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Sales Document' ). " column header
WHEN 'POSNR' .
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Item(SD)' ) . "column header
WHEN 'ZMENG'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Order Quantity' ). "column header
WHEN 'VDATU'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Delivery Date' ). "column header
WHEN 'MATNR'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Material' ). "column header
WHEN 'MAKTX'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Description' ). "column header
WHEN 'VDATU'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Delivery Date' ). "column header
WHEN 'MEINS'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Sales Unit' ). "column header
WHEN 'NETPR'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Net Price' ). "column header
WHEN 'ERDAT'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Document Date' ). "column header
WHEN 'ERNAM'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'NAME 1' ). "column header
WHEN 'VKORG'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Sales Organization' ). "column header
WHEN 'VKBUR'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'SOff.' ). "column header
ENDCASE .
ENDLOOP.
*******************************************************
DATA v_text TYPE string.
TYPES: BEGIN OF t_date,
sign(1),
option(2),
low TYPE sydatum,
high TYPE sydatum,
END OF t_date.
DATA: wa_date TYPE t_date, wa_date1 TYPE t_date.
DATA: rt_date TYPE REF TO data.
FIELD-SYMBOLS: <fs_date> TYPE table.
* Retrieve the data from the select option
rt_date = wd_this->m_handler->get_range_table_of_sel_field(
i_id = 'ID_DATE' ).
* Assign it to a field symbol
ASSIGN rt_date->* TO <fs_date>.
LOOP AT <fs_date> INTO wa_date.
ENDLOOP.
* ***************************************
* * Reading Input Elements
DATA lo_nd_input TYPE REF TO if_wd_context_node.
DATA lo_el_input TYPE REF TO if_wd_context_element.
DATA ls_input TYPE wd_this->element_input.
* navigate from <CONTEXT> to <INPUT> via lead selection
lo_nd_input = wd_context->get_child_node( name = wd_this->wdctx_input ).
* get element via lead selection
lo_el_input = lo_nd_input->get_element( ).
* get all declared attributes
lo_el_input->get_static_attributes(
IMPORTING
static_attributes = ls_input ).
*******************************************
* READING OUTPUT NODE
DATA lo_nd_output TYPE REF TO if_wd_context_node.
DATA lo_el_output TYPE REF TO if_wd_context_element.
* navigate from <CONTEXT> to <OUTPUT> via lead selection
lo_nd_output = wd_context->get_child_node( name = wd_this->wdctx_output ).
DATA: l_ref_cmp_usage TYPE REF TO if_wd_component_usage.
l_ref_cmp_usage = wd_this->wd_cpuse_salv( ).
IF l_ref_cmp_usage->has_active_component( ) IS INITIAL.
l_ref_cmp_usage->create_component( ).
ENDIF.
DATA: l_ref_interfacecontroller TYPE REF TO iwci_salv_wd_table.
l_ref_interfacecontroller = wd_this->wd_cpifc_salv( ).
DATA: l_value TYPE REF TO cl_salv_wd_config_table.
l_value = l_ref_interfacecontroller->get_model( ).
DATA lo_nd_top_of_list TYPE REF TO if_wd_context_node.
DATA lo_el_top_of_list TYPE REF TO if_wd_context_element.
DATA ls_top_of_list TYPE wd_this->element_top_of_list.
* navigate from <CONTEXT> to <TOP_OF_LIST> via lead selection
lo_nd_top_of_list = wd_context->get_child_node( name = wd_this->wdctx_top_of_list ).
DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid,
lr_value TYPE REF TO cl_salv_form_label,
lr_value1 TYPE REF TO cl_salv_form_text.
CREATE OBJECT lr_grid.
DATA wa_kna1 TYPE kna1.
SELECT SINGLE * FROM kna1 INTO wa_kna1 WHERE kunnr = ls_input-soldtoparty.
lr_value1 = lr_grid->create_text( row = 1 column = 2 text = ' ' ).
lr_value = lr_grid->create_label( row = 1 column = 1 text = 'Open Sales Orders' r_label_for = lr_value1 ).
lr_value1 = lr_grid->create_text( row = 2 column = 2 text = ls_input-soldtoparty ).
lr_value = lr_grid->create_label( row = 2 column = 1 text = 'Sold-To-Party:' r_label_for = lr_value1 ).
lr_value1 = lr_grid->create_text( row = 3 column = 2 text = wa_kna1-name1 ).
* lr_value = lr_grid->create_label( row = 2 column = 1 text = ' ' r_label_for = lr_value1 ).
lr_value1 = lr_grid->create_text( row = 4 column = 2 text = wa_kna1-ort01 ).
* lr_value = lr_grid->create_label( row = 2 column = 1 text = ' ' r_label_for = lr_value1 ).
if wa_date-low is NOT INITIAL and wa_date-high is not INITIAL.
CONCATENATE wa_date-low 'To' wa_date-high into v_text SEPARATED BY space.
lr_value1 = lr_grid->create_text( row = 5 column = 2 text = v_text ).
lr_value = lr_grid->create_label( row = 5 column = 1 text = 'Doc. Date:' r_label_for = lr_value1 ).
endif.
lo_nd_top_of_list = wd_context->get_child_node( 'TOP_OF_LIST' ).
lo_nd_top_of_list->set_attribute( value = lr_grid name = 'CONTENT' ).
l_value->if_salv_wd_table_settings~set_top_of_list_visible( value = abap_true ).
* **********************************
* Code for Messages
* get message manager
DATA lo_api_controller TYPE REF TO if_wd_controller.
DATA lo_message_manager TYPE REF TO if_wd_message_manager.
lo_api_controller ?= wd_this->wd_get_api( ).
CALL METHOD lo_api_controller->get_message_manager
RECEIVING
message_manager = lo_message_manager.
* ***************************************
TYPES: BEGIN OF t_vbak,
vbeln TYPE vbeln_va,
erdat TYPE erdat,
ernam TYPE ernam,
vkorg TYPE vkorg,
vkbur TYPE vkbur,
vdatu TYPE edatu_vbak,
END OF t_vbak.
TYPES: BEGIN OF t_vbap,
vbeln TYPE vbeln_va,
posnr TYPE posnr,
matnr TYPE matnr,
meins TYPE meins,
kwmeng TYPE kwmeng,
netpr TYPE netpr,
END OF t_vbap.
TYPES: BEGIN OF t_makt,
matnr TYPE matnr,
maktx TYPE maktx,
END OF t_makt.
TYPES: BEGIN OF t_temp_vbap,
vbeln TYPE vbeln_va,
END OF t_temp_vbap.
TYPES: BEGIN OF t_final,
vdatu TYPE edatu_vbak,
vbeln TYPE vbeln_va,
posnr TYPE posnr,
matnr TYPE matnr,
maktx TYPE maktx,
zmeng TYPE kwmeng,
meins TYPE meins,
netpr TYPE netpr,
erdat TYPE erdat,
ernam TYPE ernam,
vkorg TYPE vkorg,
vkbur TYPE vkbur,
END OF t_final.
TYPES: BEGIN OF t_top,
content TYPE string,
END OF t_top.
DATA: it_vbak TYPE TABLE OF t_vbak, wa_vbak TYPE t_vbak,
it_vbap TYPE TABLE OF t_vbap, wa_vbap TYPE t_vbap,
it_makt TYPE TABLE OF t_makt, wa_makt TYPE t_makt,
it_temp_vbap TYPE TABLE OF t_temp_vbap, wa_temp_vbap TYPE t_temp_vbap,
it_final TYPE TABLE OF t_final, wa_final TYPE t_final,
index TYPE i,
wa_knvv TYPE knvv,
* wa_kna1 type kna1,
it_top TYPE TABLE OF t_top, wa_top TYPE t_top.
********************************************
* checking whether sold to party is intial or not.
* if initial raises error message
IF ls_input-soldtoparty IS INITIAL.
* report message
CALL METHOD lo_message_manager->report_error_message
EXPORTING
message_text = 'Please Enter Value for Sold To Party'
* params =
* msg_user_data =
* is_permanent = ABAP_FALSE
* scope_permanent_msg = CO_MSG_SCOPE_CONTROLLER
* view =
* show_as_popup =
* controller_permanent_msg =
* msg_index =
* cancel_navigation =
* receiving
* message_id =
.
ELSE.
SELECT SINGLE * FROM knvv INTO wa_knvv WHERE kunnr = ls_input-soldtoparty.
wa_top-content = 'Open Sales Orders'.
APPEND wa_top TO it_top.
CONCATENATE 'Sold-To-Party' wa_kna1-kunnr INTO wa_top-content SEPARATED BY space.
APPEND wa_top TO it_top.
wa_top-content = wa_kna1-name1.
APPEND wa_top TO it_top.
wa_top-content = wa_kna1-ort01.
APPEND wa_top TO it_top.
IF <fs_date> IS INITIAL.
IF ls_input-matnr IS INITIAL AND ls_input-bstnk IS INITIAL.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak WHERE kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ELSEIF ls_input-matnr IS NOT INITIAL AND ls_input-bstnk IS INITIAL.
SELECT vbeln FROM vbap INTO TABLE it_temp_vbap WHERE matnr = ls_input-matnr.
SORT it_temp_vbap.
DELETE ADJACENT DUPLICATES FROM it_temp_vbap.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak FOR ALL ENTRIES IN it_temp_vbap
WHERE vbeln = it_temp_vbap-vbeln AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ELSEIF ls_input-matnr IS INITIAL AND ls_input-bstnk IS NOT INITIAL.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak
WHERE bstnk = ls_input-bstnk AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ENDIF.
ELSE.
IF ls_input-matnr IS INITIAL AND ls_input-bstnk IS INITIAL.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak WHERE erdat IN <fs_date> AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ELSEIF ls_input-matnr IS NOT INITIAL AND ls_input-bstnk IS INITIAL.
SELECT vbeln FROM vbap INTO TABLE it_temp_vbap WHERE matnr = ls_input-matnr.
SORT it_temp_vbap.
DELETE ADJACENT DUPLICATES FROM it_temp_vbap.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak FOR ALL ENTRIES IN it_temp_vbap
WHERE vbeln = it_temp_vbap-vbeln AND
erdat IN <fs_date> AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ELSEIF ls_input-matnr IS INITIAL AND ls_input-bstnk IS NOT INITIAL.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak WHERE erdat IN <fs_date> AND
bstnk = ls_input-bstnk AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ENDIF.
ENDIF.
IF it_vbak IS NOT INITIAL.
CLEAR it_temp_vbap[].
SELECT vbeln FROM vbuk INTO TABLE it_temp_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln
AND lfgsk = 'A'.
IF it_temp_vbap IS INITIAL.
wd_context->set_attribute( EXPORTING name = 'VIS1' value = 01 ).
wd_context->set_attribute( EXPORTING name = 'VIS2' value = 02 ).
ELSE.
LOOP AT it_vbak INTO wa_vbak.
READ TABLE it_temp_vbap INTO wa_temp_vbap WITH KEY vbeln = wa_vbak-vbeln.
IF sy-subrc NE 0.
DELETE TABLE it_vbak FROM wa_vbak.
ENDIF.
ENDLOOP.
IF ls_input-matnr IS NOT INITIAL.
SELECT vbeln
posnr
matnr
meins
kwmeng
netpr FROM vbap INTO TABLE it_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln AND matnr = ls_input-matnr.
ELSE.
SELECT vbeln
posnr
matnr
meins
kwmeng
netpr FROM vbap INTO TABLE it_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln.
ENDIF.
SELECT matnr maktx FROM makt INTO TABLE it_makt FOR ALL ENTRIES IN it_vbap
WHERE matnr = it_vbap-matnr AND spras = 'E'.
SORT: it_vbak BY vbeln, it_vbap BY vbeln.
LOOP AT it_vbak INTO wa_vbak.
READ TABLE it_vbap INTO wa_vbap WITH KEY vbeln = wa_vbak-vbeln.
index = sy-tabix.
LOOP AT it_vbap INTO wa_vbap FROM index.
IF wa_vbap-vbeln = wa_vbak-vbeln.
READ TABLE it_makt INTO wa_makt WITH KEY matnr = wa_vbap-matnr.
wa_final-matnr = wa_vbap-matnr.
wa_final-vdatu = wa_vbak-vdatu.
wa_final-vbeln = wa_vbak-vbeln.
wa_final-posnr = wa_vbap-posnr.
wa_final-maktx = wa_makt-maktx.
wa_final-zmeng = wa_vbap-kwmeng.
wa_final-meins = wa_vbap-meins.
wa_final-netpr = wa_vbap-netpr.
wa_final-erdat = wa_vbak-erdat.
wa_final-ernam = wa_kna1-Name1.
wa_final-vkorg = wa_vbak-vkorg.
wa_final-vkbur = wa_vbak-vkbur.
APPEND wa_final TO it_final.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
ENDLOOP.
lo_nd_output->invalidate( ).
* LO_ND_TOP_OF_LIST->INVALIDATE( ).
lo_nd_output->bind_table( it_final ).
* lo_nd_top_of_list->bind_table( it_top ).
wd_context->set_attribute( EXPORTING name = 'VIS1' value = 01 ).
wd_context->set_attribute( EXPORTING name = 'VIS2' value = 02 ).
ENDIF.
ELSE.
lo_nd_output->invalidate( ).
* LO_ND_TOP_OF_LIST->INVALIDATE( ).
* lo_nd_top_of_list->bind_table( it_top ).
wd_context->set_attribute( EXPORTING name = 'VIS1' value = 01 ).
wd_context->set_attribute( EXPORTING name = 'VIS2' value = 02 ).
ENDIF.
ENDIF.
DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.
lo_cmp_usage = wd_this->wd_cpuse_salv( ).
IF lo_cmp_usage->has_active_component( ) IS INITIAL.
lo_cmp_usage->create_component( ).
ENDIF.
* Get Model
DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
lo_interfacecontroller = wd_this->wd_cpifc_salv( ).
DATA lo_value TYPE REF TO cl_salv_wd_config_table.
lo_value = lo_interfacecontroller->get_model(
).
*---------- ALV table settings.
DATA: l_table_settings TYPE REF TO if_salv_wd_table_settings.
l_table_settings ?= lo_value.
* wd_this->l_table = l_table_settings .
* Set the Editable property to true
l_table_settings->set_read_only( abap_false ).
* Set table header
* DATA: l_header TYPE REF TO cl_salv_wd_header.
* l_header = l_table_settings->get_header( ).
* l_header->set_text( 'Sales Orders' ).
*---------- Column settings
DATA: l_column_settings TYPE REF TO if_salv_wd_column_settings.
l_column_settings ?= lo_value.
* Get columns
DATA: lt_columns TYPE salv_wd_t_column_ref ,
ls_columns TYPE salv_wd_s_column_ref .
DATA: l_column_header TYPE REF TO cl_salv_wd_column_header .
lt_columns = l_column_settings->get_columns( ) .
LOOP AT lt_columns INTO ls_columns .
CASE ls_columns-id .
WHEN 'VBELN' .
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Sales Document' ). " column header
WHEN 'POSNR' .
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Item(SD)' ) . "column header
WHEN 'ZMENG'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Order Quantity' ). "column header
WHEN 'VDATU'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Delivery Date' ). "column header
WHEN 'MATNR'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Material' ). "column header
WHEN 'MAKTX'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Description' ). "column header
WHEN 'VDATU'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Delivery Date' ). "column header
WHEN 'MEINS'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Sales Unit' ). "column header
WHEN 'NETPR'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Net Price' ). "column header
WHEN 'ERDAT'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Document Date' ). "column header
WHEN 'ERNAM'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'NAME 1' ). "column header
WHEN 'VKORG'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'Sales Organization' ). "column header
WHEN 'VKBUR'.
l_column_header = ls_columns-r_column->get_header( ) .
l_column_header->set_ddic_binding_field(
if_salv_wd_c_column_settings=>ddic_bind_none ) .
l_column_header->set_text( 'SOff.' ). "column header
ENDCASE .
ENDLOOP.
*******************************************************
DATA v_text TYPE string.
TYPES: BEGIN OF t_date,
sign(1),
option(2),
low TYPE sydatum,
high TYPE sydatum,
END OF t_date.
DATA: wa_date TYPE t_date, wa_date1 TYPE t_date.
DATA: rt_date TYPE REF TO data.
FIELD-SYMBOLS: <fs_date> TYPE table.
* Retrieve the data from the select option
rt_date = wd_this->m_handler->get_range_table_of_sel_field(
i_id = 'ID_DATE' ).
* Assign it to a field symbol
ASSIGN rt_date->* TO <fs_date>.
LOOP AT <fs_date> INTO wa_date.
ENDLOOP.
* ***************************************
* * Reading Input Elements
DATA lo_nd_input TYPE REF TO if_wd_context_node.
DATA lo_el_input TYPE REF TO if_wd_context_element.
DATA ls_input TYPE wd_this->element_input.
* navigate from <CONTEXT> to <INPUT> via lead selection
lo_nd_input = wd_context->get_child_node( name = wd_this->wdctx_input ).
* get element via lead selection
lo_el_input = lo_nd_input->get_element( ).
* get all declared attributes
lo_el_input->get_static_attributes(
IMPORTING
static_attributes = ls_input ).
*******************************************
* READING OUTPUT NODE
DATA lo_nd_output TYPE REF TO if_wd_context_node.
DATA lo_el_output TYPE REF TO if_wd_context_element.
* navigate from <CONTEXT> to <OUTPUT> via lead selection
lo_nd_output = wd_context->get_child_node( name = wd_this->wdctx_output ).
DATA: l_ref_cmp_usage TYPE REF TO if_wd_component_usage.
l_ref_cmp_usage = wd_this->wd_cpuse_salv( ).
IF l_ref_cmp_usage->has_active_component( ) IS INITIAL.
l_ref_cmp_usage->create_component( ).
ENDIF.
DATA: l_ref_interfacecontroller TYPE REF TO iwci_salv_wd_table.
l_ref_interfacecontroller = wd_this->wd_cpifc_salv( ).
DATA: l_value TYPE REF TO cl_salv_wd_config_table.
l_value = l_ref_interfacecontroller->get_model( ).
DATA lo_nd_top_of_list TYPE REF TO if_wd_context_node.
DATA lo_el_top_of_list TYPE REF TO if_wd_context_element.
DATA ls_top_of_list TYPE wd_this->element_top_of_list.
* navigate from <CONTEXT> to <TOP_OF_LIST> via lead selection
lo_nd_top_of_list = wd_context->get_child_node( name = wd_this->wdctx_top_of_list ).
DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid,
lr_value TYPE REF TO cl_salv_form_label,
lr_value1 TYPE REF TO cl_salv_form_text.
CREATE OBJECT lr_grid.
DATA wa_kna1 TYPE kna1.
SELECT SINGLE * FROM kna1 INTO wa_kna1 WHERE kunnr = ls_input-soldtoparty.
lr_value1 = lr_grid->create_text( row = 1 column = 2 text = ' ' ).
lr_value = lr_grid->create_label( row = 1 column = 1 text = 'Open Sales Orders' r_label_for = lr_value1 ).
lr_value1 = lr_grid->create_text( row = 2 column = 2 text = ls_input-soldtoparty ).
lr_value = lr_grid->create_label( row = 2 column = 1 text = 'Sold-To-Party:' r_label_for = lr_value1 ).
lr_value1 = lr_grid->create_text( row = 3 column = 2 text = wa_kna1-name1 ).
* lr_value = lr_grid->create_label( row = 2 column = 1 text = ' ' r_label_for = lr_value1 ).
lr_value1 = lr_grid->create_text( row = 4 column = 2 text = wa_kna1-ort01 ).
* lr_value = lr_grid->create_label( row = 2 column = 1 text = ' ' r_label_for = lr_value1 ).
if wa_date-low is NOT INITIAL and wa_date-high is not INITIAL.
CONCATENATE wa_date-low 'To' wa_date-high into v_text SEPARATED BY space.
lr_value1 = lr_grid->create_text( row = 5 column = 2 text = v_text ).
lr_value = lr_grid->create_label( row = 5 column = 1 text = 'Doc. Date:' r_label_for = lr_value1 ).
endif.
lo_nd_top_of_list = wd_context->get_child_node( 'TOP_OF_LIST' ).
lo_nd_top_of_list->set_attribute( value = lr_grid name = 'CONTENT' ).
l_value->if_salv_wd_table_settings~set_top_of_list_visible( value = abap_true ).
* **********************************
* Code for Messages
* get message manager
DATA lo_api_controller TYPE REF TO if_wd_controller.
DATA lo_message_manager TYPE REF TO if_wd_message_manager.
lo_api_controller ?= wd_this->wd_get_api( ).
CALL METHOD lo_api_controller->get_message_manager
RECEIVING
message_manager = lo_message_manager.
* ***************************************
TYPES: BEGIN OF t_vbak,
vbeln TYPE vbeln_va,
erdat TYPE erdat,
ernam TYPE ernam,
vkorg TYPE vkorg,
vkbur TYPE vkbur,
vdatu TYPE edatu_vbak,
END OF t_vbak.
TYPES: BEGIN OF t_vbap,
vbeln TYPE vbeln_va,
posnr TYPE posnr,
matnr TYPE matnr,
meins TYPE meins,
kwmeng TYPE kwmeng,
netpr TYPE netpr,
END OF t_vbap.
TYPES: BEGIN OF t_makt,
matnr TYPE matnr,
maktx TYPE maktx,
END OF t_makt.
TYPES: BEGIN OF t_temp_vbap,
vbeln TYPE vbeln_va,
END OF t_temp_vbap.
TYPES: BEGIN OF t_final,
vdatu TYPE edatu_vbak,
vbeln TYPE vbeln_va,
posnr TYPE posnr,
matnr TYPE matnr,
maktx TYPE maktx,
zmeng TYPE kwmeng,
meins TYPE meins,
netpr TYPE netpr,
erdat TYPE erdat,
ernam TYPE ernam,
vkorg TYPE vkorg,
vkbur TYPE vkbur,
END OF t_final.
TYPES: BEGIN OF t_top,
content TYPE string,
END OF t_top.
DATA: it_vbak TYPE TABLE OF t_vbak, wa_vbak TYPE t_vbak,
it_vbap TYPE TABLE OF t_vbap, wa_vbap TYPE t_vbap,
it_makt TYPE TABLE OF t_makt, wa_makt TYPE t_makt,
it_temp_vbap TYPE TABLE OF t_temp_vbap, wa_temp_vbap TYPE t_temp_vbap,
it_final TYPE TABLE OF t_final, wa_final TYPE t_final,
index TYPE i,
wa_knvv TYPE knvv,
* wa_kna1 type kna1,
it_top TYPE TABLE OF t_top, wa_top TYPE t_top.
********************************************
* checking whether sold to party is intial or not.
* if initial raises error message
IF ls_input-soldtoparty IS INITIAL.
* report message
CALL METHOD lo_message_manager->report_error_message
EXPORTING
message_text = 'Please Enter Value for Sold To Party'
* params =
* msg_user_data =
* is_permanent = ABAP_FALSE
* scope_permanent_msg = CO_MSG_SCOPE_CONTROLLER
* view =
* show_as_popup =
* controller_permanent_msg =
* msg_index =
* cancel_navigation =
* receiving
* message_id =
.
ELSE.
SELECT SINGLE * FROM knvv INTO wa_knvv WHERE kunnr = ls_input-soldtoparty.
wa_top-content = 'Open Sales Orders'.
APPEND wa_top TO it_top.
CONCATENATE 'Sold-To-Party' wa_kna1-kunnr INTO wa_top-content SEPARATED BY space.
APPEND wa_top TO it_top.
wa_top-content = wa_kna1-name1.
APPEND wa_top TO it_top.
wa_top-content = wa_kna1-ort01.
APPEND wa_top TO it_top.
IF <fs_date> IS INITIAL.
IF ls_input-matnr IS INITIAL AND ls_input-bstnk IS INITIAL.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak WHERE kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ELSEIF ls_input-matnr IS NOT INITIAL AND ls_input-bstnk IS INITIAL.
SELECT vbeln FROM vbap INTO TABLE it_temp_vbap WHERE matnr = ls_input-matnr.
SORT it_temp_vbap.
DELETE ADJACENT DUPLICATES FROM it_temp_vbap.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak FOR ALL ENTRIES IN it_temp_vbap
WHERE vbeln = it_temp_vbap-vbeln AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ELSEIF ls_input-matnr IS INITIAL AND ls_input-bstnk IS NOT INITIAL.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak
WHERE bstnk = ls_input-bstnk AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ENDIF.
ELSE.
IF ls_input-matnr IS INITIAL AND ls_input-bstnk IS INITIAL.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak WHERE erdat IN <fs_date> AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ELSEIF ls_input-matnr IS NOT INITIAL AND ls_input-bstnk IS INITIAL.
SELECT vbeln FROM vbap INTO TABLE it_temp_vbap WHERE matnr = ls_input-matnr.
SORT it_temp_vbap.
DELETE ADJACENT DUPLICATES FROM it_temp_vbap.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak FOR ALL ENTRIES IN it_temp_vbap
WHERE vbeln = it_temp_vbap-vbeln AND
erdat IN <fs_date> AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ELSEIF ls_input-matnr IS INITIAL AND ls_input-bstnk IS NOT INITIAL.
SELECT vbeln
erdat
ernam
vkorg
vkbur
vdatu FROM vbak INTO TABLE it_vbak WHERE erdat IN <fs_date> AND
bstnk = ls_input-bstnk AND
kunnr = ls_input-soldtoparty AND
vkorg = wa_knvv-vkorg AND
vkbur = wa_knvv-vkbur.
ENDIF.
ENDIF.
IF it_vbak IS NOT INITIAL.
CLEAR it_temp_vbap[].
SELECT vbeln FROM vbuk INTO TABLE it_temp_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln
AND lfgsk = 'A'.
IF it_temp_vbap IS INITIAL.
wd_context->set_attribute( EXPORTING name = 'VIS1' value = 01 ).
wd_context->set_attribute( EXPORTING name = 'VIS2' value = 02 ).
ELSE.
LOOP AT it_vbak INTO wa_vbak.
READ TABLE it_temp_vbap INTO wa_temp_vbap WITH KEY vbeln = wa_vbak-vbeln.
IF sy-subrc NE 0.
DELETE TABLE it_vbak FROM wa_vbak.
ENDIF.
ENDLOOP.
IF ls_input-matnr IS NOT INITIAL.
SELECT vbeln
posnr
matnr
meins
kwmeng
netpr FROM vbap INTO TABLE it_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln AND matnr = ls_input-matnr.
ELSE.
SELECT vbeln
posnr
matnr
meins
kwmeng
netpr FROM vbap INTO TABLE it_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln.
ENDIF.
SELECT matnr maktx FROM makt INTO TABLE it_makt FOR ALL ENTRIES IN it_vbap
WHERE matnr = it_vbap-matnr AND spras = 'E'.
SORT: it_vbak BY vbeln, it_vbap BY vbeln.
LOOP AT it_vbak INTO wa_vbak.
READ TABLE it_vbap INTO wa_vbap WITH KEY vbeln = wa_vbak-vbeln.
index = sy-tabix.
LOOP AT it_vbap INTO wa_vbap FROM index.
IF wa_vbap-vbeln = wa_vbak-vbeln.
READ TABLE it_makt INTO wa_makt WITH KEY matnr = wa_vbap-matnr.
wa_final-matnr = wa_vbap-matnr.
wa_final-vdatu = wa_vbak-vdatu.
wa_final-vbeln = wa_vbak-vbeln.
wa_final-posnr = wa_vbap-posnr.
wa_final-maktx = wa_makt-maktx.
wa_final-zmeng = wa_vbap-kwmeng.
wa_final-meins = wa_vbap-meins.
wa_final-netpr = wa_vbap-netpr.
wa_final-erdat = wa_vbak-erdat.
wa_final-ernam = wa_kna1-Name1.
wa_final-vkorg = wa_vbak-vkorg.
wa_final-vkbur = wa_vbak-vkbur.
APPEND wa_final TO it_final.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
ENDLOOP.
lo_nd_output->invalidate( ).
* LO_ND_TOP_OF_LIST->INVALIDATE( ).
lo_nd_output->bind_table( it_final ).
* lo_nd_top_of_list->bind_table( it_top ).
wd_context->set_attribute( EXPORTING name = 'VIS1' value = 01 ).
wd_context->set_attribute( EXPORTING name = 'VIS2' value = 02 ).
ENDIF.
ELSE.
lo_nd_output->invalidate( ).
* LO_ND_TOP_OF_LIST->INVALIDATE( ).
* lo_nd_top_of_list->bind_table( it_top ).
wd_context->set_attribute( EXPORTING name = 'VIS1' value = 01 ).
wd_context->set_attribute( EXPORTING name = 'VIS2' value = 02 ).
ENDIF.
ENDIF.
Action Back or Using PushButton ‘Back’:
wd_context->set_attribute( exportiNg name = 'VIS1' VALUE = 02 ).
wd_context->set_attribute( exportiNg name = 'VIS2' VALUE = 01 ).
wd_context->set_attribute( exportiNg name = 'VIS2' VALUE = 01 ).
good start!!
ReplyDelete