Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Uukrul от Август 13, 2020, 06:45:26 pm

Название: Условия формирования цен в документах сбыта (SD)
Отправлено: Uukrul от Август 13, 2020, 06:45:26 pm
CALL FUNCTION 'RV_INVOICE_DOCUMENT_READ' - Чтение данных документа инвойса сбыта
CALL FUNCTION 'RV_KONV_SELECT' - Чтение схемы расчета цены для документа

В общем понадобилось прочитать схему формирования цены из документа сбыта, точнее фактуры. Можно конечно это было сделать и самому, пошуршав по таблицам, но как-то если не требуется какая-то быстрота, то зачем же уставать? Тем более что функции быть должны. Почему-то они есть но вот с работой их возникли интересные вещи. Например для чтения параметров счета сбыта используется модуль RV_INVOICE_DOCUMENT_READ у которого в параметрах запуска есть галка KONV_READ, которая теоретически говорит модулю читать и позиции расчета условий цены и даже, что интересно в тестовом режиме модуля это все работает и таблица XKOMV содержит данные расчета цены, однако при вызове из программы данная таблица возвращается пустой. Немного покопавшись по использованию данного модуля нашел, что бойцы из сапа условия расчета цены сами получают в два шага, сначала используют данный модуль, чтобы получить номер условия документа, а уже затем вызывают еще один модуль чтения схемы расчета RV_KONV_SELECT. В общем то данную связку можно использовать для чтения условий расчета цены для любых документов, т.е. обычно в заголовке любого документа, в котором существует схема расчета цены, есть поле номер условия цены для документа, что-то типа KNUMV. Далее, имея данное поле, можно получить схему расчета.

Для документов фактурирования сбыта, это выглядит где-то следующим образом:
Код: You are not allowed to view links. Register or Login
    DATA: ls_vbrk   TYPE vbrk,
          ls_vbrk_e TYPE vbrk,
          ls_vbuk_e TYPE vbuk,
          ls_komk   TYPE komk,
          lt_xkomv  TYPE STANDARD TABLE OF komv,
          lt_xvbpa  TYPE STANDARD TABLE OF vbpavb,
          lt_xvbrk  TYPE STANDARD TABLE OF vbrkvb,
          lt_xvbrp  TYPE STANDARD TABLE OF vbrpvb.

        ls_vbrk-vbeln = <Номер документа фактуры сбьта>.
        CALL FUNCTION 'RV_INVOICE_DOCUMENT_READ'
          EXPORTING
            vbrk_i       = ls_vbrk
          IMPORTING
            vbrk_e       = ls_vbrk_e
            vbuk_e       = ls_vbuk_e
          TABLES
            xkomv        = lt_xkomv
            xvbpa        = lt_xvbpa
            xvbrk        = lt_xvbrk
            xvbrp        = lt_xvbrp
          EXCEPTIONS
            no_authority = 1
            OTHERS       = 2.
        IF sy-subrc = 0.
          MOVE: ls_vbrk_e-vbeln TO ls_komk-belnr,
                ls_vbrk_e-knumv TO ls_komk-knumv.
          CALL FUNCTION 'RV_KONV_SELECT'
            EXPORTING
              comm_head_i  = ls_komk
              general_read = abap_true
            TABLES
              tkomv        = lt_xkomv.  “<--- Позиции расчета цены
        ENDIF.

PS: Еще раз, как примечание, если знать номер условия расчета цен для документа, а обычно это поле есть в заголовке любого документа, как сбыта так и наверное это правило верно и для того же заказа ММ, то функцией RV_KONV_SELECT, можно получить схему расчета для любого документа системы, так как код расчета цены тот же, независимо от того, в какой функциональности используется калькуляция.