To get pricing condition of a Sales Order

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

-------------------------------------------------------------------------------

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.