Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
*& Report Z_VA25_QUOTATIONS
*&
*&---------------------------------------------------------------------*
* Object created: Z_VA25_QUOTATIONS *
* ---------------
*
* Title : VA25 Quotations Report *
* Author : SWATIJ (Swati Jain) *
* Date : 01.08.2019
*
*
*
* Function description: The Quotations report gives the list of *
* quotations created in the system. The output will display the *
* quotations and the orders created against it *
*---------------------------------------------------------------------*
*&
*&--------------------------------------------------------------------*
REPORT z_va25_quotations.
***===================================================================
* Data Declarations
***===================================================================
INCLUDE z_va25_quotations_top.
***===================================================================
* Selection Screen
***===================================================================
INCLUDE z_va25_quotations_s01.
***===================================================================
* Class Declaration
***===================================================================
INCLUDE z_va25_quotations_cls_defin.
***===================================================================
* Class Implementation
***===================================================================
INCLUDE z_va25_quotations_cls_impln.
INITIALIZATION.
DATA(lo_lcls) = NEW lcl_quotation_disp( p_vkorg ).
AT SELECTION-SCREEN.
lo_lcls->validate_selection( ).
START-OF-SELECTION.
*** Create object
DATA(lo_sales) = NEW lcl_quotation_disp( p_vkorg ).
lo_sales->build_quotation( ).
lo_sales->disp_quotation( ).
*&---------------------------------------------------------------------*
*& Include Z_VA25_QUOTATIONS_TOP
*&---------------------------------------------------------------------*
CLASS lcl_quotation_disp DEFINITION DEFERRED.
TABLES : vbak.
TYPES : BEGIN OF ty_final,
* vkbur TYPE vkbur, "Sales Office
vbeln TYPE vbeln_va, "Sales Document no
sales_ord TYPE vbeln_nach, "Sales Order
posnr TYPE posnr_va , "Sales document item
abgru TYPE abgru_va, "Reason for rejection
kunnr TYPE kunnr, "Sold-to-party/Customer code
name1 TYPE name1_gp, "Customer description/Name1
matnr TYPE matnr, "Material no.
arktx TYPE arktx, "Material Description
audat TYPE audat, "Document date
kwmeng TYPE kwmeng , "Ordered Quantity
bmeng TYPE bmeng , "Confirm Quantity
bal_qty TYPE kwmeng, "Balance Quantity
net_price TYPE netpr, "Net price
kzwi6 TYPE kzwi6, "Net value
loss_qty TYPE kwmeng, "Order loss Quantity
bstkd TYPE bstkd, "PO number
angdt TYPE angdt_v, "Valid from
bnddt TYPE bnddt, "Valid to
matkl TYPE matkl, "Material Group
gbsta TYPE gbsta, "Status
vbeln_inv TYPE vbeln_nach, "Invoice Number
fkimg TYPE fkimg, "Invoice Quantity
kbetr TYPE kbetr, "Invoice Cost
netwr TYPE netwr_fp, "Invoice Sales/Invoice net value
charg TYPE charg_d, "Batch Number
lost_sale TYPE netpr, "Lost Sales value
sales_exe TYPE pad_vorna, "Sales Executive name
END OF ty_final.
DATA : gt_final TYPE STANDARD TABLE OF ty_final,
gs_final TYPE ty_final.
*&---------------------------------------------------------------------*
*& Include Z_VA25_QUOTATIONS_S01
*&---------------------------------------------------------------------*
*--------------------------------------------------------------------*
* Selection Screen
*--------------------------------------------------------------------*
SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_vkorg TYPE vbak-vkorg OBLIGATORY.
SELECT-OPTIONS : s_vtweg FOR vbak-vtweg ,
s_spart FOR vbak-spart,
s_vbeln FOR vbak-vbeln,
s_vkbur FOR vbak-vkbur ,
s_vkgrp FOR vbak-vkgrp,
s_kunnr FOR vbak-kunnr,
s_audat FOR vbak-audat OBLIGATORY,
s_auart FOR vbak-auart.
SELECTION-SCREEN : END OF BLOCK b1.
*&---------------------------------------------------------------------*
*& Include Z_VA25_QUOTATIONS_CLS_DEFIN
*&---------------------------------------------------------------------*
CLASS lcl_quotation_disp DEFINITION CREATE PUBLIC.
PUBLIC SECTION.
TYPES:BEGIN OF ty_invcost,
knumv TYPE knumv,
kposn TYPE kposn,
kschl TYPE kscha,
kbetr TYPE kbetr,
END OF ty_invcost.
DATA : lt_invcost TYPE STANDARD TABLE OF ty_invcost,
lv_bmeng TYPE bmeng.
DATA : lo_salv TYPE REF TO cl_salv_table.
METHODS: validate_selection,
constructor IMPORTING iv_vkorg TYPE vkorg,
build_quotation,
disp_quotation.
PRIVATE SECTION.
TYPES : BEGIN OF ty_invoice,
vbelv TYPE vbeln_von,
posnv TYPE posnr_von,
vbeln_inv TYPE vbeln_nach,
posnr_inv TYPE posnr_nach,
fkimg TYPE fkimg,
netwr TYPE netwr_fp,
charg TYPE charg_d,
kbetr TYPE kbetr,
END OF ty_invoice.
DATA : ls_invoice TYPE ty_invoice,
lt_invoice TYPE TABLE OF ty_invoice,
lt_final TYPE STANDARD TABLE OF ty_final,
lt_final_tmp TYPE STANDARD TABLE OF ty_final,
ls_final TYPE ty_final,
ls_final_temp TYPE ty_final.
DATA : lv_vkorg TYPE vkorg.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Include Z_VA25_QUOTATIONS_CLS_IMPLN
*&---------------------------------------------------------------------*
CLASS lcl_quotation_disp IMPLEMENTATION.
METHOD validate_selection.
*&----------------------------------------------
*** Sales Org Validation
*&----------------------------------------------
IF p_vkorg IS NOT INITIAL.
SELECT vkorg
FROM tvko
INTO TABLE @DATA(lt_tvko)
WHERE vkorg = @p_vkorg.
*** Check for Sales Org Authorization
IF lt_tvko[] IS NOT INITIAL.
LOOP AT lt_tvko ASSIGNING FIELD-SYMBOL(<fs_tvko>).
IF <fs_tvko> IS ASSIGNED.
AUTHORITY-CHECK OBJECT 'ZVA25_ORG1'
ID 'VKORG' FIELD <fs_tvko>-vkorg
ID 'ACTVT' FIELD '03'.
IF sy-subrc = 0.
ELSE.
MESSAGE e398(00) WITH text-002.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD constructor.
lv_vkorg = iv_vkorg .
ENDMETHOD.
METHOD build_quotation.
DATA : lv_invqty TYPE fkimg,
* lv_first_name TYPE pad_vorna.
lv_name TYPE string.
CONSTANTS :lc_parvw TYPE parvw VALUE 'VE'. "Internal conversion partner
function PE is VE
*** Fetch sales document header details from VBAK
SELECT vbeln,
angdt,
bnddt,
audat,
auart,
vkorg,
vtweg,
spart,
vkgrp,
vkbur,
kunnr
FROM vbak
INTO TABLE @DATA(lt_vbak)
WHERE vbeln IN @s_vbeln
AND audat IN @s_audat
AND auart IN @s_auart
AND vkorg EQ @lv_vkorg
AND vtweg IN @s_vtweg
AND spart IN @s_spart
AND vkgrp IN @s_vkgrp
AND vkbur IN @s_vkbur
AND kunnr IN @s_kunnr.
IF lt_vbak[] IS NOT INITIAL.
SORT lt_vbak BY vbeln .
*** Fetch customer no from KNA1 for all selected customers from sales docuem
nt header
SELECT kunnr,
name1
FROM kna1
INTO TABLE @DATA(lt_kna1)
FOR ALL ENTRIES IN @lt_vbak
WHERE kunnr EQ @lt_vbak-kunnr.
*** Fetch sales document item data from VBAP
SELECT vbeln,
posnr,
matnr,
matkl,
arktx,
abgru,
kwmeng,
kzwi6
FROM vbap
INTO TABLE @DATA(lt_vbap)
FOR ALL ENTRIES IN @lt_vbak
WHERE vbeln EQ @lt_vbak-vbeln.
IF lt_vbap[] IS NOT INITIAL.
SORT lt_vbap BY vbeln posnr.
*** Fetch Overall processing Status of the SD document item from VBUP
SELECT vbeln,
posnr,
gbsta
FROM vbup
INTO TABLE @DATA(lt_vbup)
FOR ALL ENTRIES IN @lt_vbap
WHERE vbeln EQ @lt_vbap-vbeln
AND posnr EQ @lt_vbap-posnr.
IF lt_vbup[] IS NOT INITIAL.
SORT lt_vbup BY vbeln posnr.
ENDIF.
ENDIF.
*** Fetch Customer Purchase Order reference number from VBKD
SELECT vbeln,
posnr,
bstkd
FROM vbkd
INTO TABLE @DATA(lt_vbkd)
FOR ALL ENTRIES IN @lt_vbak
WHERE vbeln EQ @lt_vbak-vbeln.
IF lt_vbkd[] IS NOT INITIAL.
SORT lt_vbkd BY vbeln posnr DESCENDING.
DELETE ADJACENT DUPLICATES FROM lt_vbkd COMPARING vbeln.
ENDIF.
*** Fetch Personnel no from VBPA for Partner function as PE
SELECT vbeln,
posnr,
parvw,
pernr
FROM vbpa
INTO TABLE @DATA(lt_vbpa)
FOR ALL ENTRIES IN @lt_vbap
WHERE vbeln EQ @lt_vbap-vbeln
AND parvw EQ @lc_parvw.
IF lt_vbpa[] IS NOT INITIAL.
SORT lt_vbpa BY vbeln posnr parvw.
ENDIF.
*** Fetch Invoice no from VBFA for sales document header as preceding SD do
cument and document category as ( 'M' : Invoice)
SELECT vbelv,
posnv,
vbeln,
posnn,
vbtyp_n,
erdat,
erzet
FROM vbfa
INTO TABLE @DATA(lt_vbfa)
FOR ALL ENTRIES IN @lt_vbak
WHERE vbelv EQ @lt_vbak-vbeln
AND vbtyp_n EQ 'M'.
IF lt_vbfa[] IS NOT INITIAL.
SORT lt_vbfa BY vbelv posnv.
*** Fetch document condition no from VBRK for the invoice no fetched above
SELECT vbeln,
knumv,
fksto
FROM vbrk
INTO TABLE @DATA(lt_vbrk)
FOR ALL ENTRIES IN @lt_vbfa
WHERE vbeln EQ @lt_vbfa-vbeln.
*** To Identify invoices which are cancelled
IF lt_vbrk[] IS NOT INITIAL.
SORT lt_vbrk BY vbeln.
LOOP AT lt_vbfa ASSIGNING FIELD-SYMBOL(<fs_vbfa_tmp>) .
READ TABLE lt_vbrk TRANSPORTING NO FIELDS WITH KEY vbeln = <fs_vbf
a_tmp>-vbeln
fksto = 'X' BIN
ARY SEARCH.
IF sy-subrc = 0.
CLEAR <fs_vbfa_tmp>.
ELSE.
CONTINUE.
ENDIF.
ENDLOOP.
ENDIF.
DELETE lt_vbfa WHERE vbelv IS INITIAL.
*** Fetch Invoiced Quantity and Invoice net value for the selected invoices
from VBRP
SELECT vbeln,
posnr,
fkimg,
netwr,
charg
FROM vbrp
INTO TABLE @DATA(lt_vbrp)
FOR ALL ENTRIES IN @lt_vbfa
WHERE vbeln EQ @lt_vbfa-vbeln
AND posnr EQ @lt_vbfa-posnn.
*** Pass document codition no from vbrk and item no from vbrp to internal t
able lt_invcost.
APPEND INITIAL LINE TO lt_invcost ASSIGNING FIELD-
SYMBOL(<fs_invcost>).
SORT lt_vbrk BY vbeln.
IF lt_vbrp IS NOT INITIAL.
LOOP AT lt_vbrp ASSIGNING FIELD-SYMBOL(<fs_vbrp>).
READ TABLE lt_vbrk ASSIGNING FIELD-SYMBOL(<fs_vbrk>) WITH KEY vbel
n = <fs_vbrp>-vbeln BINARY SEARCH.
IF sy-subrc = 0 AND <fs_vbrk> IS ASSIGNED.
<fs_invcost>-knumv = <fs_vbrk>-knumv.
<fs_invcost>-kposn = <fs_vbrp>-posnr.
APPEND <fs_invcost> TO lt_invcost.
ENDIF.
ENDLOOP.
ENDIF.
**** Fetch Invoice cost (condition amount percentage rate) from KONV for the
document condition no of selected invoice by item .
IF lt_invcost[] IS NOT INITIAL.
SORT lt_invcost BY knumv kposn.
SELECT knumv,
kposn,
kschl,
kbetr
FROM konv
INTO TABLE @DATA(lt_konv)
FOR ALL ENTRIES IN @lt_invcost
WHERE knumv EQ @lt_invcost-knumv
AND kposn EQ @lt_invcost-kposn
AND kschl EQ 'VPRS'.
ENDIF.
SORT lt_konv BY knumv kposn.
LOOP AT lt_vbfa ASSIGNING FIELD-SYMBOL(<fs_vbfa>).
*** Fetch Invoice numbers to lt_invoice table in order to fetch all invoices
including plitted invoice for quotation
ls_invoice-vbelv = <fs_vbfa>-vbelv.
ls_invoice-posnv = <fs_vbfa>-posnv.
ls_invoice-vbeln_inv = <fs_vbfa>-vbeln.
ls_invoice-posnr_inv = <fs_vbfa>-posnn.
SORT lt_vbrp BY vbeln posnr.
READ TABLE lt_vbrp ASSIGNING FIELD-SYMBOL(<fs_vbrp_inv>) WITH KEY vb
eln = <fs_vbfa>-vbeln
posnr
= <fs_vbfa>-posnn BINARY SEARCH.
*** Populate invoice quantity , invoice sales and Batch number to lt_invoice
including splitted invoice for quotation
IF ( sy-subrc = 0 AND <fs_vbrp_inv> IS ASSIGNED ).
ls_invoice-fkimg = <fs_vbrp_inv>-fkimg.
ls_invoice-netwr = <fs_vbrp_inv>-netwr.
ls_invoice-charg = <fs_vbrp_inv>-charg.
ENDIF.
READ TABLE lt_vbrk ASSIGNING FIELD-SYMBOL(<fs_vbrk_inv>) WITH KEY vb
eln = <fs_vbrp_inv>-vbeln BINARY SEARCH.
IF sy-subrc = 0 AND <fs_vbrk_inv> IS ASSIGNED.
READ TABLE lt_konv ASSIGNING FIELD-SYMBOL(<fs_konv>) WITH KEY knum
v = <fs_vbrk_inv>-knumv
kposn
= <fs_vbrp_inv>-posnr BINARY SEARCH.
*** Populate Invoice cost
IF ( sy-subrc = 0 AND <fs_konv> IS ASSIGNED ).
ls_invoice-kbetr = <fs_konv>-kbetr.
ENDIF.
ENDIF.
APPEND ls_invoice TO lt_invoice.
ENDLOOP.
ENDIF.
*** && Fetch Sales Order from VBFA by passing preceding document(vbelv-
quotation)
*** and document category of subsequent document as 'C'
IF lt_vbap[] IS NOT INITIAL.
SELECT vbelv,
posnv,
vbeln,
posnn,
vbtyp_n
FROM vbfa
INTO TABLE @DATA(lt_vbfa1)
FOR ALL ENTRIES IN @lt_vbap
WHERE vbelv EQ @lt_vbap-vbeln
AND posnv EQ @lt_vbap-posnr
AND vbtyp_n EQ 'C'.
IF lt_vbfa1[] IS NOT INITIAL.
SORT lt_vbfa1 BY vbelv posnv.
ENDIF.
ENDIF.
ENDIF.
DELETE lt_invoice WHERE vbelv IS INITIAL.
UNASSIGN : <fs_vbrk>, <fs_vbrp> , <fs_invcost>.
***& ----------------------------------------------------------
*** Process final internal table
***& ----------------------------------------------------------
IF lt_vbap[] IS NOT INITIAL.
SORT lt_vbap BY vbeln posnr ASCENDING.
LOOP AT lt_vbap ASSIGNING FIELD-SYMBOL(<fs_vbap>).
*** Populate item no ,material group , material no, material description
,rejection reason, ordered qty, net price and net value
gs_final-posnr = <fs_vbap>-posnr.
gs_final-matkl = <fs_vbap>-matkl.
gs_final-matnr = <fs_vbap>-matnr.
gs_final-arktx = <fs_vbap>-arktx.
gs_final-abgru = <fs_vbap>-abgru.
gs_final-kwmeng = <fs_vbap>-kwmeng.
gs_final-kzwi6 = <fs_vbap>-kzwi6.
*** Populate Sales Order from LT_VBFA1
READ TABLE lt_vbfa1 ASSIGNING FIELD-SYMBOL(<fs_order>) WITH KEY vbelv
= <fs_vbap>-vbeln
posnv =
<fs_vbap>-posnr BINARY SEARCH.
IF sy-subrc = 0 AND <fs_order> IS ASSIGNED.
gs_final-sales_ord = <fs_order>-vbeln. "Subsequent document
ENDIF.
*** Fetch Sales Executive no from PA0002 by passing pernr from lt_vbpa
READ TABLE lt_vbpa ASSIGNING FIELD-SYMBOL(<fs_vbpa>) WITH KEY vbeln =
<fs_vbap>-vbeln BINARY SEARCH.
IF sy-subrc = 0 AND <fs_vbpa> IS ASSIGNED.
* SELECT SINGLE vorna FROM pa0002 INTO lv_first_name WHERE pernr
= <fs_vbpa>-pernr.
* gs_final-sales_exe = lv_first_name.
SELECT SINGLE vorna , nachn FROM pa0002 INTO @DATA(ls_name) WHERE pe
rnr = @<fs_vbpa>-pernr.
CONCATENATE ls_name-vorna ls_name-nachn INTO lv_name SEPARATED BY sp
ace.
gs_final-sales_exe = lv_name.
ENDIF.
*** Net price = Net value/Ordered Quantity
IF <fs_vbap>-kwmeng NE 0.
gs_final-net_price = <fs_vbap>-kzwi6 / <fs_vbap>-kwmeng.
ELSE.
gs_final-net_price = <fs_vbap>-kzwi6.
ENDIF.
SORT lt_vbak BY vbeln ASCENDING.
READ TABLE lt_vbak ASSIGNING FIELD-SYMBOL(<fs_vbak>) WITH KEY vbeln =
<fs_vbap>-vbeln BINARY SEARCH.
*** populate sales office , doc date, sales doc, valid from and to
IF ( sy-subrc = 0 AND <fs_vbak> IS ASSIGNED ).
* gs_final-vkbur = <fs_vbak>-vkbur.
gs_final-audat = <fs_vbak>-audat.
gs_final-vbeln = <fs_vbak>-vbeln.
gs_final-angdt = <fs_vbak>-angdt.
gs_final-bnddt = <fs_vbak>-bnddt.
SORT lt_kna1 BY kunnr.
READ TABLE lt_kna1 ASSIGNING FIELD-SYMBOL(<fs_kna1>) WITH KEY kunnr
= <fs_vbak>-kunnr BINARY SEARCH.
*** Populate Customer no and name
IF sy-subrc = 0 AND <fs_kna1> IS ASSIGNED.
gs_final-kunnr = <fs_kna1>-kunnr.
gs_final-name1 = <fs_kna1>-name1.
ENDIF.
SORT lt_vbkd BY vbeln.
READ TABLE lt_vbkd ASSIGNING FIELD-SYMBOL(<fs_vbkd>) WITH KEY vbeln
= <fs_vbak>-vbeln BINARY SEARCH.
*** Populate PO ref no .
IF sy-subrc = 0 AND <fs_vbkd> IS ASSIGNED.
gs_final-bstkd = <fs_vbkd>-bstkd.
ENDIF.
*** Fetch confirmed Quantity for selected sales item from VBEP
SELECT vbeln,
posnr,
SUM( bmeng ) AS bmeng
FROM vbep
INTO @DATA(ls_vbep)
WHERE vbeln EQ @<fs_vbap>-vbeln
AND posnr EQ @<fs_vbap>-posnr
GROUP BY vbeln, posnr.
ENDSELECT.
*** Populate confirmed quantity
gs_final-bmeng = ls_vbep-bmeng .
*** Populate balance quantity (ordered qty -Confirmed qty)
gs_final-bal_qty = gs_final-kwmeng - gs_final-bmeng.
SORT lt_vbup BY vbeln posnr.
READ TABLE lt_vbup ASSIGNING FIELD-SYMBOL(<fs_vbup>) WITH KEY vbeln
= <fs_vbap>-vbeln
posnr
= <fs_vbap>-posnr BINARY SEARCH.
*** Populate Item status
IF sy-subrc = 0 AND <fs_vbup> IS ASSIGNED.
gs_final-gbsta = <fs_vbup>-gbsta.
ENDIF.
ENDIF.
APPEND gs_final TO gt_final.
CLEAR :gs_final, ls_name, lv_name.
ENDLOOP.
ENDIF.
SORT gt_final BY vbeln posnr.
DELETE ADJACENT DUPLICATES FROM gt_final COMPARING ALL FIELDS.
*** Copy final table to lt_final ad fetch invoice related sales doc to lt_f
inal_tmp
lt_final[] = gt_final[].
SORT lt_final .
IF lt_invoice[] IS NOT INITIAL.
LOOP AT lt_invoice ASSIGNING FIELD-SYMBOL(<fs_invoice>) .
READ TABLE lt_final INTO ls_final WITH KEY vbeln = <fs_invoice>-vbelv
posnr = <fs_invoice>-
posnv.
ls_final-vbeln_inv = <fs_invoice>-vbeln_inv.
ls_final-fkimg = <fs_invoice>-fkimg.
ls_final-netwr = <fs_invoice>-netwr.
ls_final-charg = <fs_invoice>-charg.
ls_final-kbetr = <fs_invoice>-kbetr.
APPEND ls_final TO lt_final_tmp.
CLEAR ls_final.
ENDLOOP.
ENDIF.
***&&& delete entries from gt_final which is available in lt_final-tmp,
***so as to invoice related sales docu will be in lt_final_tmp
IF lt_final_tmp[] IS NOT INITIAL.
LOOP AT lt_final_tmp ASSIGNING FIELD-SYMBOL(<fs_final>).
READ TABLE lt_final INTO ls_final WITH KEY vbeln = <fs_final>-vbeln
posnr = <fs_final>-posnr B
INARY SEARCH.
IF sy-subrc = 0.
DELETE TABLE gt_final FROM ls_final .
CLEAR ls_final.
APPEND <fs_final> TO gt_final.
ENDIF.
ENDLOOP.
ENDIF.
SORT gt_final BY vbeln posnr.
****** Populate Order loss quantity = (Order qty )- (sum of invoiced qty
of invoice with same item )
CLEAR: gs_final, ls_final, ls_final_temp.
REFRESH :lt_final_tmp.
IF gt_final[] IS NOT INITIAL.
LOOP AT gt_final INTO gs_final.
ls_final_temp = gs_final.
AT NEW posnr.
CLEAR lv_invqty.
ENDAT.
lv_invqty = lv_invqty + gs_final-fkimg.
AT END OF posnr.
ls_final_temp-loss_qty = ls_final_temp-kwmeng - lv_invqty.
APPEND ls_final_temp TO lt_final_tmp.
ENDAT.
ENDLOOP.
ENDIF.
IF lt_final_tmp[] IS NOT INITIAL.
SORT lt_final_tmp BY vbeln posnr.
LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<fs_final1>).
READ TABLE lt_final_tmp INTO ls_final_temp WITH KEY vbeln = <fs_final1
>-vbeln
posnr = <fs_final
1>-posnr BINARY SEARCH.
IF sy-subrc = 0.
<fs_final1>-loss_qty = ls_final_temp-loss_qty.
*** lost sales value = Order loss qty * Net price
<fs_final1>-lost_sale = ls_final_temp-loss_qty * ls_final_temp-
net_price.
IF <fs_final1>-loss_qty < 0.
<fs_final1>-loss_qty = 0.
ENDIF.
CLEAR :ls_final_temp.
ENDIF.
ENDLOOP.
ENDIF.
SORT gt_final BY vbeln posnr.
DELETE ADJACENT DUPLICATES FROM gt_final COMPARING ALL FIELDS .
ENDMETHOD.
METHOD disp_quotation.
DATA : columns TYPE REF TO cl_salv_columns_table,
column TYPE REF TO cl_salv_column.
TRY.
CALL METHOD cl_salv_table=>factory
* EXPORTING
* list_display = IF_SALV_C_BOOL_SAP=>FALSE
* r_container =
* container_name =
IMPORTING
r_salv_table = lo_salv
CHANGING
t_table = gt_final.
lo_salv->get_functions( )->set_all( abap_true ).
columns = lo_salv->get_columns( ).
columns->set_optimize( abap_true ).
***& Set short text and Long Text for columns in output
columns->get_column( 'VBELN' )->set_short_text( 'Quot.Doc.' ).
columns->get_column( 'VBELN' )->set_medium_text( 'Quotation Doc.' ).
columns->get_column( 'VBELN' )->set_long_text( 'Quotation Document' ).
columns->get_column( 'POSNR' )->set_short_text( 'Quot.Item' ).
columns->get_column( 'POSNR' )->set_medium_text( 'Quotation Item' ).
columns->get_column( 'POSNR' )->set_long_text( 'Quotation Item' ).
columns->get_column( 'SALES_ORD' )->set_short_text( 'Sales Ord' ).
columns->get_column( 'SALES_ORD' )->set_medium_text( 'Sales Order' ).
columns->get_column( 'SALES_ORD' )->set_long_text( 'Sales Order' ).
columns->get_column( 'KUNNR' )->set_short_text( 'Sold-to pt' ).
columns->get_column( 'KUNNR' )->set_medium_text( 'Sold-to party' ).
columns->get_column( 'ABGRU' )->set_short_text( '' ).
"To overwite the dictionary field label
columns->get_column( 'ABGRU' )->set_medium_text( '' ).
"To overwite the dictionary field label
columns->get_column( 'NAME1' )->set_short_text( 'Name1' ).
columns->get_column( 'BSTKD' )->set_short_text( 'PO No. ' ).
columns->get_column( 'BSTKD' )->set_output_length( 20 ).
columns->get_column( 'BSTKD' )->set_medium_text( 'PO Number' ).
columns->get_column( 'BSTKD' )->set_long_text( 'Purchase Order Number'
) .
columns->get_column( 'BAL_QTY' )->set_short_text( ' ' ).
columns->get_column( 'BAL_QTY' )->set_medium_text( 'Balance Quan' ).
columns->get_column( 'BAL_QTY' )->set_long_text( 'Balance Quantity' ).
columns->get_column( 'KZWI6' )->set_short_text( '' ).
"To overwite the dictionary field label
columns->get_column( 'KZWI6' )->set_medium_text( '' ).
"To overwite the dictionary field label
columns->get_column( 'KZWI6' )->set_long_text( 'Net Value' ).
columns->get_column( 'LOSS_QTY' )->set_short_text( '' ).
columns->get_column( 'LOSS_QTY' )->set_medium_text( 'Order loss qty' )
.
columns->get_column( 'LOSS_QTY' )->set_long_text( 'Order loss qty' ).
columns->get_column( 'GBSTA' )->set_short_text( 'Status' ).
columns->get_column( 'VBELN_INV' )->set_short_text( 'Invoice No').
columns->get_column( 'VBELN_INV' )->set_medium_text( 'Invoice No.' ).
columns->get_column( 'VBELN_INV' )->set_long_text( 'Invoice Number' ).
columns->get_column( 'FKIMG' )->set_short_text( '' ).
columns->get_column( 'FKIMG' )->set_medium_text( 'Invoice Qty' ).
columns->get_column( 'KBETR' )->set_short_text( '' ).
columns->get_column( 'KBETR' )->set_medium_text( 'Cost per item' ).
columns->get_column( 'KBETR' )->set_long_text( 'Cost per item' ).
columns->get_column( 'NETWR' )->set_short_text( '' ).
columns->get_column( 'NETWR' )->set_medium_text( '' ) .
columns->get_column( 'NETWR' )->set_long_text( 'Invoice Net sales' ) .
columns->get_column( 'LOST_SALE' )->set_short_text( '' ).
columns->get_column( 'LOST_SALE' )->set_medium_text( 'Lost sales value
' ).
columns->get_column( 'LOST_SALE' )->set_long_text( 'Lost sales value'
).
columns->get_column( 'SALES_EXE' )->set_short_text( '' ).
columns->get_column( 'SALES_EXE' )->set_medium_text( 'Sales Exe Name'
).
columns->get_column( 'SALES_EXE' )->set_long_text( 'Sales Executive Na
me' ).
CATCH cx_salv_msg .
ENDTRY.
lo_salv->display( ).
ENDMETHOD.
ENDCLASS.