Age: 46 Joined: 05 Nov 2007 Posts: 725 Location: КраснАдар
Posted: Thu Oct 07, 2010 4:34 pm Post subject: "Исправление" курса валют в park счете ММ
Преамбула:
Согласно ноте Note 396051 - FAQ: Parking in the logistics invoice verification имеем следующее правило:
Quote:
You can no longer change an existing exchange rate for parked invoice documents with invoice items.
As long as no invoice items exist in the invoice entry, the exchange rate in the invoice document header is determined in following sequence:
- If you fixed an exchange rate in the purchase order, this exchange rate is used for the determination of the local currency amounts.
- If you entered an exchange rate in the invoice document header, this exchange rate is used for the determination of the local currency amounts.
- If you neither fixed an exchange rate in the purchase order nor entered an exchange rate in the invoice document header, the system determines the exchange rate defined in Customizing of financial accounting valid for the posting date.
If a parked invoice document contains invoice items, the exchange rate can no longer be changed. If reference is made to a purchase order with fixed exchange rate during further processing of a parked invoice document, the fixed exchange rate is copied to the invoice document header.
То есть курс пересчитывается на дату пересчета, равную дате проводки плюс дни из условия платежа, но только до присвоения любой позиции фактуре. После этого поля валюта и курс закрываются для ввода. Изменить курс можно только после удаления всех позиций.
Короче, процедура удручает. Особенно при использовании EDI. Курс рассчитывается на дату получения IDOC, а право собственности - только после получения товара на таможне (какая-то фича законодательства).
Фабула:
Скопировать данные предварительно зарегистрированного счета в новый с указанием нужной даты проводки для корректного расчета курса и последующей проводки в FI.
Code:
*& Report ZMMA_INVOICE_EDI_RECREATE
*&
*&---------------------------------------------------------------------*
*& EDI счет после предварительной регистрации не пересчитывает курс
*& при изменении даты проводки.
*& Решение: создавать новый счет на основе данных раннее зарегистр.,
*& но с новой датой проводки и определение курса на эту дату.
*& При успешной регистрации - предыдущий счет удаляется
*&
*& Программа использует стандартные метода БО BUS2081
*& GetDetail BAPI_INCOMINGINVOICE_GETDETAIL
*& ParkFromData BAPI_INCOMINGINVOICE_PARK
*& DeleteSingle BAPI_INCOMINGINVOICE_DELETE
*&---------------------------------------------------------------------*
REPORT zmma_invoice_edi_recreate.
INCLUDE <cntn01>.
DATA: invoice_edi TYPE swc_object,
objkey TYPE swo_typeid,
invoice_new TYPE swc_object,
invoice_obj LIKE swotobjid.
DATA: old_headerdata TYPE bapi_incinv_detail_header,
old_addressdata TYPE bapi_incinv_detail_addressdata,
old_itemdata TYPE TABLE OF bapi_incinv_detail_item
WITH HEADER LINE,
old_accountingdata TYPE TABLE OF bapi_incinv_detail_account
WITH HEADER LINE,
old_glaccountdata TYPE TABLE OF bapi_incinv_detail_gl_account
WITH HEADER LINE,
old_materialdata TYPE TABLE OF bapi_incinv_detail_material
WITH HEADER LINE,
old_taxdata TYPE TABLE OF bapi_incinv_detail_tax
WITH HEADER LINE,
old_withtaxdata TYPE TABLE OF bapi_incinv_detail_withtax
WITH HEADER LINE,
old_vendoritemsplitdata TYPE TABLE OF bapi_incinv_detail_vendorsplit
WITH HEADER LINE,
return TYPE TABLE OF bapiret2.
DATA: new_headerdata TYPE bapi_incinv_create_header,
new_addressdata TYPE bapi_incinv_create_addressdata,
new_itemdata TYPE TABLE OF bapi_incinv_create_item
WITH HEADER LINE,
new_accountingdata TYPE TABLE OF bapi_incinv_create_account
WITH HEADER LINE,
new_glaccountdata TYPE TABLE OF bapi_incinv_create_gl_account
WITH HEADER LINE,
new_materialdata TYPE TABLE OF bapi_incinv_create_material
WITH HEADER LINE,
new_taxdata TYPE TABLE OF bapi_incinv_create_tax
WITH HEADER LINE,
new_withtaxdata TYPE TABLE OF bapi_incinv_create_withtax
WITH HEADER LINE,
new_vendoritemsplitdata TYPE TABLE OF bapi_incinv_detail_vendorsplit
WITH HEADER LINE.
PARAMETERS: p_belnr LIKE rbkp-belnr,
p_gjahr LIKE rbkp-gjahr,
p_budat LIKE rbkp-budat.
DEFINE transfer_data.
loop at &1.
move-corresponding &1 to &2.
append &2.
endloop.
END-OF-DEFINITION.
START-OF-SELECTION.
IF p_budat IS INITIAL.
MESSAGE 'Укажите дату для определения курса'(001) TYPE 'S'
DISPLAY LIKE 'E'.
EXIT.
ENDIF.
" Создаем ключ, формируем инстанцию и проверяем на наличие объекта
CONCATENATE p_belnr p_gjahr INTO objkey.
swc_create_object invoice_edi 'BUS2081' objkey.
swc_call_method invoice_edi 'ExistenceCheck' swo_%container.
IF sy-subrc <> 0.
MESSAGE 'Укажите корректный номер фактуры'(002) TYPE 'S'
DISPLAY LIKE 'E'.
EXIT.
ENDIF.
" Считываем данные в контейнер
swc_container old_container.
swc_call_method invoice_edi 'GetDetail' old_container.
CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
TABLES
i_bapiret2_tab = return.
" Проверяем на последующие документы
IF old_headerdata-invoice_status <> 'A'. " Предв.регистр.
MESSAGE 'Документ недоступен для обработки'(003) TYPE 'S'
DISPLAY LIKE 'E'.
EXIT.
ENDIF.
" Перекидываем данные в новый контейнер
MOVE-CORRESPONDING:
old_headerdata TO new_headerdata,
old_addressdata TO new_addressdata.
transfer_data:
old_itemdata new_itemdata,
old_accountingdata new_accountingdata,
old_glaccountdata new_glaccountdata,
old_materialdata new_materialdata,
old_taxdata new_taxdata,
old_withtaxdata new_withtaxdata,
old_vendoritemsplitdata new_vendoritemsplitdata.
swc_get_object_key invoice_new objkey.
MESSAGE i251(m8) WITH objkey(10).
" Удаляем родительский счет
IF objkey IS NOT INITIAL.
swc_call_method invoice_edi 'DeleteSingle' old_container.
swc_object_to_persistent invoice_edi invoice_obj.
swc_free_object invoice_edi.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
Данный код будет полезен также будущим воркфлошникам.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.