CALL FUNCTION 'RV_INVOICE_DOCUMENT_READ' - Чтение данных документа инвойса сбыта
CALL FUNCTION 'RV_KONV_SELECT' - Чтение схемы расчета цены для документа
В общем понадобилось прочитать схему формирования цены из документа сбыта, точнее фактуры. Можно конечно это было сделать и самому, пошуршав по таблицам, но как-то если не требуется какая-то быстрота, то зачем же уставать? Тем более что функции быть должны. Почему-то они есть но вот с работой их возникли интересные вещи. Например для чтения параметров счета сбыта используется модуль RV_INVOICE_DOCUMENT_READ у которого в параметрах запуска есть галка KONV_READ, которая теоретически говорит модулю читать и позиции расчета условий цены и даже, что интересно в тестовом режиме модуля это все работает и таблица XKOMV содержит данные расчета цены, однако при вызове из программы данная таблица возвращается пустой. Немного покопавшись по использованию данного модуля нашел, что бойцы из сапа условия расчета цены сами получают в два шага, сначала используют данный модуль, чтобы получить номер условия документа, а уже затем вызывают еще один модуль чтения схемы расчета RV_KONV_SELECT. В общем то данную связку можно использовать для чтения условий расчета цены для любых документов, т.е. обычно в заголовке любого документа, в котором существует схема расчета цены, есть поле номер условия цены для документа, что-то типа KNUMV. Далее, имея данное поле, можно получить схему расчета.
Для документов фактурирования сбыта, это выглядит где-то следующим образом:
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, можно получить схему расчета для любого документа системы, так как код расчета цены тот же, независимо от того, в какой функциональности используется калькуляция.