Skip to content

Instantly share code, notes, and snippets.

@Odomontois
Created October 29, 2012 14:48
Show Gist options
  • Save Odomontois/3973960 to your computer and use it in GitHub Desktop.
Save Odomontois/3973960 to your computer and use it in GitHub Desktop.
ABAP деривация ФМ из карточки договора
class ZCL_IM_RCM_ME_GUI_PO definition
public
final
create public .
public section.
*"* public components of class ZCL_IM_RCM_ME_GUI_PO
*"* do not include other source files here!!!
interfaces IF_EX_ME_GUI_PO_CUST .
constants ELEMENT_HEADER type STRING value 'HEADER'. "#EC NOTEXT
constants ELEMENT_ITEM type STRING value 'ITEM'. "#EC NOTEXT
protected section.
*"* protected components of class ZCL_IM_RCM_ME_GUI_PO
*"* do not include other source files here!!!
data HEADER_CNTR_DATA type ZSRCM_ME_GUI_CUSTM .
private section.
*"* private components of class ZCL_IM_RCM_ME_GUI_PO
*"* do not include other source files here!!!
ENDCLASS.
CLASS ZCL_IM_RCM_ME_GUI_PO IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_GUI_PO->IF_EX_ME_GUI_PO_CUST~EXECUTE
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_NAME TYPE MEPO_NAME
* | [--->] IM_MODEL TYPE REF TO IF_MODEL_MM
* | [--->] IM_FCODE TYPE SY-UCOMM
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_GUI_PO_CUST~EXECUTE.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_GUI_PO->IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS
* +-------------------------------------------------------------------------------------------------+
* | [<-->] CH_MAPPING TYPE MMPUR_DYNPRO_FIELDS
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS.
DATA ls_mapping LIKE LINE OF ch_mapping.
LOOP AT ch_mapping INTO ls_mapping.
CASE ls_mapping-fieldname .
WHEN zcl_rcm_ptdo_const=>custm_po_field-header-contract_num-name .
ls_mapping-metafield = zcl_rcm_ptdo_const=>custm_po_field-header-contract_num-meta.
WHEN OTHERS.
ENDCASE.
MODIFY ch_mapping FROM ls_mapping.
ENDLOOP.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_GUI_PO->IF_EX_ME_GUI_PO_CUST~SUBSCRIBE
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_APPLICATION TYPE STRING40
* | [--->] IM_ELEMENT TYPE STRING40
* | [<-()] RE_SUBSCRIBERS TYPE MEPO_T_SUBSCRIBERS
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_GUI_PO_CUST~SUBSCRIBE.
DATA ls_subscriber LIKE LINE OF re_subscribers.
CASE im_element.
WHEN element_header.
ls_subscriber-dynpro = zcl_rcm_ptdo_const=>custm_po_field-header-screen .
ls_subscriber-height = 2.
ls_subscriber-label = 'Данные договора'(T01).
ls_subscriber-name = zcl_rcm_ptdo_const=>custm_po_field-header-tab_id .
ls_subscriber-position = 50.
ls_subscriber-program = zcl_rcm_ptdo_const=>custm_po_field-report_id .
ls_subscriber-struct_name = zcl_rcm_ptdo_const=>custm_po_field-header-struct_name .
INSERT ls_subscriber INTO TABLE re_subscribers.
ENDCASE.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_GUI_PO->IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_NAME TYPE MEPO_NAME
* | [--->] IM_FCODE TYPE SY-UCOMM
* | [<-()] RE_CHANGED TYPE MMPUR_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP.
CALL FUNCTION 'ZRCM_MEGUI_EX_GET_HEADER_DATA'
IMPORTING
data = me->header_cntr_data " Поля интеграции с системой договоров
changed = re_changed. " Поля интеграции с системой договоров
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_GUI_PO->IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_NAME TYPE MEPO_NAME
* | [--->] IM_MODEL TYPE REF TO IF_MODEL_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_gui_po_cust~transport_from_model.
DATA ls_header_data TYPE mepoheader.
DATA li_header_model TYPE REF TO if_purchase_order_mm.
mmpur_dynamic_cast li_header_model im_model .
CASE im_name .
WHEN zcl_rcm_ptdo_const=>custm_po_field-header-tab_id .
CHECK li_header_model IS BOUND.
ls_header_data = li_header_model->get_data( ).
me->header_cntr_data-contract_num = ls_header_data-zzdognr.
ENDCASE.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_GUI_PO->IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_NAME TYPE MEPO_NAME
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP.
CALL FUNCTION 'ZRCM_MEGUI_EX_SET_HEADER_DATA'
EXPORTING
data = me->header_cntr_data.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_GUI_PO->IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_NAME TYPE MEPO_NAME
* | [--->] IM_MODEL TYPE REF TO IF_MODEL_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_gui_po_cust~transport_to_model.
DATA ls_header_data TYPE mepoheader.
DATA li_header_model TYPE REF TO if_purchase_order_mm.
mmpur_dynamic_cast li_header_model im_model .
CASE im_name .
WHEN zcl_rcm_ptdo_const=>custm_po_field-header-tab_id .
CHECK li_header_model IS BOUND.
ls_header_data = li_header_model->get_data( ).
ls_header_data-zzdognr = me->header_cntr_data-contract_num.
li_header_model->set_data( ls_header_data ).
ENDCASE.
ENDMETHOD.
ENDCLASS.
class ZCL_IM_RCM_ME_PROCESS_PO definition
public
final
create public .
public section.
*"* public components of class ZCL_IM_RCM_ME_PROCESS_PO
*"* do not include other source files here!!!
interfaces IF_BADI_INTERFACE .
interfaces IF_EX_ME_PROCESS_PO_CUST .
constants TRTYP_CREATION type TRTYP value 'H'. "#EC NOTEXT
protected section.
*"* protected components of class ZCL_IM_RCM_ME_PROCESS_PO
*"* do not include other source files here!!!
data IMPORT_CNTR_DATA type ABAP_BOOL .
methods CHECK_ZZDOGNR_IS_NOT_INITIAL
importing
!IM_HEADER type ref to IF_PURCHASE_ORDER_MM .
methods DERIVE_CONTRACT_FM_CODING
importing
!HEADER type ref to IF_PURCHASE_ORDER_MM .
methods IMPORT_CREATION_DATA
importing
!HEADER type ref to IF_PURCHASE_ORDER_MM .
private section.
*"* private components of class ZCL_IM_RCM_ME_PROCESS_PO
*"* do not include other source files here!!!
data DERIVED_CONTRACT type ZIF_RCM_CONST=>TD_CONTRACT_NUM .
ENDCLASS.
CLASS ZCL_IM_RCM_ME_PROCESS_PO IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_IM_RCM_ME_PROCESS_PO->CHECK_ZZDOGNR_IS_NOT_INITIAL
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD check_zzdognr_is_not_initial.
DATA: ls_mepoheader TYPE mepoheader,
lv_dummy TYPE c LENGTH 128.
INCLUDE mm_messages_mac. "useful macros for message handling
*---------------------------------------------------------------------*
* here we check customers data
*---------------------------------------------------------------------*
ls_mepoheader = im_header->get_data( ).
IF ls_mepoheader-lifnr IS NOT INITIAL AND
ls_mepoheader-zzdognr IS INITIAL.
mmpur_metafield mmmfd_cust_09.
MESSAGE e026(z000) INTO lv_dummy.
mmpur_message sy-msgty sy-msgid sy-msgno
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* invalidate the object
* CALL METHOD im_header->invalidate( ).
ENDIF.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_IM_RCM_ME_PROCESS_PO->DERIVE_CONTRACT_FM_CODING
* +-------------------------------------------------------------------------------------------------+
* | [--->] HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD derive_contract_fm_coding.
DATA ls_item TYPE purchase_order_item.
DATA ls_item_data TYPE mepoitem.
DATA lt_items TYPE purchase_order_items.
DATA lt_accountings TYPE purchase_order_accountings.
DATA ls_accounting TYPE purchase_order_accounting.
DATA ls_accounting_data TYPE mepoaccounting.
lt_items = header->get_items( ).
LOOP AT lt_items INTO ls_item.
ls_item_data = ls_item-item->get_data( ).
CHECK header->get_data( )-zzdognr NE me->derived_contract.
derived_contract = header->get_data( )-zzdognr.
lt_accountings = ls_item-item->get_accountings( ).
CALL METHOD zcl_rcm_cobl_cntr_extend=>get_contract_budget_coding
EXPORTING
cntr_num = header->get_data( )-zzdognr
fipos_type = zcl_rcm_ptdo_const=>fipos_type_credit
IMPORTING
commit_item = ls_item_data-fipos
funds_center = ls_item_data-fistl.
ls_item-item->set_data( ls_item_data ).
LOOP AT lt_accountings INTO ls_accounting.
ls_accounting_data = ls_accounting-accounting->get_data( ).
ls_accounting_data-fipos = ls_item_data-fipos.
ls_accounting_data-fistl = ls_item_data-fistl.
ls_accounting-accounting->set_data( ls_accounting_data ).
ENDLOOP.
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~CHECK
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [--->] IM_HOLD TYPE MMPUR_BOOL
* | [--->] IM_PARK TYPE MMPUR_BOOL(optional)
* | [<-->] CH_FAILED TYPE MMPUR_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~CHECK.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~CLOSE
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~CLOSE.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [--->] IM_INITIATOR TYPE MEPO_INITIATOR(optional)
* | [<-->] CH_FIELDSELECTION TYPE TTYP_FIELDSELECTION_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~fieldselection_header.
DATA ls_fieldsel LIKE LINE OF ch_fieldselection.
LOOP AT ch_fieldselection INTO ls_fieldsel.
CASE ls_fieldsel-metafield.
WHEN zcl_rcm_ptdo_const=>custm_po_field-header-contract_num-meta.
IF im_header->is_changeable( ) IS NOT INITIAL .
ls_fieldsel-fieldstatus = '+'.
ELSE.
ls_fieldsel-fieldstatus = '-'.
ENDIF.
WHEN OTHERS.
ENDCASE.
MODIFY ch_fieldselection FROM ls_fieldsel.
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER_REFKEYS
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [<-->] CH_KEY0 TYPE BREFN
* | [<-->] CH_KEY1 TYPE BREFN
* | [<-->] CH_KEY2 TYPE BREFN
* | [<-->] CH_KEY3 TYPE BREFN
* | [<-->] CH_KEY4 TYPE BREFN
* | [<-->] CH_KEY5 TYPE BREFN
* | [<-->] CH_KEY6 TYPE BREFN
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~fieldselection_header_refkeys.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [--->] IM_ITEM TYPE REF TO IF_PURCHASE_ORDER_ITEM_MM
* | [<-->] CH_FIELDSELECTION TYPE TTYP_FIELDSELECTION_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~fieldselection_item.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM_REFKEYS
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_ITEM TYPE REF TO IF_PURCHASE_ORDER_ITEM_MM
* | [<-->] CH_KEY0 TYPE BREFN
* | [<-->] CH_KEY1 TYPE BREFN
* | [<-->] CH_KEY2 TYPE BREFN
* | [<-->] CH_KEY3 TYPE BREFN
* | [<-->] CH_KEY4 TYPE BREFN
* | [<-->] CH_KEY5 TYPE BREFN
* | [<-->] CH_KEY6 TYPE BREFN
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM_REFKEYS.
.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~INITIALIZE
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~initialize.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~OPEN
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_TRTYP TYPE TRTYP
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [<-->] CH_VALID TYPE MMPUR_BOOL
* | [<-->] CH_DISPLAY_ONLY TYPE MMPUR_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~open.
DATA ls_header TYPE mepoheader.
IF im_trtyp EQ trtyp_creation.
me->import_cntr_data = abap_true.
ENDIF.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~POST
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_EBELN TYPE EBELN
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~post.
DATA ld_fistl TYPE fistl.
DATA ld_fipos TYPE fipos.
DATA lt_items TYPE purchase_order_items.
DATA ls_item LIKE LINE OF lt_items.
DATA ls_item_data TYPE mepoitem.
CALL METHOD zcl_rcm_cobl_cntr_extend=>get_contract_budget_coding
EXPORTING
cntr_num = im_header->get_data( )-zzdognr
IMPORTING
commit_item = ld_fipos
funds_center = ld_fistl.
lt_items = im_header->get_items( ).
LOOP AT lt_items INTO ls_item.
ls_item_data = ls_item-item->get_data( ).
ls_item_data-fipos = ld_fipos.
ls_item_data-fistl = ld_fistl.
ls_item-item->set_data( ls_item_data ).
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~PROCESS_ACCOUNT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_ACCOUNT TYPE REF TO IF_PURCHASE_ORDER_ACCOUNT_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~PROCESS_ACCOUNT.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~process_header.
import_creation_data( im_header ).
derive_contract_fm_coding( im_header ).
" Перенесено из класса ZCL_IM__PO_CUST
check_zzdognr_is_not_initial( im_header ).
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_ITEM TYPE REF TO IF_PURCHASE_ORDER_ITEM_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~process_item.
* DATA ld_fistl TYPE fistl.
* DATA ld_fipos TYPE fipos.
* DATA ls_item_data TYPE mepoitem.
*
* CALL METHOD zcl_rcm_cobl_cntr_extend=>get_contract_budget_coding
* EXPORTING
* cntr_num = im_item->get_header( )->get_data( )-zzdognr
* IMPORTING
* commit_item = ld_fipos
* funds_center = ld_fistl.
* CHECK ld_fipos IS NOT INITIAL OR ld_fistl IS NOT INITIAL.
*
* ls_item_data = im_item->get_data( ).
* ls_item_data-fipos = ld_fipos.
* ls_item_data-fistl = ld_fistl.
* im_item->set_data( ls_item_data ).
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IM_RCM_ME_PROCESS_PO->IF_EX_ME_PROCESS_PO_CUST~PROCESS_SCHEDULE
* +-------------------------------------------------------------------------------------------------+
* | [--->] IM_SCHEDULE TYPE REF TO IF_PURCHASE_ORDER_SCHEDULE_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~PROCESS_SCHEDULE.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_IM_RCM_ME_PROCESS_PO->IMPORT_CREATION_DATA
* +-------------------------------------------------------------------------------------------------+
* | [--->] HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD import_creation_data.
DATA ls_header TYPE mepoheader.
CHECK header->is_changeable( ) EQ abap_true.
CHECK me->import_cntr_data EQ abap_true.
IMPORT po_header TO ls_header FROM MEMORY ID zcl_rcm_ptdo_const=>memid_po_create.
IF sy-subrc EQ 0.
ls_header-bsart = header->get_data( )-bsart.
header->set_data( ls_header ).
ENDIF.
import_cntr_data = abap_false.
ENDMETHOD.
ENDCLASS.
class ZCL_RCM_COBL_CNTR_EXTEND definition
public
create protected .
public section.
*"* public components of class ZCL_RCM_COBL_CNTR_EXTEND
*"* do not include other source files here!!!
interface ZIF_RCM_CONST load .
type-pools ABAP .
constants KASSA_SUBSTITUTION type ABAP_BOOL value abap_true. "#EC NOTEXT
constants TCODE_CASH_JOURNAL type SYTCODE value 'FBCJ'. "#EC NOTEXT
data TAB_BKPF type BKPF_T read-only .
data TAB_BSEG type BSEG_T read-only .
data TAB_BSEG_SUB type BSEG_SUBST_T read-only .
constants HKONT_FI_PAT1 type STRING value '^(91|90).*'. "#EC NOTEXT
constants HKONT_FI_PAT2 type STRING value '^(3|10|15).*'. "#EC NOTEXT
constants HKONT_FI_CNTR_PAT1 type STRING value '^(60|68|69|73|76).*'. "#EC NOTEXT
constants HKONT_FI_CNTR_PAT2 type STRING value '^(62|76).*'. "#EC NOTEXT
data COBL type COBL read-only .
data COBL_AD type COBL_AD read-only .
data FMDERIVE type FMDERIVE read-only .
constants TCODE_SALES_ORDER_CREATE type SYTCODE value 'VA01'. "#EC NOTEXT
constants TCODE_TR_POST_FLOWS type SYTCODE value 'TBB1'. "#EC NOTEXT
constants TCODE_MEPO_CREATE type SYTCODE value 'ME21N'. "#EC NOTEXT
constants TCODE_MEPO_CHANGE type SYTCODE value 'ME22N'. "#EC NOTEXT
constants TCODE_MEPO_VIEW type SYTCODE value 'ME23N'. "#EC NOTEXT
constants TCODE_FI_POST type SYTCODE value 'FB01'. "#EC NOTEXT
constants SHKZG_DEBIT type SHKZG value 'S'. "#EC NOTEXT
constants SHKZG_CREDIT type SHKZG value 'H'. "#EC NOTEXT
constants KOART_GL type KOART value 'S'. "#EC NOTEXT
constants KOART_VENDOR type KOART value 'K'. "#EC NOTEXT
constants KOART_CUSTOMER type KOART value 'D'. "#EC NOTEXT
constants TCODE_FI_POST_CREDITOR type SYTCODE value 'FB70'. "#EC NOTEXT
constants TCODE_FI_POST_DEBITOR type SYTCODE value 'FB60'. "#EC NOTEXT
constants TCODE_FI_CASH_JOURNAL type SYTCODE value 'FBCJ'. "#EC NOTEXT
methods FI_ITEM_SUITABLE_FOR_SUBST
importing
!FI_HEADER type BKPF
!FI_ITEM type BSEG
returning
value(SUITABLE) type ABAP_BOOL .
methods FI_SETUP
importing
!TAB_BKPF type BKPF_T
!TAB_BSEG type BSEG_T
!TAB_BSEG_SUB type BSEG_SUBST_T
returning
value(INSTANCE) type ref to ZCL_RCM_COBL_CNTR_EXTEND .
methods FI_SUBSTITUTION
returning
value(INSTANCE) type ref to ZCL_RCM_COBL_CNTR_EXTEND .
methods VALIDATE_USER_TEMP .
methods DERIVE
returning
value(INSTANCE) type ref to ZCL_RCM_COBL_CNTR_EXTEND .
class-methods GET_CONTRACT_BUDGET_CODING
importing
value(FIKRS) type FIKRS optional
value(CNTR_NUM) type ZIF_RCM_CONST=>TD_CONTRACT_NUM
value(FIPOS_TYPE) type FMCI-POTYP optional
exporting
value(FUNDS_CENTER) type FISTL
value(COMMIT_ITEM) type FIPOS .
class-methods NEW
returning
value(INSTANCE) type ref to ZCL_RCM_COBL_CNTR_EXTEND .
methods SETUP
importing
!I_COBL type COBL optional
!I_COBL_AD type COBL_AD optional
!C_FMDERIVE type FMDERIVE
returning
value(INSTANCE) type ref to ZCL_RCM_COBL_CNTR_EXTEND .
protected section.
*"* protected components of class ZCL_RCM_COBL_CNTR_EXTEND
*"* do not include other source files here!!!
class-data MEMORIZED_FIPOS type FIPOS .
methods FILL_FI_SUBSTITUTION
importing
!FI_HEADER type BKPF
!FI_ITEM type BSEG
!INDEX type SYTABIX
!FIPOS type FIPOS
!FUND_CENTER type FISTL .
methods GET_FI_CASH_JOURNAL_FIPOS_TYPE
returning
value(FIPOS_TYPE) type FMCI-POTYP .
methods GET_FI_FIPOS_TYPE
importing
!FI_ITEM type BSEG
!FI_HEADER type BKPF
returning
value(FIPOS_TYPE) type FMCI-POTYP .
methods GET_TR_FIPOS_TYPE
importing
value(CNTR_NUM) type ZIF_RCM_CONST=>TD_CONTRACT_NUM
returning
value(FIPOS_TYPE) type FMCI-POTYP .
class-methods GET_VALID_PB_ITEM
importing
!FIKRS type FIKRS
!ITEMS type ZTRCM_SUBCOMP_ITEM_PB
!FIPOS_TYPE type FMCI-POTYP
returning
value(ITEM) type ZSRCM_SUBCOMP_ITEM_PB
raising
ZCX_RCM .
methods READ_FI_CASH_JOURNAL_CNTR_NUM
returning
value(CNTR_NUM) type ZIF_RCM_CONST=>TD_CONTRACT_NUM .
methods FILL_BUDGET_CODING
importing
value(CNTR_NUM) type ZIF_RCM_CONST=>TD_CONTRACT_NUM
value(FIPOS_TYPE) type FMCI-POTYP .
type-pools ABAP .
methods POST_FLOWS_SUITABLE
returning
value(SUITABLE) type ABAP_BOOL .
class-methods READ_FIN_ACCT_CNTR_NUM
returning
value(CNTR_NUM) type ZIF_RCM_CONST=>TD_CONTRACT_NUM .
methods READ_FI_POST_CNTR_NUM
importing
!FI_HEADER type BKPF
returning
value(CNTR_NUM) type ZIF_RCM_CONST=>TD_CONTRACT_NUM .
class-methods READ_MEPO_CNTR_NUM
returning
value(CNTR_NUM) type ZIF_RCM_CONST=>TD_CONTRACT_NUM .
class-methods READ_SALES_ORDER_CNTR_NUM
returning
value(CNTR_NUM) type ZIF_RCM_CONST=>TD_CONTRACT_NUM .
private section.
*"* private components of class ZCL_RCM_COBL_CNTR_EXTEND
*"* do not include other source files here!!!
ENDCLASS.
CLASS ZCL_RCM_COBL_CNTR_EXTEND IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_RCM_COBL_CNTR_EXTEND->DERIVE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] INSTANCE TYPE REF TO ZCL_RCM_COBL_CNTR_EXTEND
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD derive.
DATA ld_cntr_num TYPE zif_rcm_const=>td_contract_num.
DATA ld_fipos_type TYPE fmci-potyp.
instance = me.
CASE sy-tcode.
"Деривация в заказы клиента SD
WHEN tcode_sales_order_create.
ld_cntr_num = read_sales_order_cntr_num( ).
ld_fipos_type = zcl_rcm_ptdo_const=>fipos_type_debit.
"Деривация в проводке сделки TR
WHEN tcode_tr_post_flows.
ld_cntr_num = read_fin_acct_cntr_num( ).
ld_fipos_type = get_tr_fipos_type( ld_cntr_num ).
"Деривация в кассовом журнале FI
WHEN tcode_cash_journal.
ld_cntr_num = read_fi_cash_journal_cntr_num( ).
ld_fipos_type = get_fi_cash_journal_fipos_type( ).
"Деривация в заказе MM-PUR
WHEN tcode_mepo_create
OR tcode_mepo_change
OR tcode_mepo_view.
ld_cntr_num = read_mepo_cntr_num( ).
ld_fipos_type = zcl_rcm_ptdo_const=>fipos_type_credit.
ENDCASE.
CHECK ld_cntr_num IS NOT INITIAL
AND ld_fipos_type IS NOT INITIAL.
fill_budget_coding( cntr_num = ld_cntr_num
fipos_type = ld_fipos_type ).
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_RCM_COBL_CNTR_EXTEND->FILL_BUDGET_CODING
* +-------------------------------------------------------------------------------------------------+
* | [--->] CNTR_NUM TYPE ZIF_RCM_CONST=>TD_CONTRACT_NUM
* | [--->] FIPOS_TYPE TYPE FMCI-POTYP
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD fill_budget_coding.
DATA ld_fipos TYPE fipos.
DATA ld_fistl TYPE fistl.
DATA ls_subcomp TYPE scmg_subcomponent_backend.
DATA lt_subcomp TYPE scmg_tt_subcomponent_backend.
DATA li_item_pb_api TYPE REF TO zif_case_subcomp_item_pb_api.
DATA lt_item_pb LIKE li_item_pb_api->gt_outtab.
DATA ls_item_pb LIKE LINE OF lt_item_pb.
get_contract_budget_coding( EXPORTING cntr_num = cntr_num
fipos_type = fipos_type
IMPORTING commit_item = ld_fipos
funds_center = me->fmderive-fund_center ).
me->fmderive-commit_item = zcl_fm_utils=>get_fipex_by_fipos( ld_fipos ).
me->memorized_fipos = ld_fipos.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_RCM_COBL_CNTR_EXTEND->FILL_FI_SUBSTITUTION
* +-------------------------------------------------------------------------------------------------+
* | [--->] FI_HEADER TYPE BKPF
* | [--->] FI_ITEM TYPE BSEG
* | [--->] INDEX TYPE SYTABIX
* | [--->] FIPOS TYPE FIPOS
* | [--->] FUND_CENTER TYPE FISTL
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD fill_fi_substitution.
DATA lr_bseg_subst TYPE REF TO bseg_subst.
DATA ls_bseg_subst TYPE bseg_subst.
READ TABLE me->tab_bseg_sub REFERENCE INTO lr_bseg_subst WITH KEY tabix = index.
IF sy-subrc NE 0.
MOVE-CORRESPONDING fi_item TO ls_bseg_subst.
ls_bseg_subst-tabix = index.
INSERT ls_bseg_subst INTO TABLE me->tab_bseg_sub REFERENCE INTO lr_bseg_subst.
ENDIF.
lr_bseg_subst->fipos = fipos.
lr_bseg_subst->fistl = fund_center.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_RCM_COBL_CNTR_EXTEND->FI_ITEM_SUITABLE_FOR_SUBST
* +-------------------------------------------------------------------------------------------------+
* | [--->] FI_HEADER TYPE BKPF
* | [--->] FI_ITEM TYPE BSEG
* | [<-()] SUITABLE TYPE ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD fi_item_suitable_for_subst.
IF fi_item-koart EQ koart_gl AND (
( match( val = fi_item-hkont regex = hkont_fi_pat1 ) NE ''
AND fi_header-blart EQ 'DR'
AND fi_item-shkzg EQ shkzg_credit
AND fi_item-ktosl EQ space )
OR ( match( val = fi_item-hkont regex = hkont_fi_pat2 ) NE ''
AND fi_header-blart EQ 'KR'
AND fi_item-shkzg EQ shkzg_debit )
).
suitable = abap_true.
ENDIF.
"Касса
IF kassa_substitution EQ abap_true.
IF fi_item-koart EQ koart_vendor
AND fi_item-shkzg EQ shkzg_debit
AND fi_header-blart EQ 'RO'.
suitable = abap_true.
ELSEIF fi_item-shkzg EQ shkzg_credit
AND fi_header-blart EQ 'PO'
AND ( fi_item-koart EQ koart_vendor
OR fi_item-koart EQ koart_customer ).
suitable = abap_true.
ENDIF.
ENDIF.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_RCM_COBL_CNTR_EXTEND->FI_SETUP
* +-------------------------------------------------------------------------------------------------+
* | [--->] TAB_BKPF TYPE BKPF_T
* | [--->] TAB_BSEG TYPE BSEG_T
* | [--->] TAB_BSEG_SUB TYPE BSEG_SUBST_T
* | [<-()] INSTANCE TYPE REF TO ZCL_RCM_COBL_CNTR_EXTEND
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD fi_setup.
me->tab_bkpf = tab_bkpf.
me->tab_bseg = tab_bseg.
me->tab_bseg_sub = tab_bseg_sub.
instance = me.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_RCM_COBL_CNTR_EXTEND->FI_SUBSTITUTION
* +-------------------------------------------------------------------------------------------------+
* | [<-()] INSTANCE TYPE REF TO ZCL_RCM_COBL_CNTR_EXTEND
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD fi_substitution.
DATA ls_fi_header TYPE bkpf.
DATA ls_fi_item TYPE bseg.
DATA ld_cntr_num TYPE zif_rcm_const=>td_contract_num.
DATA ld_fipos_type TYPE fmci-potyp.
DATA ld_fipos TYPE fipos.
DATA ld_fund_center TYPE fistl.
DATA ld_item_index TYPE sytabix.
instance = me.
CHECK sy-tcode EQ tcode_fi_post
OR sy-tcode EQ tcode_fi_post_creditor
OR sy-tcode EQ tcode_fi_post_debitor
OR sy-tcode EQ tcode_fi_cash_journal.
LOOP AT me->tab_bkpf INTO ls_fi_header.
ld_cntr_num = read_fi_post_cntr_num( ls_fi_header ).
CHECK ld_cntr_num IS NOT INITIAL.
LOOP AT me->tab_bseg INTO ls_fi_item.
ld_item_index = sy-tabix.
CHECK fi_item_suitable_for_subst(
fi_header = ls_fi_header
fi_item = ls_fi_item ) EQ abap_true.
ld_fipos_type = get_fi_fipos_type( fi_header = ls_fi_header
fi_item = ls_fi_item ).
CHECK ld_fipos_type IS NOT INITIAL.
get_contract_budget_coding( EXPORTING cntr_num = ld_cntr_num
fipos_type = ld_fipos_type
IMPORTING commit_item = ld_fipos
funds_center = ld_fund_center ).
fill_fi_substitution( index = ld_item_index
fi_item = ls_fi_item
fi_header = ls_fi_header
fipos = ld_fipos
fund_center = ld_fund_center ).
ENDLOOP.
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_RCM_COBL_CNTR_EXTEND=>GET_CONTRACT_BUDGET_CODING
* +-------------------------------------------------------------------------------------------------+
* | [--->] FIKRS TYPE FIKRS(optional)
* | [--->] CNTR_NUM TYPE ZIF_RCM_CONST=>TD_CONTRACT_NUM
* | [--->] FIPOS_TYPE TYPE FMCI-POTYP(optional)
* | [<---] FUNDS_CENTER TYPE FISTL
* | [<---] COMMIT_ITEM TYPE FIPOS
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_contract_budget_coding.
DATA ld_case_guid TYPE scmg_case_guid.
DATA li_case_api TYPE REF TO if_scmg_case_api.
DATA li_mva_manager TYPE REF TO zif_rcm_case_mva_manager.
DATA lt_lines TYPE ztt_rcm_mva_line.
DATA li_line TYPE REF TO zif_rcm_case_mva_line.
DATA ld_fistl TYPE fistl.
DATA ls_subcomp TYPE scmg_subcomponent_backend.
DATA lt_subcomp TYPE scmg_tt_subcomponent_backend.
DATA li_item_pb_api TYPE REF TO zif_case_subcomp_item_pb_api.
DATA lt_item_pb LIKE li_item_pb_api->gt_outtab.
DATA ls_item_pb LIKE LINE OF lt_item_pb.
DATA ld_bukrs TYPE bukrs.
CHECK cntr_num IS NOT INITIAL.
ld_case_guid = zcl_rcm_utils=>find_case_by_external_ref( cntr_num ).
CHECK ld_case_guid IS NOT INITIAL.
li_case_api = cl_scmg_case_api=>open_case( ld_case_guid ).
li_mva_manager ?= zcl_rcm_utils=>connect_rcm_object(
rm_object = li_case_api->get_backend_case( )
class_role = zcl_rcm_ptdo_const=>clro_mva_manager
target_var = li_mva_manager ).
CHECK li_mva_manager IS BOUND.
TRY.
* lt_lines = li_mva_manager->get_mva_object( zif_rcm_const=>funds_center )->get_lines( ).
*
* CHECK lines( lt_lines ) EQ 1.
* READ TABLE lt_lines INTO li_line INDEX 1.
*
* ld_fistl = li_line->get_value( zcl_rcm_ptdo_const=>mva_fistl-id ).
lt_subcomp = li_case_api->get_backend_case( )->get_subcomponents( ).
LOOP AT lt_subcomp INTO ls_subcomp.
CHECK ls_subcomp-class->get_type( ) EQ zcl_rcm_ptdo_const=>subcomp_type_item_pb.
li_item_pb_api ?= ls_subcomp-class->get_api( ).
lt_item_pb = li_item_pb_api->gt_outtab.
ENDLOOP.
IF fikrs IS INITIAL.
ld_bukrs = li_case_api->attribute_get( zif_rcm_const=>bukrs ).
fikrs = zcl_fm_utils=>get_fm_area( ld_bukrs ) .
ENDIF.
ls_item_pb = get_valid_pb_item( items = lt_item_pb
fipos_type = fipos_type
fikrs = fikrs ).
CHECK ls_item_pb IS NOT INITIAL.
funds_center = ls_item_pb-zfistl_item .
commit_item = ls_item_pb-zfipos.
CATCH zcx_rcm_mva zcx_rcm .
ENDTRY.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_RCM_COBL_CNTR_EXTEND->GET_FI_CASH_JOURNAL_FIPOS_TYPE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] FIPOS_TYPE TYPE FMCI-POTYP
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_fi_cash_journal_fipos_type.
IF ( cobl-koart EQ koart_vendor
OR cobl-koart EQ koart_customer ).
IF cobl-shkzg EQ shkzg_debit.
fipos_type = zcl_rcm_ptdo_const=>fipos_type_credit.
ELSE.
fipos_type = zcl_rcm_ptdo_const=>fipos_type_debit.
ENDIF.
ENDIF.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_RCM_COBL_CNTR_EXTEND->GET_FI_FIPOS_TYPE
* +-------------------------------------------------------------------------------------------------+
* | [--->] FI_ITEM TYPE BSEG
* | [--->] FI_HEADER TYPE BKPF
* | [<-()] FIPOS_TYPE TYPE FMCI-POTYP
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_fi_fipos_type.
CASE fi_item-shkzg.
WHEN shkzg_credit.
fipos_type = zcl_rcm_ptdo_const=>fipos_type_debit.
WHEN shkzg_debit.
fipos_type = zcl_rcm_ptdo_const=>fipos_type_credit.
ENDCASE.
"Касса
IF kassa_substitution EQ abap_true.
IF fi_item-koart EQ koart_vendor
AND fi_item-shkzg EQ shkzg_debit
AND fi_header-blart EQ 'RO'.
fipos_type = zcl_rcm_ptdo_const=>fipos_type_credit.
ELSEIF fi_item-shkzg EQ shkzg_credit
AND fi_header-blart EQ 'PO'
AND ( fi_item-koart EQ koart_vendor
OR fi_item-koart EQ koart_customer ).
fipos_type = zcl_rcm_ptdo_const=>fipos_type_debit.
ENDIF.
ENDIF.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_RCM_COBL_CNTR_EXTEND->GET_TR_FIPOS_TYPE
* +-------------------------------------------------------------------------------------------------+
* | [--->] CNTR_NUM TYPE ZIF_RCM_CONST=>TD_CONTRACT_NUM
* | [<-()] FIPOS_TYPE TYPE FMCI-POTYP
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_tr_fipos_type.
DATA ld_case_guid TYPE scmg_case_guid.
DATA li_case_api TYPE REF TO if_scmg_case_api.
FIELD-SYMBOLS <deal> TYPE vtbfha.
ASSIGN ('(RFTBBB00)VTBFHA') TO <deal>.
CHECK sy-subrc EQ 0.
CHECK cobl-koart EQ koart_gl.
CHECK cntr_num IS NOT INITIAL.
ld_case_guid = zcl_rcm_utils=>find_case_by_external_ref( cntr_num ).
CHECK ld_case_guid IS NOT INITIAL.
li_case_api = cl_scmg_case_api=>open_case( ld_case_guid ).
CASE <deal>-sgsart .
WHEN '51A' OR '55A'. "Более одного БА
CASE li_case_api->attribute_get( zif_rcm_const=>z_cntr_category ).
WHEN 'FINANCE04' OR 'FINANCE17'.
WHEN OTHERS.
EXIT.
ENDCASE.
IF match( val = cobl-hkont regex = zcl_rcm_ptdo_const=>hkont_pat_flow_derv ) NE '' .
CASE cobl-shkzg.
WHEN shkzg_credit.
fipos_type = zcl_rcm_ptdo_const=>fipos_type_debit.
WHEN shkzg_debit.
fipos_type = zcl_rcm_ptdo_const=>fipos_type_credit.
ENDCASE.
ELSEIF match( val = cobl-hkont regex = zcl_rcm_ptdo_const=>hkont_pat_flow_derv2 ) NE ''
AND cobl-shkzg EQ shkzg_credit .
fipos_type = zcl_rcm_ptdo_const=>fipos_type_credit.
ENDIF.
WHEN OTHERS." только один БА
CHECK <deal>-sfhaart NE 'F02' AND <deal>-sfhaart NE 'P02'.
CHECK cobl-shkzg EQ shkzg_debit.
CHECK match( val = cobl-hkont regex = zcl_rcm_ptdo_const=>hkont_pat_flow_derv ) NE ''.
fipos_type = zcl_rcm_ptdo_const=>fipos_type_credit.
ENDCASE.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Protected Method ZCL_RCM_COBL_CNTR_EXTEND=>GET_VALID_PB_ITEM
* +-------------------------------------------------------------------------------------------------+
* | [--->] FIKRS TYPE FIKRS
* | [--->] ITEMS TYPE ZTRCM_SUBCOMP_ITEM_PB
* | [--->] FIPOS_TYPE TYPE FMCI-POTYP
* | [<-()] ITEM TYPE ZSRCM_SUBCOMP_ITEM_PB
* | [!CX!] ZCX_RCM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_valid_pb_item.
DATA BEGIN OF ls_item_group.
DATA fipos_type TYPE fmci-potyp.
DATA BEGIN OF fin_mgmt.
DATA fistl LIKE item-zfistl_item .
DATA fipos LIKE item-zfipos .
DATA END OF fin_mgmt.
DATA item_ref LIKE REF TO item.
DATA END OF ls_item_group.
DATA lt_item_group LIKE HASHED TABLE OF ls_item_group WITH UNIQUE KEY fipos_type.
DATA ls_new_group LIKE ls_item_group.
LOOP AT items REFERENCE INTO ls_new_group-item_ref .
ls_new_group-fipos_type = zcl_fm_utils=>get_fipos_type(
fipos = ls_new_group-item_ref->zfipos
fikrs = fikrs ).
ls_new_group-fin_mgmt-fistl = ls_new_group-item_ref->zfistl_item.
ls_new_group-fin_mgmt-fipos = ls_new_group-item_ref->zfipos.
READ TABLE lt_item_group INTO ls_item_group
WITH TABLE KEY fipos_type = ls_new_group-fipos_type.
IF sy-subrc NE 0.
INSERT ls_new_group INTO TABLE lt_item_group.
ELSEIF ls_new_group-fin_mgmt NE ls_item_group-fin_mgmt .
RAISE EXCEPTION TYPE lcx_no_valid_item.
ENDIF.
ENDLOOP.
READ TABLE lt_item_group INTO ls_item_group WITH TABLE KEY fipos_type = fipos_type.
IF sy-subrc NE 0.
RAISE EXCEPTION TYPE lcx_no_valid_item.
ENDIF.
item = ls_item_group-item_ref->*.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_RCM_COBL_CNTR_EXTEND=>NEW
* +-------------------------------------------------------------------------------------------------+
* | [<-()] INSTANCE TYPE REF TO ZCL_RCM_COBL_CNTR_EXTEND
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD new.
CREATE OBJECT instance.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_RCM_COBL_CNTR_EXTEND->POST_FLOWS_SUITABLE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] SUITABLE TYPE ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD post_flows_suitable.
CHECK cobl-shkzg EQ shkzg_debit.
CHECK cobl-koart EQ koart_gl.
CHECK match( val = cobl-hkont regex = zcl_rcm_ptdo_const=>hkont_pat_flow_derv ) NE '' .
suitable = abap_true.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Protected Method ZCL_RCM_COBL_CNTR_EXTEND=>READ_FIN_ACCT_CNTR_NUM
* +-------------------------------------------------------------------------------------------------+
* | [<-()] CNTR_NUM TYPE ZIF_RCM_CONST=>TD_CONTRACT_NUM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD read_fin_acct_cntr_num.
FIELD-SYMBOLS <fi_acct_item> TYPE accit.
ASSIGN ('(SAPLRWCL)T_ACCIT') TO <fi_acct_item>.
CHECK sy-subrc EQ 0 AND <fi_acct_item> IS ASSIGNED.
cntr_num = <fi_acct_item>-zuonr.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_RCM_COBL_CNTR_EXTEND->READ_FI_CASH_JOURNAL_CNTR_NUM
* +-------------------------------------------------------------------------------------------------+
* | [<-()] CNTR_NUM TYPE ZIF_RCM_CONST=>TD_CONTRACT_NUM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD read_fi_cash_journal_cntr_num.
FIELD-SYMBOLS <cash_journal_posting> TYPE iscj_postings.
ASSIGN ('(SAPMFCJ0)ITCJ_E_POSTINGS') TO <cash_journal_posting>.
CHECK sy-subrc EQ 0.
cntr_num = <cash_journal_posting>-alloc_nmbr.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_RCM_COBL_CNTR_EXTEND->READ_FI_POST_CNTR_NUM
* +-------------------------------------------------------------------------------------------------+
* | [--->] FI_HEADER TYPE BKPF
* | [<-()] CNTR_NUM TYPE ZIF_RCM_CONST=>TD_CONTRACT_NUM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD read_fi_post_cntr_num.
DATA ls_fi_item TYPE bseg.
LOOP AT me->tab_bseg INTO ls_fi_item .
IF ( match( val = ls_fi_item-hkont regex = hkont_fi_cntr_pat1 ) NE ''
AND fi_header-blart EQ 'KR'
AND ls_fi_item-shkzg EQ shkzg_credit )
OR ( match( val = ls_fi_item-hkont regex = hkont_fi_cntr_pat2 ) NE ''
AND fi_header-blart EQ 'DR'
AND ls_fi_item-shkzg EQ shkzg_debit ).
cntr_num = ls_fi_item-zuonr.
RETURN.
ENDIF.
"Касса
IF kassa_substitution EQ abap_true.
IF ( ls_fi_item-koart EQ koart_vendor
AND ls_fi_item-shkzg EQ shkzg_debit
AND fi_header-blart EQ 'RO' )
OR ( ls_fi_item-shkzg EQ shkzg_credit
AND fi_header-blart EQ 'PO'
AND ( ls_fi_item-koart EQ koart_vendor
OR ls_fi_item-koart EQ koart_customer ) ) .
cntr_num = ls_fi_item-zuonr.
RETURN.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Protected Method ZCL_RCM_COBL_CNTR_EXTEND=>READ_MEPO_CNTR_NUM
* +-------------------------------------------------------------------------------------------------+
* | [<-()] CNTR_NUM TYPE ZIF_RCM_CONST=>TD_CONTRACT_NUM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD read_mepo_cntr_num.
FIELD-SYMBOLS <purchase_order_header> TYPE ekko.
ASSIGN ('(SAPLMEPO)EKKO') TO <purchase_order_header>.
CHECK sy-subrc EQ 0.
cntr_num = <purchase_order_header>-zzdognr.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Protected Method ZCL_RCM_COBL_CNTR_EXTEND=>READ_SALES_ORDER_CNTR_NUM
* +-------------------------------------------------------------------------------------------------+
* | [<-()] CNTR_NUM TYPE ZIF_RCM_CONST=>TD_CONTRACT_NUM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD read_sales_order_cntr_num.
FIELD-SYMBOLS <sales_order_header> TYPE vbak.
ASSIGN ('(SAPMV45A)VBAK') TO <sales_order_header>.
CHECK sy-subrc EQ 0.
*---> gtfsos 21.08.2012
* ZUONR - номер карточки договора в SD заказах ИУС ПЗ
" cntr_num = <sales_order_header>-bstnk.
cntr_num = <sales_order_header>-zuonr.
* <---- gtfsos 21.08.2012
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_RCM_COBL_CNTR_EXTEND->SETUP
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_COBL TYPE COBL(optional)
* | [--->] I_COBL_AD TYPE COBL_AD(optional)
* | [--->] C_FMDERIVE TYPE FMDERIVE
* | [<-()] INSTANCE TYPE REF TO ZCL_RCM_COBL_CNTR_EXTEND
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD setup.
me->cobl = i_cobl.
me->cobl_ad = i_cobl_ad.
me->fmderive = c_fmderive.
instance = me.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_RCM_COBL_CNTR_EXTEND->VALIDATE_USER_TEMP
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD validate_user_temp.
DATA ld_raise_error TYPE abap_bool.
IF fmderive-usertemp1 IS NOT INITIAL
AND me->memorized_fipos IS NOT INITIAL
AND fmderive-usertemp1 NE me->memorized_fipos.
ld_raise_error = abap_true.
ENDIF.
CLEAR me->memorized_fipos.
IF ld_raise_error EQ abap_true.
MESSAGE e032(zrcm_ptdo).
ENDIF.
ENDMETHOD.
ENDCLASS.
*"* use this source file for the definition and implementation of
*"* local helper classes, interface definitions and type
*"* declarations
CLASS lcl_check DEFINITION DEFERRED.
CLASS lcl_attr_condition DEFINITION DEFERRED.
CLASS lcl_and_condition DEFINITION DEFERRED.
CLASS lcl_or_condition DEFINITION DEFERRED.
TYPES td_cond_attr TYPE int4.
CONSTANTS BEGIN OF cond_attr.
CONSTANTS fipos_type TYPE td_cond_attr VALUE 1.
CONSTANTS fi_account TYPE td_cond_attr VALUE 2.
CONSTANTS fi_acc_type TYPE td_cond_attr VALUE 3.
CONSTANTS fi_debcred_ind TYPE td_cond_attr VALUE 4.
CONSTANTS END OF cond_attr.
*----------------------------------------------------------------------*
* CLASS lcx_bad_coding DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcx_no_valid_item DEFINITION INHERITING FROM zcx_rcm.
ENDCLASS. "lcx_bad_coding DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_check DEFINITION.
ENDCLASS. "lcl_check DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_condition DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_attr_condition DEFINITION.
PUBLIC SECTION.
DATA attr TYPE td_cond_attr.
METHODS with_attr IMPORTING value(cond_attr) TYPE td_cond_attr
RETURNING value(condition) TYPE REF TO lcl_attr_condition.
ENDCLASS. "lcl_condition DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_and_condition DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_and_condition DEFINITION.
ENDCLASS. "lcl_and_condition DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_or_condition DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_or_condition DEFINITION.
ENDCLASS. "lcl_or_condition DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_condition IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_attr_condition IMPLEMENTATION.
METHOD with_attr.
ENDMETHOD. "with_attr
ENDCLASS. "lcl_condition IMPLEMENTATION
FUNCTION z_open_fi_interface_00001120.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(I_BKDF) TYPE BKDF OPTIONAL
*" TABLES
*" T_BKPF STRUCTURE BKPF
*" T_BSEG STRUCTURE BSEG
*" T_BKPFSUB STRUCTURE BKPF_SUBST
*" T_BSEGSUB STRUCTURE BSEG_SUBST
*" T_BSEC STRUCTURE BSEC OPTIONAL
*" CHANGING
*" REFERENCE(I_BKDFSUB) TYPE BKDF_SUBST OPTIONAL
*"----------------------------------------------------------------------
** ASLEONOV 13.09.2012 18:42:12
* break gtflas.
FIELD-SYMBOLS:
<bsg> TYPE bseg,
<sgs> TYPE bseg_subst.
DATA: lgsber TYPE bseg-gsber VALUE '3900',
lnum TYPE i,
wa_bseg1 TYPE bseg,
wa_bseg2 TYPE bseg.
*&---------------------------------------------------------------------*
* Название : Процедура замещения крассного сторно при выравнивании
*
* Код разработки : D0061/01
* Дата создания : 13.09.2012
* Транспорт : MR5K901044
* Постановщик : Т.Лавор
* Разработчик : А.Леонов
* Описание Замещение красного сторно для документов выравнивания контрагентов
*** Цель: Чтобы документы выравнивания по одному счету не создавали дополнительных оборотов
*** Работает если при выравнивании создается документ по одному счету
*&---------------------------------------------------------------------*
LOOP AT t_bkpf WHERE blart = 'KV' OR blart = 'DV' OR blart = 'AB'.
CLEAR: lnum, wa_bseg1, wa_bseg1 .
LOOP AT t_bseg WHERE bukrs = t_bkpf-bukrs AND belnr = t_bkpf-belnr
AND gjahr = t_bkpf-gjahr.
lnum = lnum + 1.
IF lnum = 1.
MOVE-CORRESPONDING t_bseg TO wa_bseg1.
ELSEIF lnum = 2.
MOVE-CORRESPONDING t_bseg TO wa_bseg2.
ENDIF.
ENDLOOP.
IF lnum = 2.
IF wa_bseg1-hkont = wa_bseg2-hkont.
LOOP AT t_bseg WHERE bukrs = t_bkpf-bukrs AND belnr = t_bkpf-belnr
AND gjahr = t_bkpf-gjahr.
IF t_bseg-bukrs = wa_bseg1-bukrs AND t_bseg-belnr = wa_bseg1-belnr
AND t_bseg-gjahr = wa_bseg1-gjahr AND t_bseg-buzei = wa_bseg1-buzei.
READ TABLE t_bsegsub WITH KEY tabix = sy-tabix ASSIGNING <sgs>.
IF sy-subrc = 0 AND <sgs>-xnegp IS INITIAL.
<sgs>-xnegp = 'X'.
ELSE.
CLEAR: t_bsegsub.
t_bsegsub-tabix = sy-tabix.
t_bsegsub-xnegp = 'X'.
APPEND t_bsegsub.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
* Название : Процедура замещения бизнес сферы
*
* Код разработки : D0062/01
* Дата создания : 14.02.2012
* Транспорт : MR5K901044
* Постановщик : Т.Лавор
* Разработчик : А.Леонов
* Описание Замещение бизнес-сферы во все позиции документа
*** Цель: Единая бизнес сфера во всех позициях
*** Работает если БЕ равна 1039
*&---------------------------------------------------------------------*
LOOP AT t_bkpf WHERE bukrs = '1039'.
LOOP AT t_bsegsub ASSIGNING <sgs>.
IF <sgs> IS ASSIGNED.
<sgs>-gsber = lgsber.
ENDIF.
ENDLOOP.
ENDLOOP.
************************************************************************
** Вызываем ФМ коллег FI_FM не удалять, т.к. из BTE таблиц я его снес
CALL FUNCTION 'ZPZ_PDOCS_CLR_COPY'
EXPORTING
i_bkdf = i_bkdf
TABLES
t_bkpf = t_bkpf[]
t_bseg = t_bseg[]
t_bkpfsub = t_bkpfsub[]
t_bsegsub = t_bsegsub[]
t_bsec = t_bsec[]
CHANGING
i_bkdfsub = i_bkdfsub.
** ASLEONOV 13.09.2012 18:42:16
*┌──────────────────────────────────────────────────────────────────╖
*│╔════════════════════════════════════════════════════════════════╕║
*│║ Деривация финансовых аналитик из договора │║
*│╙────────────────────────────────────────────────────────────────┘║
*│╔══════════════════╕╔════════════════════════════════════════════╕║
*│║ Разработчик │║ О. Нижников │║
*│╙──────────────────┘╙────────────────────────────────────────────┘║
*│╔══════════════════╕╔════════════════════════════════════════════╕║
*│║ Аналитик │║ В. Миронов │║
*│╙──────────────────┘╙────────────────────────────────────────────┘║
*│╔══════════════════╕╔════════════════════════════════════════════╕║
*│║ Код разработки │║ D0044-01 │║
*│╙──────────────────┘╙────────────────────────────────────────────┘║
*│╔══════════════════╕╔════════════════════════════════════════════╕║
*│║ Дата создания │║ 12.10.2012 │║
*│╙──────────────────┘╙────────────────────────────────────────────┘║
*│╔══════════════════╕╔════════════════════════════════════════════╕║
*│║ ID транспортного │║ MR5K901190 │║
*│║ запроса │║ │║
*│╙──────────────────┘╙────────────────────────────────────────────┘║
*│╔══════════════════╕╔════════════════════════════════════════════╕║
*│║ Постановка │║ Автоматически заполнить финансовые │║
*│║ │║ аналитики у соотв. позиции на основе │║
*│║ │║ данных из договора, указанного в другой │║
*│║ │║ специфической позиции. │║
*│╙──────────────────┘╙────────────────────────────────────────────┘║
*╘══════════════════════════════════════════════════════════════════╝
t_bsegsub[] = zcl_rcm_cobl_cntr_extend=>new( )->fi_setup(
tab_bkpf = t_bkpf[]
tab_bseg = t_bseg[]
tab_bseg_sub = t_bsegsub[]
)->fi_substitution( )->tab_bseg_sub.
ENDFUNCTION.
*&---------------------------------------------------------------------*
*& Include ZXFMDTU01
*&---------------------------------------------------------------------*
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(I_ENVIRONMENT) LIKE TABADRS-ABADRENV
*" REFERENCE(I_DERIVATION_DATE) LIKE SY-DATUM
*" REFERENCE(I_STEP_ID) TYPE TABADRS-STEPID
*" REFERENCE(I_FMDERIVE_SOURCE) LIKE FMDERIVE STRUCTURE FMDERIVE
*" EXPORTING
*" REFERENCE(E_FMDERIVE_TARGET) LIKE FMDERIVE STRUCTURE FMDERIVE
*" REFERENCE(E_EXIT_IS_ACTIVE)
*" REFERENCE(E_FAILED)
*" EXCEPTIONS
*" DERIVATION_FAILED
*"----------------------------------------------------------------------
zcl_rcm_cobl_cntr_extend=>new( )->setup( c_fmderive = i_fmderive_source )->validate_user_temp( ).
*&---------------------------------------------------------------------*
*& Include ZXFMDTU02
*&---------------------------------------------------------------------*
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_COBL) LIKE COBL STRUCTURE COBL
*" REFERENCE(I_COBL_AD) LIKE COBL_AD STRUCTURE COBL_AD
*" CHANGING
*" REFERENCE(C_FMDERIVE) LIKE FMDERIVE STRUCTURE FMDERIVE
*" VALUE(C_FLG_SKIP_BUFFER) TYPE XFELD OPTIONAL
*"----------------------------------------------------------------------
* Формирование заказов FI из модуля TR
c_fmderive = zcl_rcm_cobl_cntr_extend=>new( )->setup(
i_cobl = i_cobl
i_cobl_ad = i_cobl_ad
c_fmderive = c_fmderive
)->derive( )->fmderive.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment