Работа с программами пользователя

 

Обновление потока документов

Общее фактурируемое количество переносится в последовательный файл. Ранее отфактурированные количества обрабатываются в системе R/3. На этот процесс оказывают воздействие программы пользователя. В системе они непосредственно влияют на обновление сжатого потока документов VBAPF. В этом потоке документов ранее отфактурированные количества собираются и сравниваются с новыми объемами, подлежащими фактурированию. Затем создается новый документ фактуры с таким количеством:

фактурируемое количество = новое количество - отфактурированное количество.

Использование программ пользователя позволяет указать коды, под которыми должны храниться записи сжатого потока документов.

Для общего интерфейса фактурирования предусмотрены следующие программы пользователя:

Программа пользователя

Описание

Таблица VBAPFZZ

Для добавления к таблице VBAPF особых ключевых полей клиента

Отчет RV45PFZZ

Для добавления к внутренней рабочей таблице FXVBAPF особых ключевых полей клиента из VBRK

Отчет RV60AFZA

Для добавления значений в особые ключевые поля клиента из структуры интерфейса XKOMFKGN или из сторно VBRK в перечень полей XVBAPF_KEY

 

Использование программ пользователя в R/3 IS-H показано на примере, приведенном ниже.

На 30 июня для счета клиента 4711 ( VBELN ) за пребывание в больнице составляется промежуточный расчет за 10 дней ( KWMENGE ).

Плательщик 'AOK Insurance' дает согласие на выплату 30% (=3 дням), а пациент 122 принимает на себя функции второго плательщика и выплачивает остальные 70% (=7 дням). При этом создаются следующие документы фактуры:

 

На 30 июля составляется полный расчет за общее время пребывания клиента в больнице в течение 20 дней.

Без использования программ пользователя

В ходе выполнения программы в сжатом потоке документов ( VBAPF ) создается запись по кумулятивному количеству, ранее отфактурированному из промежуточного платежа (равного 10 дням).

 

При окончательном расчете плательщику 'AOK Insurance' выставляется счет-фактура за 6 дней (30% от 20 дней). В сжатом потоке документов ( VBAPF ) 10 дней отображены как отфактурированные: в потоке документов, не содержащем плательщика как ключевое поле, невозможно выполнить процентное разделение.

Для плательщика 'AOK Insurance' создается новый документ фактуры 3 с фактурируемым количеством –4:

 

 

 

С использованием программ пользователя

Для получения правильного результата необходимо, чтобы в потоке документов ( VBAPF ) учитывалось ранее отфактурированное количество плательщика. С этой целью следует выполнить соответствующие настройки для таких программ пользователя:

Операция

Конфигурация

Таблица VBAPFZZ

 

® SE11

Имя объекта: таблица VBAPFZZ

 

Удалить существующие поля

 

Добавить поле KUNRG с элементом данных KUNRG

Отчет RV45PFZZ

FORM USEREXIT_FXVBAPF_KEY

® SE38

MOVE VBRK_KUNRG TO FXVBAPF-KUNRG

 

ENDFORM

Отчет RV60AFZA

FORM USEREXIT_XVBAPF_KEY

® SE38

MOVE XKOMFKGN-KUNRG TO XVBAPF_KEY-KUNRG

 

ENDFORM

 

FORM USEREXIT_XVBAPF_KEY_CANC

 

MOVE XKOMFKGN-KUNRG TO XVBAPF_KEY-KUNRG

 

ENDFORM

 

В ходе выполнения программы в сжатом потоке документов создаются две записи с кумулятивным количеством, отфактурированным из промежуточного платежа (=10 дням) .

При окончательном расчете плательщику 'AOK Insurance' выставляется счет-фактура за 6 дней (30% от 20 дней). В соответствии с параметром настройки в программах пользователя для плательщика ( KUNRG ) 3 дня отображаются в сжатом потоке документов ( VBAPF) как отфактурированные. Для плательщика 'AOK Insurance' создается новый документ фактуры 4 с фактурируемым количеством 3:

фактурируемое количество = фактурируемое количество из KOMFKGN - отфактурированное количество из VBAPF:

6 дней - 3 дня = 3 дня.

 

Добавление новых функций партнера

Для существующих в стандартной системе функций партнера (таких, как заказчик, получатель материала, получатель счета-фактуры, плательщик) можно определить новые.

Скопируйте новую функцию партнера "представительский номер" из интерфейса.

Отчет RV60AFZA используется в качестве программы пользователя:

FORM USEREXIT_AVBPAK_ADD

MOVE "VE" TO AVBPAK-PARVW

IF NOT XKOMFKGN-VRTNR IS INITIAL

AVBPAK-PERNR=XKOMFKGN-VRTRNR

ENDIF

APPEND AVBPAK

Однако это еще не позволяет использовать программы пользователя для обновления потока документов новыми функциями партнера.

См. также

тему по обновлению потока документов в разделе Работа с программами пользователя.

Отклонение адресных данных разового клиента

Для обработки отклонений адресных данных разового клиента в разных функциях партнера с использованием общего интерфейса фактурирования необходимо модифицировать INCLUDE структуру KOMFKZZ в соответствии со структурой таблицы KOMFKGN и программу пользователя USEREXIT_AVBPAK_CPD (отчет RV60AFZB).

При этом существуют следующие ограничения:

● заказчик (функция партнера AG ) должен быть разовым клиентом;

● получатель счета (функция партнера AG ) также должен быть разовым клиентом;

● программа пользователя USEREXIT_AVBPAK_CPD используется только как предложенная стандартной системой.

Другой пример:

● заказчик является разовым клиентом;

● разовый адрес действителен как для заказчика, так и для получателя счета, независимо от того, являются ли партнеры разовыми клиентами;

● заказчик материала имеет другой разовый адрес;

● в таком случае образец-отчет RVAFS01, при помощи которого создается последовательный файл, будет содержать следующие коды:

 

* Поля разового клиента

WA_KOMFKGN-CPD_PARVW1

=

'AG'

WA_KOMFKGN-CPD_PARVW2

=

'RE'

WA_KOMFKGN-CPD-ANRED

=

'Mr'

WA_KOMFKGN-NAME1 (длина 30)

=

'FIRST_CPD_NAME'

WA_KOMFKGN-LAND1

=

'US'

WA_KOMFKGN-PSTLZ

=

‘99999’

WA_KOMFKGN-ORT01

 

'New York'

 

* Другой адрес - получатель материала (разовый клиент)

WA_KOMFKGN-WE_PARVW

=

'WE'

WA-KOMFKGN-WE_ANRED

=

'Ms'

WA_KOMFKGN-WE_NAME1 (длина 30)

=

SECOND_CPD_NAME

WA-KOMFKGN-WE_LAND1

=

'US'

WA_KOMFKGN-WE_PSTLZ

=

‘9999’

WA_KOMFKGN-WE_ORT01

=

'Boston'

 

TRANSFER WA_KOMFKGN TO DS_NAME1

...

...

...

● в документе фактуры появятся следующие функции партнера:

Документ фактуры FX

 

Функция партнера ID

Партнер

Название

AG

Заказчик

ODL-CPD

FIRST_CPD_NAME

RE

Получатель счета

ODL

FIRST_CPD_NAME

RG

Плательщик

ODL

Адрес из основной записи клиента

WE

Получатель материала

ODL-CPD

SECOND_CPD_NAME

 

Чтобы добавить другой разовый адрес для всех партнеров, не являющихся заказчиками, необходимо изменить программу пользователя.

Другой пример:

* Поля разового клиента

WA_KOMFKGN-CPD_PARVW1

=

'AG'

WA_KOMFKGN-CPD_ANRED

=

'Mr'

WA_KOMFKGN-NAME1 (длина 30)

=

'FIRST_CPD_NAME'

WA_KOMFKGN-LAND1

=

'US'

WA_KOMFKGN-PSTLZ

=

‘99999’

WA_KOMFKGN-ORT01

=

'New York'

 

* Другой адрес - получатель материала (разовый клиент)

WA_KOMFKGN-WE_PARVW

=

'XX' (напр. 'RE', 'WE' и т.д.)

WA-KOMFKGN-WE_ANRED

=

'Ms'

WA_KOMFKGN-WE_NAME1 (длина 30)

=

'SECOND_CPD_NAME'

WA-KOMFKGN-WE_LAND1

=

'CH'

WA_KOMFKGN-WE_PSTLZ

=

‘9999’

WA_KOMFKGN-WE_ORT01

=

'Basel'

 

TRANSFER WA_KOMFKGN TO DS_NAME1

...

...

...

Документ фактуры FX

 

Функция партнера ID

Партнер

Название

AG

Заказчик

ODL-CPD

FIRST_CPD_NAME

RE

Получатель счета

ODL

SECOND_CPD_NAME

RG

Плательщик

ODL

SECOND_CPD_NAME

WE

Получатель материала

ODL-CPD

SECOND_CPD_NAME

 

Программа пользователя RV60AFZB имеет следующий вид (изменения можно внести, используя символ '*' в начале строки):

 

FORM USEREXIT_AVBPAK_CPD

IF XKOMFKGN-WE_PARVW NE SPACE

LOOP AT AVBPAK

LOOP AT AVBPAK WHERE PARVW EQ XKOMFKGN-WE_PARVW

MOVE '00000000'TO AVBPAK-ADRNR.

MOVE AVBPAK-PARVWTO AVBPAK-ADRNR(2).

MOVE XKOMFKGN-WE_PARVWTO AVBPAK-ADRNR(2).

MOVE 'B' TO AVBPAK-ADRDA.

MOVE 'X' TO AVBPAK-XCPDK.

MODIFY AVBPAK.

ENDLOOP.

CLEAR XVBADR.

MOVE '0000000'TO XVBADR-ADRNR.

MOVE AVBPAK-PARVWTO XVBADR-ADRNR(2).

MOVE XKOMFKGN-WE_PARVWTO XVBADR-ADRNR(2).

MOVE XKOMFKGN-WE_ANREDTO XVBADR-ANRED.

MOVE XKOMFKGN-WE_NAME1TO XVBADR-NAME1.

MOVE XKOMFKGN-WE_PSTLZTO XVBADR-PSTLZ.

MOVE XKOMFKGN-WE_ORT01TO XVBADR-ORT01.

MOVE XKOMFKGN-WE_LAND1TO XVBADR-LAND1.

APPEND XVBADR.

* Fehlerprotokoll (Error log) - журнал ошибок

*

PERFORM GN_CPD_CHECK USINGSY-SUBRC

XKOMFKGN-WE_LAND1

XKOMFKGN-WE_NAME1

XKOMFKGN-WE_PSTLZ

XKOMFKGN-WE_ORT01.

*

IF SY-SUBRC NE 0.

EXIT.

ENDIF.

ENDLOOP.

*

ENDIF.

ENDFORM.