Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

BAPI_CONTRACT_CREATEFROMDATA document number

Former Member
0 Likes
847

Hello,

I'm using the function 'NUMBER_GET_NEXT' for obtaining the next contract document number from the sap system, and I'd like to use this document number with the function 'BAPI_CONTRACT_CREATEFROMDATA'. In other words I want to generate a contract with this function with the document number speficied by me. Is there any way to do that ?

Any help would be greatly appreciated. Thanks in advance.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
697

If you are using INTERNAL number range for Contract document type, why you want to determine next number and pass it to BAPI ? The value passed to BAPI parameter SALESDOCUMENTIN will have effect only if the document type number range is EXTERNAL other wise number will be determined by BAPI.

4 REPLIES 4
Read only

Former Member
0 Likes
698

If you are using INTERNAL number range for Contract document type, why you want to determine next number and pass it to BAPI ? The value passed to BAPI parameter SALESDOCUMENTIN will have effect only if the document type number range is EXTERNAL other wise number will be determined by BAPI.

Read only

0 Likes
697

Thank you for the quick answer, Vinod

I am trying to generate an ADRNR number with the function 'ADDR_NUMBER_GET', to populate the ADRC table with some data for the partner adresses.

This function uses the address_reference line where I need to update the APPL_KEY with sy-mandt + VBELN (concatenated). Well, the function successfully generates a document number, let's say 0040000333, but then the BAPI generates the next one, 0040000334.

If I uncomment SALESDOCUMENTIN and set it with the number given by the NUMBER_GET_NEXT FUNCTION, I get an error in the return table, wich tells me to use the external number range (in my case between 0045000000 and 0049999999).

Here's what I do:

call function 'NUMBER_GET_NEXT'

exporting

nr_range_nr = '09'

object = 'RV_BELEG'

quantity = '1'

" SUBOBJECT = 'AMBI'

  • TOYEAR = '0000'

  • IGNORE_BUFFER = ' '

importing

number = l_vbeln

  • QUANTITY =

  • RETURNCODE =

exceptions

interval_not_found = 1

number_range_not_intern = 2

object_not_found = 3

quantity_is_0 = 4

quantity_is_not_1 = 5

interval_overflow = 6

buffer_overflow = 7

others = 8

.

if sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

endif.

concatenate sy-mandt l_vbeln into wa_ref-appl_key.

move: 'VBUK' to wa_ref-appl_table,

'VBELN' to wa_ref-appl_field,

'SD01' to wa_ref-addr_group.

call function 'ADDR_NUMBER_GET'

exporting

address_handle = 'AG $00000'

address_reference = wa_ref

personal_address = ' '

  • NUMBERRANGE_NUMBER = '01'

  • E071K_WA =

  • GENERATE_TRANSPORT_ENTRIES =

  • OWNER = 'X'

  • TABLE_NAME =

  • FIELD_NAME =

  • OBJKEY =

importing

address_number = l_adrnr

  • RETURNCODE_NUMBERRANGE =

  • TABLES

  • E071K_TAB =

  • EXCEPTIONS

  • ADDRESS_HANDLE_NOT_EXIST = 1

  • INTERNAL_ERROR = 2

  • PARAMETER_ERROR = 3

  • OTHERS = 4

.

call function 'BAPI_CONTRACT_CREATEFROMDATA'

exporting

salesdocumentin = l_vbeln

contract_header_in = wa_bapihead

contract_header_inx = wa_bapiheadx

  • SENDER =

  • BINARY_RELATIONSHIPTYPE = ' '

  • INT_NUMBER_ASSIGNMENT = ' '

behave_when_error = 'P'

  • LOGIC_SWITCH =

  • testrun = 'X'

  • convert = 'X'

importing

salesdocument = l_sapdoc

tables

return = it_return

contract_items_in = it_bapiitem

contract_items_inx = it_bapiitemx

contract_partners = it_bapipartn

contract_conditions_in = it_bapicond

contract_conditions_inx = it_bapicondx

  • CONTRACT_CFGS_REF =

  • CONTRACT_CFGS_INST =

  • CONTRACT_CFGS_PART_OF =

  • CONTRACT_CFGS_VALUE =

  • CONTRACT_CFGS_BLOB =

  • CONTRACT_CFGS_VK =

  • CONTRACT_CFGS_REFINST =

contract_data_in = it_ctr_in

contract_data_inx = it_ctr_inx

  • CONTRACT_TEXT =

  • CONTRACT_KEYS =

" extensionin = it_extension

partneraddresses = it_bapiaddr

.

Edited by: adrian_marchis on Mar 30, 2011 10:27 AM

Read only

0 Likes
697

Check the Number range type (EXTERNAL/INERNAL) for the document type (Transaction VOV8). If the number range is defined as external (most probable in your case), you need to not generate the number using NUMBER_GET_NEXT. Instead of that you should pass the document number manually (within the range mentioned in number range) to the BAPI and the same can be used for function module ADDR_NUMBER_GET.

Read only

0 Likes
697

It seems that the function ADDR_NUMBER_GET works even without providing the document number in the appl_key concatenation (sy-mandt is sufficient), do the NUMBER_GET_NEXT function is not necesarry anymore. So the contract numbers are consecutive now.

Thank you for the ideeas.

concatenate sy-mandt l_vbeln into wa_refwa_ref-appl_key.

move: 'VBUK' to wa_ref-appl_table,

'VBELN' to wa_ref-appl_field,

'SD01' to wa_ref-addr_group.

call function 'ADDR_NUMBER_GET'

exporting

address_handle = 'AG $00000'

address_reference = wa_ref

personal_address = ' '

  • NUMBERRANGE_NUMBER = '01'

  • E071K_WA =

  • GENERATE_TRANSPORT_ENTRIES =

  • OWNER = 'X'

  • TABLE_NAME =

  • FIELD_NAME =

  • OBJKEY =

importing

address_number = l_adrnr

  • RETURNCODE_NUMBERRANGE =

  • TABLES

  • E071K_TAB =

  • EXCEPTIONS

  • ADDRESS_HANDLE_NOT_EXIST = 1

  • INTERNAL_ERROR = 2

  • PARAMETER_ERROR = 3

  • OTHERS = 4

.