Hi Friends,
Below function module code will help you to get the pricing conditions of a sales order based on the invoice number. When an invoice number is passed to the function module, it will looks for the pricing conditions associated to the sales order corresponding to the invoice number and populated to the custom internal table ZV_PRICING_CONDITION.
Structure for ZV_PRICING_CONDITION
| Row |
Field Name |
Position |
Data Element |
Domain |
Data type |
Length |
Description |
|---|---|---|---|---|---|---|---|
| 1 |
KPOSN |
1 |
KPOSN |
NUM6 |
NUMC |
6 |
Condition item number |
| 2 |
KSCHL |
2 |
KSCHA |
KSCHL |
CHAR |
4 |
Condition type |
| 3 |
DRUKZ |
3 |
DRUKZ |
DRUKZ |
CHAR |
1 |
Print ID for condition lines |
| 4 |
KWERT |
4 |
KWERT |
WERTV7 |
CURR |
13 |
Condition value |
| 5 |
KBETER |
5 |
KBETR |
WERTV6 |
CURR |
11 |
Rate (condition amount or percentage) |
| 6 |
VTEXT | 6 | VTXTK | TEXT20 | CHAR | 20 | Name |
| 7 |
KAWRT |
7 |
KAWRT |
TEXT20 |
CURR |
20 |
Condition base value |
Main Program Code: SAPLZV_PRICING_GROUP
*******************************************************************
* System-defined Include-files. *
*******************************************************************
INCLUDE LZV_PRICING_GROUPTOP. " Global Data
INCLUDE LZV_PRICING_GROUPUXX. " Function Modules
*******************************************************************
* User-defined Include-files (if necessary). *
*******************************************************************
* INCLUDE LZV_PRICING_GROUPF... " Subprograms
* INCLUDE LZV_PRICING_GROUPO... " PBO-Modules
* INCLUDE LZV_PRICING_GROUPI... " PAI-Modules
INCLUDE LZV_PRICING_GROUPFRM. " Form
-------------------------------------------------------------------------------
Include Program Code:
-------------------------------------------------------------------------------
INCLUDE LZV_PRICING_GROUPTOP.
FUNCTION-POOL ZV_PRICING_GROUP. "MESSAGE-ID ..
*Internal tables
data: i_vbrk type standard table of vbrk,
i_vbrp type standard table of vbrp,
i_comm_head_i type komk,
i_comm_item_i type komp,
i_tkomv type standard table of komv,
i_b_tkomv type standard table of komv,
i_a_tkomvd type standard table of komvd,
i_t685t type standard table of t685t,
i_t683s type standard table of t683s,
i_konv type standard table of konv,
*Work areas
wa_vbrk type vbrk,
wa_vbrp type vbrp,
wa_t685t type t685t,
wa_t683s type t683s,
wa_tkomv type komv,
wa_konv type konv,
wa_pricing_tab type zvprice,
ws_c_kwert type komv-kwert,
w_c_posnr type vbrp-posnr,
w_c_spart type vbrk-spart,
ws_c_kschl type komv-kschl,
wa_a_tkomv type komv,
wa_b_tkomv type komv,
ws_c_tabix type sy-tabix,
ws_lines type i.
*Work areas for forms.
DATA: i_t683s_1 TYPE STANDARD TABLE OF t683s,
wa_t683s_1 TYPE t683s,
wa_pricing_tab_1 TYPE zvprice,
ws_c_kawrt TYPE komv-kawrt.
-------------------------------------------------------------------------------INCLUDE LZV_PRICING_GROUPUXX.
*****************************************************************
* THIS FILE IS GENERATED BY THE FUNCTION LIBRARY. *
* NEVER CHANGE IT MANUALLY, PLEASE! *
*****************************************************************
INCLUDE LZV_PRICING_GROUPU01.
"Z_VPRICING_CONDITIONS
-------------------------------------------------------------------------------
INCLUDE LZV_PRICING_GROUPU01.
FUNCTION z_vpricing_conditions .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(W_C_VBELN) TYPE VBRK-VBELN
*" CHANGING
*" REFERENCE(I_PRICING_TAB) TYPE ZVPRICE_TABLE_TYPE
*" REFERENCE(I_PRICING_TAB_1) TYPE ZVPRICE_TABLE_TYPE
*"----------------------------------------------------------------------
*----------------------------------------------------------------------*
* Description : FM for calculating the Pricing conditions that
* need to be displayed on the forms which are
* triggered from the invoice for both I-level and CF.
*----------------------------------------------------------------------*
*get the knumv related to the billing document number form VBRK
SELECT vbeln vkorg vtweg spart knumv
FROM vbrk
INTO CORRESPONDING FIELDS OF TABLE i_vbrk
WHERE vbeln = w_c_vbeln.
IF sy-subrc = 0.
CLEAR wa_vbrk.
READ TABLE i_vbrk INTO wa_vbrk INDEX 1.
IF sy-subrc = 0.
*Header Structure for I-level, CF pricing
i_comm_head_i-belnr = w_c_vbeln.
i_comm_head_i-knumv = wa_vbrk-knumv.
i_comm_head_i-vkorg = wa_vbrk-vkorg.
i_comm_head_i-vtweg = wa_vbrk-vtweg.
i_comm_head_i-spart = wa_vbrk-spart.
ENDIF.
ENDIF.
*get the posnr matnr related to the billing document line item numbers form VBRP
SELECT posnr matnr vbeln
FROM vbrp
INTO CORRESPONDING FIELDS OF TABLE i_vbrp
WHERE vbeln = w_c_vbeln.
SORT i_vbrp BY posnr.
*&-----------------------------------------------------------------------*
* Start Pricing related to the i-level
*&-----------------------------------------------------------------------*
IF wa_vbrk-spart = '20'. "i-level
w_c_spart = wa_vbrk-spart.
clear i_tkomv.
CALL FUNCTION 'RV_KONV_SELECT'
EXPORTING
comm_head_i = i_comm_head_i
GENERAL_READ = 'X'
* READ_CONDITION_RECORD = ' '
* IMPORTING
* COMM_HEAD_E = i_a_tkomv
tables
tkomv = i_tkomv.
*Check for the print indicators in T683S
DESCRIBE TABLE i_tkomv LINES ws_lines.
IF ws_lines NE 0.
SELECT stunr kschl drukz kvewe kappl kalsm zaehk
FROM t683s
INTO CORRESPONDING FIELDS OF TABLE i_t683s
FOR ALL ENTRIES IN i_tkomv
WHERE kschl = i_tkomv-kschl
AND drukz IN ('b', 'B')
AND kvewe NE ''
AND kappl NE ''
AND kalsm NE ''
AND stunr NE ''.
* AND zaehk NE ''.
ENDIF.
SORT i_t683s BY stunr.
*logic to consolidate the line items based on the KSCHL value
SORT i_tkomv BY kschl.
CLEAR ws_c_kwert.
LOOP AT i_tkomv INTO wa_a_tkomv.
ws_c_tabix = sy-tabix + 1.
ws_c_kwert = ws_c_kwert + wa_a_tkomv-kwert.
CLEAR wa_b_tkomv.
READ TABLE i_tkomv INTO wa_b_tkomv INDEX ws_c_tabix.
IF wa_a_tkomv-kschl NE wa_b_tkomv-kschl.
wa_a_tkomv-kwert = ws_c_kwert.
APPEND wa_a_tkomv TO i_b_tkomv.
CLEAR ws_c_kwert.
ENDIF.
ENDLOOP.
i_tkomv[] = i_b_tkomv[].
PERFORM f0001_fill_structure TABLES i_pricing_tab i_pricing_tab_1
USING w_c_posnr
w_c_spart.
ENDIF. "i-level.
*&-----------------------------------------------------------------------*
* Start Pricing related to the CF
*&-----------------------------------------------------------------------*
IF wa_vbrk-spart = '10'. "CF
w_c_spart = wa_vbrk-spart.
LOOP AT i_vbrp INTO wa_vbrp.
*Item Structure for CF pricing
i_comm_item_i-kposn = wa_vbrp-posnr.
w_c_posnr = wa_vbrp-posnr.
i_comm_item_i-matnr = wa_vbrp-matnr.
clear i_tkomv.
CALL FUNCTION 'RV_PRICE_PRINT_ITEM'
EXPORTING
comm_head_i = i_comm_head_i
comm_item_i = i_comm_item_i
TABLES
tkomv = i_tkomv
tkomvd = i_a_tkomvd.
*Check for the print indicators in T683S
DESCRIBE TABLE i_tkomv LINES ws_lines.
IF ws_lines NE 0.
SELECT stunr kschl drukz kvewe kappl kalsm zaehk
FROM t683s
INTO CORRESPONDING FIELDS OF TABLE i_t683s
FOR ALL ENTRIES IN i_tkomv
WHERE kschl = i_tkomv-kschl
AND drukz IN ('b', 'B')
AND kvewe NE ''
AND kappl NE ''
AND kalsm NE ''
AND stunr NE ''. "#CCE
* AND zaehk NE ''.
ENDIF.
PERFORM f0001_fill_structure TABLES i_pricing_tab i_pricing_tab_1
USING w_c_posnr
w_c_spart.
ENDLOOP.
ENDIF. "CF
ENDFUNCTION.
-------------------------------------------------------------------------------
INCLUDE LZV_PRICING_GROUPFRM.
*&---------------------------------------------------------------------*
*& Include LZV_PRICING_GROUPFRM
*&---------------------------------------------------------------------*
**&-----------------------------------------------------------------------*
**& Form f0001_fill_structure
**&-----------------------------------------------------------------------*
**---1. Check for the print indicators in T683S
**---2. Get the condition text for the corresponding KSCHL value from T685T
**---3. Filling the table i_pricing_tab that need to be exported
**------------------------------------------------------------------------*
FORM f0001_fill_structure TABLES i_pricing_tab
i_pricing_tab_1
USING p_w_c_posnr TYPE vbrp-posnr
p_w_c_spart TYPE vbrk-spart.
*Get the condition text for the corresponding KSCHL value from T685T
DESCRIBE TABLE i_t683s LINES ws_lines.
IF ws_lines NE 0.
SELECT spras
kvewe
kappl
kschl
vtext
FROM t685t
INTO CORRESPONDING FIELDS OF TABLE i_t685t
FOR ALL ENTRIES IN i_t683s
WHERE spras = sy-langu AND
kvewe = 'A' AND
kappl = 'V' AND
kschl = i_t683s-kschl AND
kschl NE space.
ENDIF.
*Filling the table i_pricing_tab that need to be exported
SORT i_tkomv BY kschl.
SORT i_tkomv BY kschl kposn.
SORT I_T685t BY KSCHL.
LOOP AT i_t683s INTO wa_t683s.
CLEAR: wa_tkomv, wa_t685t.
IF p_w_c_spart = '10'. "CF
CLEAR WA_TKOMV.
READ TABLE i_tkomv INTO wa_tkomv
WITH KEY kschl = wa_t683s-kschl kposn = p_w_c_posnr
BINARY SEARCH.
ELSE. "I-LEVEL
CLEAR WA_TKOMV.
READ TABLE i_tkomv INTO wa_tkomv WITH KEY kschl = wa_t683s-kschl BINARY SEARCH.
ENDIF.
IF sy-subrc = 0.
wa_pricing_tab-kschl = wa_tkomv-kschl.
wa_pricing_tab-kposn = wa_tkomv-kposn.
wa_pricing_tab-drukz = wa_tkomv-drukz.
wa_pricing_tab-kwert = wa_tkomv-kwert.
wa_pricing_tab-kbetr = wa_tkomv-kbetr.
CLEAR WA_T685T.
READ TABLE i_t685t INTO wa_t685t WITH KEY kschl = wa_t683s-kschl binary search.
IF sy-subrc = 0.
IF wa_pricing_tab-kschl NE 'ZSP'.
TRANSLATE wa_t685t-vtext TO UPPER CASE.
wa_pricing_tab-vtext = wa_t685t-vtext.
ELSE.
wa_pricing_tab-vtext = 'NET INVOICE'.
ENDIF.
ENDIF.
APPEND wa_pricing_tab TO i_pricing_tab.
ENDIF."sy-subrc i_tkomv
ENDLOOP.
IF p_w_c_spart = '10'. "CF
*Check for the print indicators in T683S
DESCRIBE TABLE i_tkomv LINES ws_lines.
IF ws_lines NE 0.
SELECT kvewe kappl kalsm stunr zaehk kschl drukz
FROM t683s
INTO CORRESPONDING FIELDS OF TABLE i_t683s_1
FOR ALL ENTRIES IN i_tkomv
WHERE kschl = i_tkomv-kschl
AND drukz IN ('b', 'B')
AND kvewe NE ''
AND kappl NE ''
AND kalsm NE ''
AND stunr NE ''
AND zaehk NE ''.
ENDIF.
SORT i_t683s_1 BY stunr.
DELETE i_t683s_1 WHERE kschl NE 'ZGPL'
AND kschl NE 'ZGP2'
AND kschl NE 'ZGBP'
AND kschl NE 'ZGB2'
AND kschl NE 'ZIBP'
AND kschl NE 'ZIB2'.
CLEAR: wa_pricing_tab_1, ws_c_kawrt.
sort i_tkomv BY KSCHL KPOSN.
LOOP AT i_t683s_1 INTO wa_t683s_1.
CLEAR: wa_tkomv, wa_t685t.
READ TABLE i_tkomv INTO wa_tkomv WITH KEY kschl = wa_t683s_1-kschl kposn = p_w_c_posnr BINARY SEARCH.
IF sy-subrc = 0.
ws_c_kawrt = ws_c_kawrt + wa_tkomv-kawrt.
ENDIF."sy-subrc i_tkomv
ENDLOOP.
wa_pricing_tab_1-kposn = wa_tkomv-kposn.
wa_pricing_tab_1-kawrt = ws_c_kawrt.
APPEND wa_pricing_tab_1 TO i_pricing_tab_1.
ENDIF. "CF
ENDFORM. "f0001_fill_structure
-------------------------------------------------------------------------------