Skip to Content
Author's profile photo Former Member

How to copy inactive or statistical pricing condition into downpayment items

Symptom

The pricing condition PR00 is marked as mandatory condition (T683S-KOBLI) in the pricing procedure (transaction V/08).
The same pricing procedure contains subsequent price conditions (conditions having Condition Class = B in V/06).

Due to the last price logic (see SAP note 836243) the PR00 price condition gets deactivated by one of the subsequent price conditions during SD document processing.

It means, KONV-KINAK / XKOMV-KINAK (condition inactive) is filled for PR00.

If you create a downpayment invoice, only the last active price condition is copied into the downpayment item and the deactivated PR00 condition is ignored. Since PR00 is a mandatory condition, the error message V1801 “Pricing error: Mandatory condition PR00 is missing” is displayed which hampers further activities.

Reason

It is the standard design of SAP system that inactive (KONV-KINAK) or statistical (KONV-KSTAT) conditions are not taken over into invoices having downpayment items.
For example billing type FAZ  has downpayment items.

The following source code is responsible for this behaviour:

FUNCTION PRICING_COPY

* By default, statistic and inactive conditions are not copied
* in downpayment positions. By setting U15_SUBRC to ‘1’ the
* copying is suppressed.
       if konvkstat ne ‘ ‘ or konvkinak ne ‘ ‘.
          u15_subrc = 1.
       endif.
     endif.

Solution

By using FORM USEREXIT_PRICING_COPY (RV61AFZA) you can easily change this behaviour and fulfill your requirement. Changing the field U15_SUBRC in the user exit achieves that statistical or inactive conditions are copied into downpayment items.

An example for the source code development:

USEREXIT_PRICING_COPY (RV61AFZA)

if ( konv-kstat ne ‘ ‘ or konv-kinak ne ‘ ‘ ) and amount_rule ca ’45’.

  u15_subrc = 0.

endif.

Assigned Tags

      1 Comment
      You must be Logged on to comment or reply to a post.
      Author's profile photo Mehmet Ozgur Unal
      Mehmet Ozgur Unal

      Hello Former Member ,

       

      Very informative document, i want to share an example code. It might be beneficial for developers.

      RV61AFZA - Userexit

      *---------------------------------------------------------------------*
      *       FORM USEREXIT_PRICING_COPY                                    *
      *---------------------------------------------------------------------*
      *       modify KONV before copying                                    *
      *---------------------------------------------------------------------*
      form userexit_pricing_copy.
       
      * the following example modifies the calculation rule within invoices
      * for condition type HD00
      *
      *   CHECK VBTYP_NEW CA VBTYP_FAKT.
      *   IF KONV-KSCHL = 'HD00'.
      *     KONV-KRECH = 'B'.
      *   ENDIF.
      *---------------------------------------------------------------------*
      *                ----Değişiklik - 1 ----
      * ZRK (Invoice correction request --> fiyat farkı sd sürecinde ,
      * referans faturadan kopyalanan koşullarda ZFIY net olarak revize,
      * edildi , ZRMP ve ZKDV dışındaki koşullar kopyalanmadı.
      
        "break ounal.
       
        data: lv_kposn like konv-kposn,
              lv_kposn_new like konv-kposn,
              lv_kschl  like konv-kschl,
              lv_kwert_old like konv-kwert,
              ls_konv like konv.
       
        data: ls_vbrp like vbrp,
              ls_vbrk like vbrk.
       
        data: lv_netpr type p decimals 2,
              lv_menge type p decimals 3,
              lv_netpr_new type p decimals 2.
       
        if vbtyp_new ca 'K'.
       
          clear: lv_kposn, lv_kschl, lv_kposn_new.
          lv_kposn = konv-kposn.
          lv_kschl = konv-kschl.
          lv_kposn_new = item_number_to.
       
          clear ls_konv.
          select single * into ls_konv from konv
                  where knumv eq konv-knumv
                    and kposn eq lv_kposn
                    and kschl between 'ZI01' and 'ZI99'.
       
          if sy-subrc = 0 and ls_konv is not initial.
            clear ls_vbrk.
            select single * into ls_vbrk from vbrk
                    where knumv eq konv-knumv.
       
            if sy-subrc = 0.
              clear ls_vbrp.
              select single * into ls_vbrp from vbrp
                      where vbeln = ls_vbrk-vbeln
                        and posnr = lv_kposn.
       
              if lv_kschl = 'ZFIY'.
                konv-kwert = ls_vbrp-netwr.
                konv-kbetr = ls_vbrp-netwr * 1000 * konv-kpein / ls_vbrp-fkimg.
              elseif lv_kschl = 'ZKDV' or lv_kschl = 'ZRMP'.
              elseif lv_kschl(2) = 'ZI'.
                u15_subrc = 4 .
              endif.
            endif.
          endif.
        endif.
       
      endform.                    "USEREXIT_PRICING_COPY 
      
      ---------------------------------------------------------------------

      Best Regards.

      M.Ozgur Unal