Skip to Content

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.

To report this post you need to login first.

1 Comment

You must be Logged on to comment or reply to a post.

  1. Mehmet Ozgur Unal

    Hello Csaba Soltesz ,

     

    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

     

    (0) 

Leave a Reply