Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

AT LINE SELEVCTION problem

Former Member
0 Kudos

Hi SDN,

I am displaying on out put screen.

SalesOrder Delivery Invoice in one row.

i want to call separate list on clicking of SalesOrder Delivery Invoice, i.e. when SalesOrder is clicked list for SO details,

Delivery is clicked then list for delivery & same for Invoice.

Please let me know how it is possible.

Regards,

Rahul

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

Check out the following code and execute it.

You can understand the functioning of GET CURSOR.

TABLES : vbak.

TYPES : BEGIN OF ty_vbak,

vbeln TYPE vbeln_va,

erdat TYPE erdat,

erzet TYPE erzet,

END OF ty_vbak,

BEGIN OF ty_vbap,

vbeln TYPE vbeln_va,

posnr TYPE posnr_va,

matnr TYPE matnr,

END OF ty_vbap,

BEGIN OF ty_output,

vbeln TYPE vbeln_va,

erdat TYPE erdat,

erzet TYPE erzet,

posnr TYPE posnr_va,

matnr TYPE matnr,

END OF ty_output.

DATA : it_vbak TYPE STANDARD TABLE OF ty_vbak INITIAL SIZE 0,

it_vbap TYPE STANDARD TABLE OF ty_vbap INITIAL SIZE 0,

it_output TYPE STANDARD TABLE OF ty_output INITIAL SIZE 0,

wa_vbak TYPE ty_vbak,

wa_vbap TYPE ty_vbap,

wa_output TYPE ty_output.

DATA : fldname TYPE string,

fldval TYPE i.

REFRESH : it_vbak,

it_vbap,

it_output.

CLEAR : wa_vbak,

wa_vbap,

wa_output.

SELECT-OPTIONS : s_vbeln FOR vbak-vbeln.

START-OF-SELECTION.

SELECT vbeln

erdat

erzet

FROM vbak

INTO TABLE it_vbak

WHERE vbeln IN s_vbeln.

IF NOT it_vbak IS INITIAL.

SELECT vbeln

posnr

matnr

FROM vbap

INTO TABLE it_vbap

FOR ALL ENTRIES IN it_vbak

WHERE vbeln = it_vbak-vbeln.

ENDIF.

LOOP AT it_vbap INTO wa_vbap.

wa_output-vbeln = wa_vbap-vbeln.

wa_output-posnr = wa_vbap-posnr.

wa_output-matnr = wa_vbap-matnr.

CLEAR wa_vbak.

READ TABLE it_vbak INTO wa_vbak WITH KEY vbeln = wa_vbap-vbeln.

IF sy-subrc = 0.

wa_output-erdat = wa_vbak-erdat.

wa_output-erzet = wa_vbak-erzet.

ENDIF.

APPEND wa_output TO it_output.

CLEAR wa_output.

ENDLOOP.

LOOP AT it_output INTO wa_output.

WRITE 😕 wa_output-vbeln,

wa_output-erdat,

wa_output-erzet.

ENDLOOP.

AT LINE-SELECTION.

GET CURSOR FIELD fldname VALUE fldval.

LOOP AT it_output INTO wa_output.

WRITE 😕 wa_output-posnr,

wa_output-matnr.

ENDLOOP.

Thanks.

14 REPLIES 14

Former Member
0 Kudos

This message was moderated.

Former Member
0 Kudos

Hi Rahul,

In the AT LINE-SELECTION event, try with

GET CURSOR FIELD fieldname VALUE value.

Press F1 to have more documentation on GET CURSOR.

Cheers,

Mandeep

0 Kudos

Hi Rahul,

In the at line selection event, based on the document type say delivery, billing, etc call the respective sub-routine to print the document.

This should solve the issue.

Regards

Farzan

0 Kudos

This message was moderated.

0 Kudos

This message was moderated.

0 Kudos

This message was moderated.

Former Member
0 Kudos

Hi,

Check out the following code and execute it.

You can understand the functioning of GET CURSOR.

TABLES : vbak.

TYPES : BEGIN OF ty_vbak,

vbeln TYPE vbeln_va,

erdat TYPE erdat,

erzet TYPE erzet,

END OF ty_vbak,

BEGIN OF ty_vbap,

vbeln TYPE vbeln_va,

posnr TYPE posnr_va,

matnr TYPE matnr,

END OF ty_vbap,

BEGIN OF ty_output,

vbeln TYPE vbeln_va,

erdat TYPE erdat,

erzet TYPE erzet,

posnr TYPE posnr_va,

matnr TYPE matnr,

END OF ty_output.

DATA : it_vbak TYPE STANDARD TABLE OF ty_vbak INITIAL SIZE 0,

it_vbap TYPE STANDARD TABLE OF ty_vbap INITIAL SIZE 0,

it_output TYPE STANDARD TABLE OF ty_output INITIAL SIZE 0,

wa_vbak TYPE ty_vbak,

wa_vbap TYPE ty_vbap,

wa_output TYPE ty_output.

DATA : fldname TYPE string,

fldval TYPE i.

REFRESH : it_vbak,

it_vbap,

it_output.

CLEAR : wa_vbak,

wa_vbap,

wa_output.

SELECT-OPTIONS : s_vbeln FOR vbak-vbeln.

START-OF-SELECTION.

SELECT vbeln

erdat

erzet

FROM vbak

INTO TABLE it_vbak

WHERE vbeln IN s_vbeln.

IF NOT it_vbak IS INITIAL.

SELECT vbeln

posnr

matnr

FROM vbap

INTO TABLE it_vbap

FOR ALL ENTRIES IN it_vbak

WHERE vbeln = it_vbak-vbeln.

ENDIF.

LOOP AT it_vbap INTO wa_vbap.

wa_output-vbeln = wa_vbap-vbeln.

wa_output-posnr = wa_vbap-posnr.

wa_output-matnr = wa_vbap-matnr.

CLEAR wa_vbak.

READ TABLE it_vbak INTO wa_vbak WITH KEY vbeln = wa_vbap-vbeln.

IF sy-subrc = 0.

wa_output-erdat = wa_vbak-erdat.

wa_output-erzet = wa_vbak-erzet.

ENDIF.

APPEND wa_output TO it_output.

CLEAR wa_output.

ENDLOOP.

LOOP AT it_output INTO wa_output.

WRITE 😕 wa_output-vbeln,

wa_output-erdat,

wa_output-erzet.

ENDLOOP.

AT LINE-SELECTION.

GET CURSOR FIELD fldname VALUE fldval.

LOOP AT it_output INTO wa_output.

WRITE 😕 wa_output-posnr,

wa_output-matnr.

ENDLOOP.

Thanks.

0 Kudos

Hi Soumya,

I have following code.

AT LINE-SELECTION.

HIDE wa_final.

GET CURSOR FIELD wa_final value lv_value.

SET PARAMETER ID 'AUN' FIELD lv_value.

CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

This is for SalesOrder display, Similary when user clicks on Delivery he should get delivery screen same for Invoice.

I want to know when SalesOrder, Delivery & Invoice is getting clicked.

My SalesOrder, Delivery & Invoice are displayed on the same line.

Regards,

Rahul

0 Kudos

Hi Rahul,

GET CURSOR FIELD wa_final VALUE lv_value.

wa_final will have the field name.

You have to write IF or Case to compare this wa_final with the corresponding fields for sales order, delivery, invoice.

Here is sample code.

Case wa_final

when 'wa_final-so_vbeln'.

SET PARAMETER ID 'AUN' FIELD lv_value.

CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

when ' wa_final-li_vbeln '.

*Do some action here

when 'wa_final-fu_vbeln '.

  • do some action here

endcase.

Plz check in the debugging mode what value you are getting in wa_final on clicking the three fields and use those values in the case statement.

Thanks,

Mandeep

Former Member
0 Kudos

Hi,

in your at line-selection event.

IF sy-cucol BETWEEN <col number> AND <col number>.

write the select query based on the field that is displayed between the column

ENDIF.

suppose sales order number is displayed between column 10 and 20

then check the condition

if sy-cucol between 10 and 20.

select * from vbak into table itab where vbeln = <selected vbeln>

endif

regards

padma

0 Kudos

Hi,

This is my code.

END-OF-SELECTION.

WRITE : 'Sales Order', (35) 'Delivery', (50) 'Invoice'.

LOOP AT it_final INTO wa_final.

WRITE: / wa_final-so_vbeln UNDER 'Sales Order' HOTSPOT ON,

wa_final-li_vbeln UNDER 'Delivery' HOTSPOT ON,

wa_final-fu_vbeln UNDER 'Invoice' HOTSPOT ON.

ENDLOOP.

AT LINE-SELECTION.

HIDE wa_final.

GET CURSOR FIELD wa_final value lv_value.

SET PARAMETER ID 'AUN' FIELD lv_value.

CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

Please let me know is there any way to call separate transaction based on field clicked.

Regards,

Rahul

0 Kudos

hi,

I think the correct coding would be:

END-OF-SELECTION.

WRITE : 'Sales Order', (35) 'Delivery', (50) 'Invoice'.

LOOP AT it_final INTO wa_final.

WRITE: / wa_final-so_vbeln UNDER 'Sales Order' HOTSPOT ON,
wa_final-li_vbeln UNDER 'Delivery' HOTSPOT ON,
wa_final-fu_vbeln UNDER 'Invoice' HOTSPOT ON.
HIDE wa_final-so_vbeln, wa_final-li_vbeln, wa_final-fu_vbeln.

ENDLOOP.

AT LINE-SELECTION.
GET CURSOR FIELD lv_field VALUE lv_value.
SET PARAMETER ID 'AUN' FIELD lv_value.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

Important is that the HIDE is right after WRITE and through GET CURSOR you'll know which sales doc was clicked (I assume all three are different in a row).

hope this helps

ec

0 Kudos
END-OF-SELECTION.

WRITE : 'Sales Order', (35) 'Delivery', (50) 'Invoice'.

LOOP AT it_final INTO wa_final.

WRITE: / wa_final-so_vbeln UNDER 'Sales Order' HOTSPOT ON,
wa_final-li_vbeln UNDER 'Delivery' HOTSPOT ON,
wa_final-fu_vbeln UNDER 'Invoice' HOTSPOT ON.

ENDLOOP.

AT LINE-SELECTION.

GET CURSOR FIELD wa_final value lv_value.
SET PARAMETER ID 'AUN' FIELD lv_value.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

With luck,

Pritam.

0 Kudos

Hi All,

Thanks for reply.

Please find the solution.

END-OF-SELECTION.

WRITE : 'Sales Order', (35) 'Delivery', (50) 'Invoice'.

LOOP AT it_final INTO wa_final.

WRITE: / wa_final-so_vbeln UNDER 'Sales Order' HOTSPOT ON,

wa_final-fu_vbeln UNDER 'Delivery' HOTSPOT ON,

wa_final-li_vbeln UNDER 'Invoice' HOTSPOT ON.

HIDE : wa_final-so_vbeln, wa_final-li_vbeln, wa_final-fu_vbeln.

ENDLOOP.

AT LINE-SELECTION.

" HIDE wa_final.

CASE wa_final.

GET CURSOR FIELD wa_final VALUE lv_value.

WHEN 'WA_FINAL-FU_VBELN'.

SET PARAMETER ID 'VL' FIELD lv_value.

CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.

WHEN 'WA_FINAL-SO_VBELN'.

SET PARAMETER ID 'AUN' FIELD lv_value.

CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

WHEN 'WA_FINAL-LI_VBELN'.

SET PARAMETER ID 'VF' FIELD lv_value.

SET PARAMETER ID 'BUK' FIELD '0005'.

CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.

ENDCASE.

Regards,

Rahul